載入外部分區資料
BigQuery 可讓您從使用 Apache Hive 分區版面配置的 Cloud Storage 載入資料,並將分區鍵納入資料表的資料欄。Hive 分區是指將外部資料整理成多個檔案,並採用命名慣例,將檔案分成不同分區。
根據預設,除非您明確建立分區資料表,否則資料載入 BigQuery 後不會分區。詳情請參閱「支援的資料版面配置」。
載入 Hive 分區資料
如要載入 Hive 分區資料,請選擇下列其中一個選項:
控制台
前往 Google Cloud 控制台的「BigQuery」頁面。
- 點選左側窗格中的 「Explorer」。
- 在「Explorer」窗格中展開專案,點選「資料集」,然後選取資料集。
- 按一下 「Actions」(動作),然後點選「Create table」(建立資料表)。「建立資料表」窗格隨即開啟。
- 在「Source」(來源) 部分,指定下列詳細資料:
- 在「建立資料表來源」部分,選取「Google Cloud Storage」。
- 在「Select file from Cloud Storage bucket」(從 Cloud Storage bucket 選取檔案) 部分,使用萬用字元輸入 Cloud Storage 資料夾的路徑。例如:
my_bucket/my_files*。Cloud Storage bucket 必須與資料集位於相同位置,而該資料集包含您要建立、附加或覆寫的資料表。 - 從「File format」(檔案格式) 清單中選取檔案類型。
- 勾選「Source data partitioning」(來源資料分區) 核取方塊,然後在「Select Source URI Prefix」(選取來源 URI 前置字元) 中輸入 Cloud Storage URI 前置字元。例如:
gs://my_bucket/my_files。 - 在「Partition inference mode」(分區推論模式) 部分,選取下列其中一個選項:
- 自動推論類型:將分區結構定義偵測模式設為
AUTO。 - 將所有資料欄視為字串:將分區架構偵測模式設為
STRINGS。 - 「Provide my own」(自行提供):將分區結構定義偵測模式設為
CUSTOM,並手動輸入分區索引鍵的結構定義資訊。詳情請參閱「提供自訂分區索引鍵結構定義」。
- 自動推論類型:將分區結構定義偵測模式設為
- 選用:如要對這個資料表的所有查詢要求分區篩選器,請勾選「Require partition filter」(必須使用分區篩選器) 核取方塊。規定必須使用分區篩選器,或許可以降低費用及提高成效。詳情請參閱「在查詢中要求對分區索引鍵使用述詞篩選器」。
- 在「Destination」(目的地) 部分,指定下列詳細資料:
- 在「Project」(專案) 部分,選取要建立資料表的專案。
- 在「Dataset」(資料集) 部分,選取要建立資料表的資料集。
- 在「Table」(資料表) 中,輸入要建立的資料表名稱。
- 在「Table type」(資料表類型) 部分,選取「Native table」(原生資料表)。
- 在「Schema」(結構定義) 部分,輸入結構定義。
- 如要啟用結構定義自動偵測功能,請選取「自動偵測」。
- 如要忽略含有與結構定義不符的多餘資料欄值的資料列,請展開「Advanced options」(進階選項) 區段,然後選取「Unknown values」(不明的值)。
- 點選「建立資料表」。
SQL
如要建立外部資料分割資料表,請使用 LOAD DATA 陳述式的 WITH PARTITION COLUMNS 子句,指定資料分割結構定義詳細資料。
如需範例,請參閱「載入外部分區檔案」。
bq
使用自動偵測分區索引鍵類型功能,載入 Hive 分區資料:
bq load --source_format=ORC --hive_partitioning_mode=AUTO \ --hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix \ dataset.table gcs_uris
使用字串類型的分區索引鍵偵測功能,載入 Hive 分區資料:
bq load --source_format=CSV --autodetect \ --hive_partitioning_mode=STRINGS \ --hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix \ dataset.table gcs_uris
使用以 source\_uri\_prefix 欄位編碼的自訂分區索引鍵架構,載入 Hive 分區資料:
bq load --source_format=JSON --hive_partitioning_mode=CUSTOM \ --hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix/partition_key_schema \ dataset.table gcs_uris file_schema
分區索引鍵結構定義會編碼入緊鄰來源 URI 前置字串後方的位置。請使用以下格式指定 --hive_partitioning_source_uri_prefix:
--hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix/{key1:TYPE1}/{key2:TYPE2}/{key3:TYPE3}
API
只要在 JobConfigurationLoad 上設定 HivePartitioningOptions,即可支援 Hive 分區。
執行增量載入
以下列資料配置為例:
gs://my_bucket/my_table/dt=2019-10-31/val=1/file1
gs://my_bucket/my_table/dt=2018-10-31/val=2/file2
gs://my_bucket/my_table/dt=2017-10-31/val=3/file3
gs://my_bucket/my_table/dt=2016-10-31/val=4/file4
如要僅載入 2019-10-31 的資料,請按照下列步驟操作:
- 將「Hive partitioning mode」(Hive 分區模式) 設為
AUTO、STRINGS或CUSTOM。 - 將
AUTO或STRINGSHive 分區模式的來源 URI 前置字串設為gs://my_bucket/my_table/。如果是 CUSTOM,請提供gs://my_bucket/my_table/{dt:DATE}/{val:INTEGER}。 - 使用 URI
gs://my_bucket/my_table/dt=2019-10-31/*。 - 資料載入時會包含
dt和val資料欄,分別具有2019-10-31和1值。
如要僅載入特定檔案中的資料,請按照下列步驟操作:
- 將「Hive partitioning mode」(Hive 分區模式) 設為
AUTO、STRINGS或CUSTOM。 - 將
AUTO或STRINGSHive 分區模式的來源 URI 前置字串設為gs://my_bucket/my_table/。如果是CUSTOM,請提供gs://my_bucket/my_table/{dt:DATE}/{val:INTEGER}。 - 使用 URI
gs://my_bucket/my_table/dt=2017-10-31/val=3/file3,gs://my_bucket/my_table/dt=2016-10-31/val=4/file4。 - 資料已從兩個檔案載入,且
dt和val資料欄已填入。
分區結構定義
以下各節將說明 BigQuery 支援的預設 Hive 分區版面配置和結構定義偵測模式。
支援的資料配置
從 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 前置字串。
限制
- Hive 分區支援功能假設所有 URI 都有共同的來源 URI 前置字串,且該前置字串會在分區編碼之前結束,如下所示:
gs://BUCKET/PATH_TO_TABLE/。 - Hive 分區資料表的目錄結構應具有相同的分區鍵,且分區鍵的順序相同,每個資料表最多可有十個分區鍵。
- 資料必須採用預設 Hive 分區版面配置。
- Hive 分區鍵和基礎檔案中的資料欄不得重疊。
僅支援 GoogleSQL。
適用於所有從 Cloud Storage 載入的限制。
後續步驟
- 瞭解分區資料表。
- 瞭解如何在 BigQuery 中使用 SQL。