使用外部分區資料

您可以使用 BigQuery 外部資料表,查詢下列資料儲存庫中的已分割資料:

外部分區資料必須使用預設 Hive 分區配置,且採用下列其中一種格式:

  • Avro
  • CSV
  • JSON
  • ORC
  • Parquet

如要查詢外部分區資料,您必須建立 BigLake 資料表外部資料表。建議使用 BigLake 資料表,因為這類資料表可讓您在資料表層級強制執行精細的安全防護機制。如要瞭解 BigLake 和外部資料表,請參閱「BigLake 資料表簡介」和「外部資料表簡介」。

資料表定義檔中設定相關選項,即可啟用 Hive 分區支援。如需查詢代管分區資料表的操作說明,請參閱分區資料表簡介

分區結構定義

以下各節說明 預設 Hive 分割配置,以及 BigQuery 支援的結構定義偵測模式

如要避免讀取不必要的檔案並提升效能,您可以在查詢中使用分區索引鍵的述詞篩選器

支援的資料配置

查詢 Cloud Storage 中的資料時,Hive 分區索引鍵會顯示為一般資料欄。資料必須符合預設 Hive 分區配置。舉例來說,下列檔案均符合預設配置,鍵/值組合會以目錄型式排列並採用等號 (=) 做為分隔符,而且分區索引鍵的順序一律相同:

gs://my_bucket/my_table/dt=2019-10-31/lang=en/my_filename
gs://my_bucket/my_table/dt=2018-10-31/lang=fr/my_filename

在本範例中,常見的來源 URI 前置字串為 gs://my_bucket/my_table

不支援的資料配置

如果分區索引鍵名稱未編碼入目錄路徑中,系統將無法偵測分區結構定義。舉例來說,分區索引鍵名稱未編碼入下列路徑:

gs://my_bucket/my_table/2019-10-31/en/my_filename

如果檔案的結構定義順序不一致,系統也無法進行偵測作業。舉例來說,下列兩個檔案採用反向分區索引鍵編碼:

gs://my_bucket/my_table/dt=2019-10-31/lang=en/my_filename
gs://my_bucket/my_table/lang=fr/dt=2018-10-31/my_filename

偵測模式

BigQuery 支援三種 Hive 分區結構定義偵測模式:

  • AUTO:系統會自動偵測索引鍵名稱與類型。可偵測到的類型如下:

  • STRINGS:系統會自動將索引鍵名稱轉換為 STRING 類型。

  • CUSTOM:分區索引鍵結構定義會編碼入來源 URI 前置字串。

自訂分區索引鍵結構定義

如要使用 CUSTOM 結構定義,必須在來源 URI 前置字串欄位中指定結構定義。使用 CUSTOM 結構定義可指定每個分區索引鍵的類型。這些值必須有效地剖析為指定類型,否則查詢作業會失敗。

舉例來說,如果將 source_uri_prefix 旗標設為 gs://my_bucket/my_table/{dt:DATE}/{val:STRING},BigQuery 會將 val 視為 STRING、將 dt 視為 DATE,並將 gs://my_bucket/my_table 做為相符檔案的來源 URI 前置字串。

分區修剪

BigQuery 會盡可能利用分區索引鍵上的查詢述詞修剪分區。這樣 BigQuery 就能避免讀取不必要的檔案,進而提升效能。

查詢中分區鍵的述詞篩選條件

建立外部分區資料表時,只要啟用 HivePartitioningOptions 下的 requirePartitionFilter 選項,即可要求使用分區鍵的述詞篩選器。

啟用此選項後,如嘗試在未指定 WHERE 子句的情況下查詢外部分區資料表,將會產生下列錯誤:Cannot query over table <table_name> without a filter over column(s) <partition key names> that can be used for partition elimination

限制

  • 建構 Hive 分區支援時,我們會假設所有 URI 都有一個通用來源 URI 前置字串,字串結尾處緊接在分區編碼之前,如下所示:gs://BUCKET/PATH_TO_TABLE/
  • 假設 Hive 分區資料表的目錄結構具有相同的分區索引鍵、索引鍵的顯示順序相同,且每個資料表最多包含十個分區索引鍵。
  • 資料必須符合預設 Hive 分區配置
  • Hive 分區索引鍵不得與基礎檔案中的資料欄重疊。
  • 僅支援 GoogleSQL

  • 查詢儲存在 Cloud Storage 中外部資料來源的所有限制均適用。

後續步驟