跳至主要內容
Telemetry
瀏覽說明文件
概念與 SQL 模式更新於 2026年7月21日由 Telemetry 編輯團隊和產品團隊審查閱讀約需 4 分鐘

讓程式設計代理使用這篇文件

開啟 Claude Code、Codex、Cursor 或其他編碼代理的集中提示包,然後將其適應此處介紹的工作流程。

本頁內容
  1. 何時使用它們
  2. 將最有用的列放在前面
  3. 啟用修剪的過濾器
  4. 要避免什麼
  5. 推出工作流程
  6. 透過API設定

選擇分割區列

透過讓 Telemetry 跳過不能包含請求值的部分,分割區列可以使選擇性查詢更快。它們對於在大型資料表中重複調查一個客戶、服務、環境、追蹤或事件型別的代理和自動化工作流程特別有用。

它們與 SQL PARTITION BY 不同,它們不會更改查詢結果。 Telemetry 在寫入資料時對設定的值進行雜湊處理,並記錄每個部分的分割區資訊。在查詢時,相容的過濾器以相同的方式進行雜湊,因此可以在讀取資料之前排除不相關的部分。

何時使用它們

當所有這些都成立時對錶進行分割區:

  • 該資料表有足夠的資料或部分,掃描它是一項實質性工作
  • 重要查詢在同一欄位上重複過濾
  • 這些過濾器通常選擇資料表的一小部分
  • 該欄位是字串、布林值或數字標量

好的候選欄位包括 account_idworkspace_idserviceenvironmentevent 以及穩定的巢狀欄位,例如 request.region

對於逐個調查事件的代理來說,account_id 通常是強有力的第一列:

SELECT timestamp_utc, event, message
FROM app_events
WHERE account_id = 'acct_123'
  AND timestamp_utc >= now() - INTERVAL '24 hours'
ORDER BY timestamp_utc DESC

時間謂詞仍然縮小了時間視窗;帳戶謂詞還允許 Telemetry 修剪該視窗內的分割區部分。

將最有用的列放在前面

列順序定義了前導字首層次結構。鑑於:

{
  "partitionColumns": ["account_id", "event"]
}

Telemetry 可以對按以下條件過濾的查詢使用分割區修剪:

  • account_id
  • account_idevent

它無法將此佈局用於僅按 event 篩選的查詢,因為缺少第一列。為最廣泛的重要查詢集選擇第一列,然後僅當查詢通常按兩者過濾時才新增另一列。

從一列開始。僅在您可以描述它改進的查詢模式後才新增第二個。長列列表會建立越來越窄的寫入和壓縮組,而後面的列有助於減少查詢。

啟用修剪的過濾器

Telemetry 當前從字面相等、正 IN 以及與 AND 連線的 IS NULL 謂詞派生分割區修剪:

WHERE account_id = 'acct_123'

WHERE account_id IN ('acct_123', 'acct_456')

WHERE account_id = 'acct_123'
  AND event IN ('request_failed', 'request_retried')

WHERE account_id IS NULL

範圍謂詞、否定和不明確的 OR 表示式不會產生分割區修剪。例如,在 duration_ms 上分割區對 duration_ms > 1000 沒有幫助。查詢仍然正確;他們只是簡單地掃描而沒有進行最佳化。

巢狀標量路徑也可以工作:

{
  "partitionColumns": ["request.region"]
}
SELECT count(*)
FROM app_events
WHERE request.region = 'us-west-2'

不支援列表、物件和時間戳作為分割區列。時間戳過濾已經有自己的修剪路徑,通常更好地表示為查詢時間範圍。

要避免什麼

避免僅僅因為某個領域存在於每個事件中而選擇它。有用的分割區列反映了頻繁的、選擇性的查詢。

謹慎對待:

  • 幾乎每個查詢都會忽略的欄位
  • 主要使用範圍、LIKE 或否定查詢的欄位
  • 當查詢很少重複時快速變化或無界的值
  • 前導字首與實際查詢模式不匹配的多個列

低基數字段在刪除資料表的大部分內容時仍然有用,例如 environment = 'production'。高基數識別符號對於點調查非常有用,但它可能會導致寫入和壓縮碎片化。更喜歡在您真正關心的查詢中刪除最多資料的欄位,而不僅僅是具有最多不同值的欄位。

推出工作流程

  1. 檢查人員、儀表板、警示和代理執行的查詢。識別由最昂貴的選擇性查詢共享的相等過濾器。
  2. 確認該欄位並輸入 GET /tables/<table>/schema
  3. 透過資料表設定UI或表格 API設定一個分割區列。
  4. 保留重要查詢的時間過濾器;分割區剪枝是對時間剪枝的補充,而不是取代它。
  5. 在現有資料有時間重寫後重新執行代表性查詢。比較掃描的工作和延遲,而不僅僅是一次熱快取執行。
  6. 僅當常見查詢同時篩選第一列和第二列時才新增第二列。

新資料立即使用更改後的分割區規範。現有部分在後台重寫,未重寫的部分仍然可查詢,因此結果在遷移過程中保持完整。隨著更多資料表採用新佈局,效能逐漸提高。

透過API設定

curl -X PATCH https://api.telemetry.sh/tables/app_events/partition-columns \
  -H "Content-Type: application/json" \
  -H "Authorization: $API_KEY" \
  -d '{
    "partitionColumns": ["account_id", "event"]
  }'

要更改順序,請傳送完整的所需列表。要關閉分割區,請傳送 null 或空陣列:

curl -X PATCH https://api.telemetry.sh/tables/app_events/partition-columns \
  -H "Content-Type: application/json" \
  -H "Authorization: $API_KEY" \
  -d '{"partitionColumns": null}'

API 根據資料表的當前架構驗證欄位。有關確切的請求和回應合約,請參閱 資料表 API 參考

相關產品功能

在正式分析之前檢查表、欄位和原始行。

內容責任與技術參考

Telemetry 編輯團隊負責維護本文;產品團隊審查功能行為、範例和適用範圍。

檢視編輯規範