分區資料表簡介

本頁面提供 BigQuery 中的分區資料表支援總覽。

分區資料表是一種特殊的資料表,其中分成多個區段 (稱為分區),可讓您更容易地管理和查詢資料。透過將大型資料表分成較小的分區,可以提高查詢效能,並且可以透過減少查詢讀取的位元組數來控制費用。

BigQuery 中的資料表分區有兩個類型:

  • 依擷取時間分區的資料表:根據資料的擷取 (載入) 日期或到達日期分區的資料表。
  • 分區資料表:依據 TIMESTAMPDATE 資料欄分區的資料表。

擷取時間分區資料表

當您建立依擷取時間分區的資料表時,BigQuery 會自動將資料載入每日以日期為基準的分區中,以反映資料的擷取或到達日期。虛擬資料欄和後置字元識別項可讓您重述 (取代) 資料並將其重新導向至特定日期的分區。

擷取時間分區資料表包含名為 _PARTITIONTIME 的虛擬資料欄,其中具有載入資料表之資料的以日期為基準的時間戳記。針對時間分區資料表進行的查詢可以透過提供代表分區位置的 _PARTITIONTIME 篩選條件來限制讀取的資料。查詢作業會讀取指定分區中的所有資料,但是 _PARTITIONTIME 述詞篩選條件會限制掃描的分區數量。

當您建立擷取時間分區資料表時,分區與資料表具有相同的結構定義。如果您需要將資料載入結構定義與資料表的結構定義不同的分區中,則必須在載入資料前先更新資料表的結構定義。或者,您可以在載入工作或查詢工作中,使用結構定義更新選項來更新資料表的結構定義。

分區資料表

BigQuery 也允許使用分區資料表。分區資料表可讓您將分區配置繫結至特定的 TIMESTAMPDATE 欄。寫入分區資料表的資料會根據分區欄中的日期值 (以 UTC 表示) 自動傳送至適當的分區。

分區資料表不需要 _PARTITIONTIME 虛擬資料欄。針對分區資料表進行的查詢可以根據分區欄指定述詞篩選條件,以減少掃描的資料量。

建立分區資料表時,將會建立兩個特別的分區:

  • __NULL__ 分區:代表分區資料欄中值為 NULL 的資料列
  • __UNPARTITIONED__ 分區:代表存在於允許日期範圍之外的資料

除了 __NULL____UNPARTITIONED__ 分區之外,分區資料欄中的所有資料均符合分區 ID 的日期。這可讓查詢確定哪些分區不含符合篩選條件的資料。篩選分區資料欄中資料的查詢,可以限制值並完全剪除不必要的分區。

分區與資料分割的比較

除了使用分區資料表之外,您也可以使用以時間為基準的命名方法 (例如 [PREFIX]_YYYYMMDD) 對資料表進行資料分割。這稱之為建立日期資料分割資料表。使用標準 SQL 或舊版 SQL 時,您可以使用 UNION 運算子來指定查詢,以限制查詢作業所掃描的資料表。

分區資料表的效能優於依日期進行資料分割的資料表。當您建立以日期命名的資料表時,BigQuery 必須為每個以日期命名的資料表保留一份結構定義和中繼資料的複本。此外,使用以日期命名的資料表時,BigQuery 可能必須驗證每個查詢資料表的權限。這項做法也會增加查詢負擔並影響查詢效能。建議的最佳做法是使用分區資料表,而不要使用日期資料分割資料表。

比較分區選項

下表比較了資料分割資料表和分區資料表。

功能 資料分割資料表 擷取時間分區資料表 分區資料表
分區方法 無:使用 UNION 運算子分割及查詢資料表可以模擬分區作業。 根據資料的擷取或到達日期進行分區。您可以使用虛擬資料欄來參照分區資訊。 根據指定 TIMESTAMPDATE 資料欄中的資料分區。
分區 ID 您可以使用 0001-01-01 至 9999-12-31 之間的任何有效日期,但 DML 陳述式無法參照 1970-01-01 之前或 2159-12-31 之後的日期。 來自繫結 DATETIMESTAMP 資料欄的有效項目。1960-01-01 之前和 2159-12-31 之後的日期值目前會置於共用的 UNPARTITIONED 分區。 NULL 值位於明確的 NULL 分區。
限制掃描的資料 透過排除查詢中不必要的欄,僅參考您需要的資料分割並限制資料。 使用 _PARTITIONTIME 虛擬資料欄來剪除分區。 在分區欄上使用述詞篩選條件。
分區數量 資料表的數量沒有限制,但查詢最多只能參照 1,000 個資料表。 最多 4,000 個分區。 最多 4,000 個分區。
更新作業 更新作業每日以 1,000 次為限 個別作業可以提交至單一分區。最新的分區 (根據預設) 或是使用分區裝飾器 (例如 [TABLE]$[DATE]) 指定的分區。 個別作業最多可以將資料提交至 2,000 個不同的分區。
串流資料插入 資料表的一個全域緩衝區。 透過分區後置字元,您可以根據目前的世界標準時間,將資料串流傳送至過去 31 天內和未來 16 天內 (相對於目前日期) 的分區。 您可以串流過去 1 年到未來 6 個月之間的資料。超出這個範圍的資料會遭到拒絕。資料進行串流時,過去 7 天和未來 3 天之間的資料會置於串流緩衝區,之後系統會擷取至相應的分區。超出這個時間範圍 (但在過去 1 年置未來 6 個月之間) 的資料會置於 UNPARTITIONED 分區。未分區資料累積置足夠的大小以後,系統就會將資料載入相應的分區。
時區評估 由使用者語意定義 世界標準時間 (UTC) 世界標準時間 (UTC)

分區資料表的配額和限制

BigQuery 中的分區資料表已定義了限制

配額和限制也適用於您可以針對分區資料表執行的各類型工作,包括:

如要深入瞭解所有配額和限制,請參閱配額和限制一文。

分區資料表價格

在 BigQuery 中建立和使用分區資料表時,向您收取的費用是以在分區中儲存的資料量以及針對資料執行的查詢量為計算依據:

許多分區資料表作業都是免費的,包括將資料載入分區、複製分區,以及從分區匯出資料。雖然這些作業都是免費的,但仍受限於 BigQuery 的配額和限制。如需所有免費作業的相關資訊,請參閱定價頁面上的免費作業項目一節。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁