載入外部分區資料
BigQuery 可以使用 Hive 區隔版面配置,載入儲存在 Cloud Storage 中的資料。Hive 分區是指將外部資料分成多個檔案,並使用命名慣例將檔案分成不同的分區。詳情請參閱「支援的資料版面配置」。
根據預設,除非您明確建立分區資料表,否則資料在載入後不會在 BigQuery 中分區。
載入 Hive 分區資料
如要載入 Hive 分區資料,請選擇下列任一選項:
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
- 在「Explorer」窗格中展開專案並選取資料集。
- 按一下 「查看動作」,然後點選「建立資料表」。系統會開啟「Create table」窗格。
- 在「Source」部分中,指定下列詳細資料:
- 在「Create table from」(使用下列資料建立資料表) 部分,選取「Google Cloud Storage」。
- 針對「Select file from Cloud Storage bucket」(從 Cloud Storage 值區選取檔案),請使用萬用字元輸入 Cloud Storage 資料夾的路徑。例如
my_bucket/my_files*
。Cloud Storage 值區的位置必須與要建立、附加或覆寫的表格所在的資料集位置相同。 - 從「File format」清單中選取檔案類型。
- 勾選「Source data partitioning」(來源資料分割)核取方塊,然後在「Select Source URI Prefix」(選取來源 URI 前置字串) 中輸入 Cloud Storage URI 前置字串。例如:
gs://my_bucket/my_files
。 - 在「Partition inference mode」部分中,選取下列其中一個選項:
- 自動推論類型:將分區結構定義偵測模式設為
AUTO
。 - 所有資料欄皆為字串:將分區結構定義偵測模式設為
STRINGS
。 - 提供自己的:將分區結構定義偵測模式設為
CUSTOM
,然後手動輸入分區鍵的結構定義資訊。詳情請參閱「提供自訂分區索引鍵結構定義」。
- 自動推論類型:將分區結構定義偵測模式設為
- 選用:如要要求在對這個資料表進行的所有查詢中使用分區篩選器,請選取「Require partition filter」(需要分區篩選器) 核取方塊。使用分區篩選器可以降低成本並提升效能。詳情請參閱「在查詢中要求分區鍵的子句篩選器」。
- 在「Destination」(目的地) 部分中,指定下列詳細資料:
- 在「Project」(專案) 部分,選取要建立資料表的專案。
- 在「Dataset」(資料集) 部分,選取要建立資料表的資料集。
- 在「Table」中,輸入要建立的資料表名稱。
- 在「Table type」(資料表類型) 中,選取「Native table」(原生資料表)。
- 在「Schema」(結構定義) 部分輸入結構定義。
- 如要啟用結構定義的自動偵測功能,請選取「自動偵測」。
- 如要忽略含有與結構定義不符之額外資料欄值的資料列,請展開「進階選項」部分,然後選取「不明的值」。
- 點選「建立資料表」。
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 分區模式設為
AUTO
、STRINGS
或CUSTOM
。 - 如為
AUTO
或STRINGS
Hive 分區模式,請將來源 URI 前置字串設為gs://my_bucket/my_table/
。如為自訂分區模式,請提供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 分區模式設為
AUTO
、STRINGS
或CUSTOM
。 - 如為
AUTO
或STRINGS
Hive 分區模式,請將來源 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
資料欄已填入。
分區結構定義
以下各節將說明 預設的 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 前置字串。
限制
- 建構 Hive 分區支援時,我們會假設所有 URI 都有一個通用來源 URI 前置字串,字串結尾處緊接在分區編碼之前,如下所示:
gs://BUCKET/PATH_TO_TABLE/
。 - 假設 Hive 分區資料表的目錄結構具有相同的分區索引鍵、索引鍵的顯示順序相同,且每個資料表最多包含十個分區索引鍵。
- 資料必須符合預設 Hive 分區配置。
- Hive 分區索引鍵不得與基礎檔案中的資料欄重疊。
僅支援 GoogleSQL。
適用於所有從 Cloud Storage 載入的限制。
後續步驟
- 瞭解分區資料表。
- 瞭解如何在 BigQuery 中使用 SQL。