BigQuery では、デフォルトの Hive パーティショニング レイアウトを使用した、Cloud Storage に保存されている外部パーティション分割データの読み込みをサポートしています(形式は Avro、Parquet、ORC、CSV、JSON)。
制限事項
- Hive パーティショニングのサポートは、すべての URI において、パーティション エンコードの直前に共通のソース URI プレフィックスがあるものと想定して構築されています。例:
gs://<bucket>/<path_to_table>/
。 - Hive パーティション分割テーブルのディレクトリ構造は、同じパーティション キーが同じ順序で出現し、テーブルごとに最大 10 個のパーティション キーがあると想定されています。
- データはデフォルトの Hive パーティショニング レイアウトに従う必要があります。
- 基盤となるファイルの中で、Hive パーティショニング キーと列は重複してはいけません。
- 現在、Cloud Console、
bq
コマンドライン ツール、REST API のみがサポートされています。 - Cloud Storage からの読み込みに関する制限のすべてが適用されます。
サポートされるデータ レイアウト
データはデフォルトの Hive パーティション分割レイアウトに従う必要があります。たとえば、次のファイルはデフォルトのレイアウトに従っており、Key-Value のペアは、=
記号のセパレータによりディレクトリとしてレイアウトされており、パーティション キーは常に同じ順序になっています。
gs://bucket/table/dt=2019-10-31/lang=en/foo
gs://bucket/table/dt=2018-10-31/lang=fr/bar
この例で共通のソース URI プレフィックスは、gs://bucket/table
です。
サポートされないデータ レイアウト
ディレクトリ パス内でパーティション キー名がエンコードされていない場合、パーティション スキーマの検出は失敗します。たとえば、次のパスを考えてみましょう。パーティション キー名がエンコードされていません。
gs://bucket/table/2019-10-31/en/foo
スキーマの順序が一貫していないファイルも検出に失敗します。たとえば、次の 2 つのファイルについて考えてみましょう。パーティション キーのエンコードが逆になっています。
gs://bucket/table/dt=2019-10-31/lang=en/foo
gs://bucket/table/lang=fr/dt=2018-10-31/bar
パーティション スキーマ検出モード
Cloud Storage からデータを読み込む場合、Hive パーティション キーは通常の列のように見えます。Hive パーティション スキーマ検出では以下の 3 つのモードがサポートされています。
- AUTO: キーの名前と型は自動検出されます。次の型を検出できます: STRING、INTEGER、DATE、TIMESTAMP。
- STRINGS: STRING 型を使用し、キー名は自動的に推測されます。
- CUSTOM: パーティション キースキーマがソース URI プレフィックスでエンコードされています。
カスタム パーティション キースキーマの指定
CUSTOM 検出では、ソース URI プレフィックス フィールド内にパーティション キー名と型の組み合わせを指定して、スキーマをエンコードする必要があります。値は、指定された型で有効に解析される必要があります。そうでない場合、読み込みは失敗します。
たとえば、source_uri_prefix を gs://my_bucket/my_table/{dt:DATE}/{val:STRING}
に設定すると、val
は STRING として処理され、dt
は DATE として処理され、一致したファイルのソース URI プレフィックスとして gs://my_bucket/my_table
が抽出されます。
詳しくは、Cloud Console、bq
コマンドライン ツール、REST API をご覧ください。
増分読み込みの実行
次のデータ レイアウトについて考えてみます。
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 に設定します。
- Hive パーティショニング モードが AUTO または STRINGS の場合は、ソース 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 パーティショニング モードを AUTO、STRINGS、または CUSTOM に設定します。
- Hive パーティショニング モードが AUTO または STRINGS の場合は、ソース 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
を使用します。 - 2 つのファイルからデータが読み込まれます。
dt
列とval
列が入力されます。
Cloud Console を使用した HivePartitioningOptions の設定
Cloud Console で Hive パーティショニング オプションを設定する手順は次のとおりです。
Cloud Console で [BigQuery] ページを開きます。
[リソース] ペインで、データセットを選択します。
[テーブルを作成] ボタンをクリックして、新しいテーブルを作成します。
[テーブルの作成元] プルダウンから [Cloud Storage] を選択します。
[Cloud Storage バケットからファイルを選択] フィールドにデータセットのファイルパスを入力し、次にプルダウンからそのファイルタイプを選択します。
- [ソースデータ パーティショニング] ボックスをオンにして、指定されたフィールドにソース URI プレフィックスを入力します。
- [パーティション推論モード] で、AUTO の場合は [種類を自動的に推測します] を選択し、STRINGS の場合は [すべての列は文字列です] を選択します。
- [テーブルタイプ] プルダウンから [ネイティブ テーブル] を選択します。
bq
コマンドライン ツールを使用した HivePartitioningOptions の設定
パーティション キーの型の自動検出のリクエスト
bq load --source_format=ORC --hive_partitioning_mode=AUTO \ --hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix \ dataset.table gcs_uris
文字列型パーティション キー検出のリクエスト
bq load --source_format=PARQUET --autodetect \ --hive_partitioning_mode=STRINGS \ --hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix \ dataset.table gcs_uris
source_uri_prefix フィールドでエンコードされたカスタム パーティション キースキーマの指定
bq load --source_format=JSON --hive_partitioning_mode=CUSTOM \ --hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix/custom_schema_encoding \ dataset.table gcs_uris file_schema
CUSTOM: パーティション キー スキーマはソース URI 接頭辞の直後にエンコードされます。次の形式を使用して --hive_partitioning_source_uri_prefix
を指定してください。
--hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix/{key1:TYPE1}/{key2:TYPE2}/{key3:TYPE3}
REST API を使用した HivePartitioningOptions の設定
JobConfigurationLoad に HivePartitioningOptions を設定することで Hive パーティショニングがサポートされます。
なお、hivePartitioningOptions.mode
が CUSTOM に設定されている場合、hivePartitioningOptions.sourceUriPrefix
を gs://bucket/path_to_table/{key1:TYPE1}/{key2:TYPE2}/{key3:TYPE3}
に設定して、パーティション キー スキーマを sourceUriPrefix 内でエンコードする必要があるので注意してください。