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

將帶有時間戳的事件轉變為可重用的操作檢視

執行時間感知型 SQL,檢查結果,並將分析儲存到您的團隊可以重新存取的儀表板中。

本頁內容
  1. 一致地儲存時間戳
  2. 使用時間函式查詢
  3. 1. 提取日期部分
  4. 2.按時間間隔分組
  5. 3. 比較時間範圍
  6. 4. 計算時間差
  7. 後續步驟

使用時間戳

使用 Telemetry 的 DataFusion SQL 引擎按天統計事件、比較不同週的資料,或測量事件之間的時間間隔。以下範例分別展示這些計算。

一致地儲存時間戳

Telemetry 確保每個事件都有時間戳。如果有效負載省略 timestamp,則日誌 API 會新增當前 UTC 時間。當源事件時間與攝取時間不同時,您還可以提供時區限定的 ISO 8601 值或 Unix 時間戳。 Telemetry 公開了用於 SQL 操作的最佳化 timestamp_utc 色譜柱。

日誌條目範例

{
  "event_id": "e12345",
  "event_type": "click",
  "user_id": "u67890",
  "timestamp": "2026-07-27T14:22:00.000Z",
  "metadata": {
    "browser": "Chrome",
    "device": "Mobile",
    "location": "New York"
  }
}

在此日誌中,源提供了自己的事件時間。當省略該欄位時,將使用攝取時間。

查詢基於時間的資料

使用timestamp_utc進行過濾、分桶、排序和時間運算。它具有本機 UTC 時間戳型別,並且是跨 Telemetry 資料表的一致查詢列。

使用 timestamp_utc 的好處

  • 更快的查詢執行速度,尤其是對於大型資料集。
  • 由於緊湊的時間戳格式最佳化了儲存。
  • 與 DataFusion 的 SQL 引擎相容,適用於 DATE_TRUNCEXTRACT 等基於時間的操作。

對於在攝取時建立的事件,您不需要傳送 timestamp。如果您確實傳送它,請使用時區限定的值,這樣當地時間就不會含糊不清。

使用時間函式查詢

1. 提取日期部分

使用 EXTRACT() 讀取時間戳記中的年或小時等部分。使用 DATE_TRUNC() 將時間戳記向下取整到時間區間的起點。

範例:提取星期幾

要從時間戳中提取星期幾,您可以使用:

SELECT 
    EXTRACT(DOW FROM timestamp_utc) AS day_of_week
FROM 
    event_log

此查詢返回每個事件的星期幾 (0-6),其中 0 表示星期日,6 表示星期六。

2.按時間間隔分組

時間函式的一個常見用例是按特定時間間隔(例如天、周或月)對事件進行分組,以檢視每個時間段內發生了多少事件。

範例:按天對事件進行分組

要按天對事件進行分組並計算每天的事件數,您可以使用 DATE_TRUNC()

SELECT 
    DATE_TRUNC('day', timestamp_utc) AS day,
    COUNT(*) AS event_count 
FROM 
    event_log 
GROUP BY 
    DATE_TRUNC('day', timestamp_utc) 
ORDER BY 
    day

此查詢將時間戳截斷為天級別,然後按這些截斷的天數對事件進行分組。結果是每天發生的事件的計數。

3. 比較時間範圍

您可能還想比較不同時間範圍的資料,例如比較一週與下一週的事件。

範例:每週比較

要比較不同周之間的事件數量,您可以使用:

SELECT 
    DATE_TRUNC('week', timestamp_utc) AS week,
    COUNT(*) AS event_count 
FROM 
    event_log 
GROUP BY 
    DATE_TRUNC('week', timestamp_utc) 
ORDER BY 
    week;

此查詢按事件發生的周對事件進行分組,使您能夠分析每週趨勢。

4. 計算時間差

PostgreSQL 支援用 AGE() 計算時間戳記之差。DataFusion 不支援 AGE(),請直接相減。

範例:計算事件之間的時間差

使用 LAG() 取得上一個事件的時間,然後從目前事件時間中減去它。

例如,要計算當前事件和前一個事件之間的秒數差異:

WITH ordered_events AS (
  SELECT
    event_id,
    timestamp_utc,
    LAG(timestamp_utc) OVER (ORDER BY timestamp_utc) AS previous_timestamp
  FROM event_log
)
SELECT
  event_id,
  timestamp_utc,
  previous_timestamp,
  date_part('epoch', timestamp_utc - previous_timestamp)
    AS seconds_since_previous_event
FROM ordered_events
ORDER BY timestamp_utc;

LAG 檢索之前的事件時間,date_part('epoch', ...) 將時間戳間隔轉換為總秒數。第一行沒有先前的時間戳,因此其差異為空。

後續步驟

SQL中的時間函式是分析和管理基於時間的資料不可或缺的工具。雖然 DataFusion 與其他 SQL 引擎相比有一定的侷限性,但您仍然可以有效地使用其支援的功能來分組、截斷和分析不同時間間隔的資料。無論您是追蹤每日事件、比較每週趨勢還是計算事件之間的時間差,SQL 都提供必要的功能來釋放基於時間的資料的全部潛力。

利用 Telemetry 中強大的 SQL 時間函式獲得更深入的見解,並根據您的資料做出更明智的決策。

相關功能

記錄穩定的事件名稱、型別明確的欄位,以及經過隱私審查的上下文。

頁面作者與參考資料

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

我們如何審查文件