事件資料型別與可空性
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 並有意遷移查詢。
巢狀物件成為可查詢的點狀欄位。保持每個巢狀路徑穩定,並避免元素結構在事件之間發生變化的陣列。