瞭解持續查詢中的視窗匯總

如要尋求支援或針對這項功能提供意見回饋,請傳送電子郵件至 bq-continuous-queries-feedback@google.com。

BigQuery 持續查詢支援匯總和視窗化作業,做為有狀態的作業。有狀態作業可讓連續查詢執行複雜分析,這類分析需要保留多個資料列或時間間隔的資訊。這項功能可在查詢執行時將必要資料儲存在記憶體中,讓您計算一段時間內的指標,例如 30 分鐘的平均值。

視窗函式會根據系統時間 (指出進行變更的交易提交時間),將資料指派至邏輯元件或視窗。在 BigQuery 中,這些函式是傳回資料表的資料表值函式 (TVF),該資料表包含所有原始資料欄,以及兩個額外資料欄:window_start 和 window_end。這些欄會指出每個時間範圍的時間間隔。如要進一步瞭解有狀態作業,請參閱「支援的有狀態作業」。

只有 BigQuery 連續查詢支援視窗 TVF。

視窗 TVF 與視窗函式呼叫不同。

支援的匯總函式

系統支援下列匯總函式:

不支援的匯總函式

系統不支援下列匯總函式:

TUMBLE 函式

TUMBLE 函式會將資料指派到指定大小的不重疊時間間隔 (滾動時間視窗)。舉例來說,5 分鐘的間隔會將事件歸入 [2026-01-01 12:00:00, 2026-01-01 12:05:00) 和 [2026-01-01 12:05:00, 2026-01-01 12:10:00) 等離散間隔。系統會將含有時間戳記值 2026-01-01 12:03:18 的資料列指派給第一個時間範圍。由於這些視窗不相交且不會重疊,因此系統會將每個含有時間戳記的元素指派給一個視窗。

下圖顯示 TUMBLE 函式如何將事件指派至不重疊的時間間隔:

TUMBLE 函式會將事件指派至不重疊的時間間隔。

您可以在即時事件處理程序中使用這項函式,依時間範圍將事件分組,再執行任何彙整作業。

語法

TUMBLE(TABLE table, "timestamp_column", window_size)

定義

  • table:BigQuery 資料表名稱。這必須是包裝在 APPENDS 函式中的標準 BigQuery 資料表。這個引數前面必須加上 TABLE 一字。

  • timestamp_column:STRING 字面值,指定輸入資料表中包含事件時間的資料欄名稱。這個資料欄中的值會將每個資料列指派給一個時間範圍。系統只支援 _CHANGE_TIMESTAMP 資料欄,用於定義 BigQuery 系統時間。timestamp_column系統不支援使用者定義的資料欄。

  • window_size:定義每個滾動式時間區間時間長度的 INTERVAL 值。回溯期最長可設為 24 小時。例如:INTERVAL 30 SECOND。

輸出內容

TUMBLE 函式會傳回輸出內容,其中包含下列資料欄:

  • 查詢執行時,輸入資料表的所有資料欄。

  • window_start:TIMESTAMP 值,表示記錄所屬時間範圍的開始時間 (含)。

  • window_end:TIMESTAMP 值,表示記錄所屬時間範圍的專屬結束時間。

輸出內容具體化

在 BigQuery 持續查詢中,視窗化匯總作業不會為特定時間間隔產生輸出內容,直到 BigQuery 最終確定或關閉該視窗為止。這項行為可確保 BigQuery 只會在處理完該時間範圍的所有相關資料後,才發出匯總結果。

舉例來說,如果您對 user_clickstream 資料表執行 5 分鐘的 TUMBLE 視窗匯總,只有在查詢處理 _CHANGE_TIMESTAMP 為 10:20 或之後的記錄後,才會發布 [10:15; 10:20) 間隔的結果。此時,BigQuery 會將視窗視為已關閉。此外,系統會開啟視窗,並在顯示屬於該特定時間範圍的第一筆記錄時,開始累積資料。

在視窗保持開啟的狀態下,BigQuery 必須保留中繼匯總結果。這需要儲存狀態,也就是說,BigQuery 必須保留中繼匯總結果。由於這個狀態必須保留在作用中記憶體中,直到視窗關閉為止,因此使用較長的視窗時間或處理大量串流,會導致更高的時段用量,以管理增加的儲存內容量。詳情請參閱「定價考量事項」。

限制

  • TUMBLE 函式僅支援 BigQuery 連續查詢。
  • 使用 TUMBLE 函式啟動持續查詢時,只能使用 APPENDS 函式。不支援 CHANGES 函式。
  • 系統只支援以 _CHANGE_TIMESTAMP 定義的 BigQuery 系統時間資料欄 timestamp_column。不支援使用者定義的欄。
  • 回溯期最長可設為 24 小時。
  • TUMBLE 視窗函式執行時,會產生兩個額外的輸出資料欄:window_start 和 window_end。您必須在執行視窗匯總的 SELECT 陳述式中,至少加入下列其中一個資料欄的 GROUP BY 陳述式。
  • 使用 TUMBLE 函式搭配持續查詢聯結時,必須遵守所有持續查詢聯結限制。

費用考量事項

BigQuery 持續查詢的計費依據是工作執行期間耗用的運算容量 (運算單元)。以運算為準的模式也適用於有狀態的作業,例如視窗化。由於視窗化作業需要 BigQuery 在查詢有效期間儲存「狀態」,因此會消耗額外的時段資源。一般來說,視窗中儲存的內容或資料越多 (例如使用較長的視窗時間長度),BigQuery 就必須保留更多狀態。進而提高廣告空間使用率。

範例

下列查詢會說明如何查詢計程車乘車資料表,每 30 分鐘取得每輛計程車的平均乘車次數、乘客數和平均車資,並將這些資料匯出至 BigQuery 的資料表:

INSERT INTO
 `real_time_taxi_streaming.driver_stats`

WITH ride_completions AS (
 SELECT
   _CHANGE_TIMESTAMP as bq_changed_ts,
   CAST(timestamp AS DATE) AS ride_date,
   taxi_id,
   meter_reading,
   passenger_count
 FROM
   APPENDS(TABLE `real_time_taxi_streaming.taxirides`,
     CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE)
 WHERE
   ride_status = 'dropoff')

 SELECT
   ride_date,
   window_end,
   taxi_id,
   COUNT(taxi_id) AS total_rides_per_half_hour,
   ROUND(AVG(meter_reading),2) AS avg_fare_per_half_hour,
   SUM(passenger_count) AS total_passengers_per_half_hour
FROM
  tumble(TABLE ride_completions,"bq_changed_ts",INTERVAL 30 MINUTE)
GROUP BY
  window_end,
  ride_date,
  taxi_id

後續步驟