事件数据类型与可空性
Telemetry 从结构化事件推断表架构。灵活的摄取消除了预先的迁移步骤,但有用的 SQL 仍然取决于稳定的字段含义和类型。
选择耐用类型
使用字符串表示标识符和受控类别,使用数字表示将要计算的值,使用布尔值表示真正的两种状态事实,使用时间戳表示时刻。
| 价值 | 推荐领域 |
|---|---|
| 持续时间 | 数值 duration_ms |
| 钱 | 标准化金额加上源货币 |
| 标识符 | 字符串,即使它只包含数字 |
| 结果 | 受控字符串,例如 success、failed 或 timeout |
| 特征标志 | 当恰好有两个含义时为布尔值 |
| 活动时间 | 时区限定输入标准化为 timestamp_utc |
不要在一个部署中发送 "842" 一段时间,而在另一部署中发送 842。请勿将 status 重复用于一项服务中的 HTTP 代码和另一项服务中的工作流类别。
了解缺失值
日志 API 在标准化过程中删除空值、空对象和空数组。因此,缺少字段意味着该行上没有存储任何值;它并不意味着零、假、空字符串或未知。
当缺席具有分析意义时,使用 IS NULL。仅当替换具有合理的商业意义时才使用 COALESCE:
SELECT
event_name,
100.0 * SUM(CASE WHEN account_id IS NULL THEN 1 ELSE 0 END)
/ NULLIF(COUNT(*), 0) AS missing_account_rate_pct
FROM product_events
GROUP BY event_name;
必填字段空率配方 添加了卷保护和生产者版本上下文。
发展而不改变意义
添加可为空的字段通常是兼容的。更改字段类型或重新定义现有类别则不然。当含义发生变化时,引入新字段或 schema_version 并有意迁移查询。
嵌套对象成为可查询的点状字段。保持每个嵌套路径稳定,并避免元素结构在事件之间发生变化的数组。