分區資料表簡介

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

分區資料表是一種特殊的資料表,表內劃分多個區段 (稱為分區),可讓您更容易管理和查詢資料。將大型資料表分成許多較小分區,不但可以提高查詢效能,而且因為查詢所需讀取的位元組數也隨之減少,您還能控管費用。

您可依據下列各項,將 BigQuery 資料表分區:

擷取時間分區資料表

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

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

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

日期或時間戳記分區資料表

BigQuery 也允許根據特定的 DATETIMESTAMP 資料欄,將資料表分區。系統會根據分區資料欄中的日期值 (以世界標準時間表示),將寫入日期/時間戳記分區資料表的資料自動傳送到適當的分區。

日期/時間戳記分區資料表中的每個分區都可以視為一個範圍,而範圍的起點是一天的開始,範圍的間隔則是一天。

日期/時間戳記分區資料表不需要 _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 允許根據特定的 INTEGER 資料欄搭配選擇的開始、結束和間隔值,將資料表分區。針對整數範圍分區資料表進行的查詢,可以根據分區欄指定述詞篩選條件,以減少掃描的資料量。

如要建立整數範圍分區資料表,請提供:

  • 用來建立整數範圍分區的資料欄
  • 範圍分區的起始值 (含)
  • 範圍分區的結束值 (不含)
  • 分區內每個範圍的間隔

超出範圍的值會放入 UNPARTITIONED 分區。

舉例來說,如果您使用下列值建立整數範圍分區:

引數
資料欄名稱 customer_id
起始 0
結束 100
間隔 10

系統將會在 customer_id 資料欄上,將資料表分區為間隔為 10 的多個範圍。0 到 9 的值會放在一個分區中,10 到 19 的值放在另一個分區中,以此類推,直到最後 90 到 99 的值放在另一個分區中。0 到 99 之外的值 (例如 -1 或 100) 會在 UNPARTITIONED 分區中,而空值會在 NULL 分區中。

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

  • __NULL__ 分區:代表分區資料欄中值為 NULL 的資料列
  • __UNPARTITIONED__ 分區:代表存在於整數起始值和間隔值允許範圍之外的資料

除了 __NULL____UNPARTITIONED__ 分區外,分區資料欄中的所有資料都會在整數起始值和間隔值的範圍內,這可讓查詢確定哪些分區不含符合篩選條件的資料。篩選分區資料欄中資料的查詢,可以限制值並完全剪除不必要的分區。

在起始值和結束值之間「可能」的範圍數量以 100,000 個為限。但是,由於每個範圍都是一個分區,因此含資料的範圍數量上限為每個資料表 4,000 個分區。

整數範圍分區與分群的比較

整數範圍分區與分群都可以提高效能並降低查詢成本,兩者的主要差異和用途如下。

如要執行以下操作,請使用整數範圍分區:

  • 明確定義用來將資料表分區的範圍。您可以指定如何對資料進行分區以及每個分區中的資料內容。

  • 瞭解查詢費用後再執行查詢。系統會在執行查詢前完成分區縮減,因此您可以在分區縮減後,透過模擬測試取得查詢費用。系統會在執行查詢時完成分群縮減,因此只有在查詢結束後才知道費用。

  • 為分區定址,例如,當您要將資料載入特定分區時,或清除特定分區的資料時。

分群的適用情況如下:

  • 不考慮資料的分群方式,只要能提升效能並降低成本。BigQuery 會自動判斷如何將資料分群以獲得最佳效能和成本。

  • 需要超過 100,000 個分區。對於分區資料表,BigQuery 設有分區數量最高 100,000 個的限制,資料表中的分群數量則沒有限制。

請注意,您可以在同一整數資料欄上進行分區和分群,以獲得兩者的好處。系統會先根據指定的整數範圍,將資料分區。在每個範圍內,只要資料量夠大,系統也會將資料分群。查詢資料表時,分區會根據分區縮減設定查詢成本的上限。實際執行查詢時,有可能還會省下其他查詢費用。

使用 require_partitioning_filter

隨著整數範圍分區的發布,BigQuery 現在支援多種類型的分區類型:

  • 擷取時間
  • 日期/時間戳記
  • 整數範圍

為了簡化 BigQuery API,我們將 require_partitioning_filter 參數移出分區類型層級,然後移至資料表層級。為了回溯相容於日期/時間戳記分區,系統會繼續支援分區層級的 require_partitioning_filter,您也可以在資料表層級指定這個項目。對於整數範圍分區,您只能在資料表層級指定 require_partitioning_filterbq 指令列工具早已使用資料表層級選項,因此 bq 指令的使用方式不變。如果您使用 BigQuery API,則必須在資料表層級使用 require_partitioning_filter 選項。

分區資料表的配額和限制

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

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

如要進一步瞭解所有配額和限制,請參閱配額與限制一文。

分區資料表價格

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

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

後續步驟

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

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

這個網頁
需要協助嗎?請前往我們的支援網頁