外部パーティション分割データの読み込み

BigQuery では、デフォルトの Hive パーティショニング レイアウトを使用した、Cloud Storage に保存されている外部パーティション分割データの読み込みをサポートしています(形式は AvroParquetORCCSVJSON)。

制限事項

  • Hive パーティショニングのサポートは、すべての URI において、パーティション エンコードの直前に共通のソース URI プレフィックスがあるものと想定して構築されています。例: gs://<bucket>/<path_to_table>/
  • Hive パーティション分割テーブルのディレクトリ構造は、同じパーティション キーが同じ順序で出現し、テーブルごとに最大 10 個のパーティション キーがあると想定されています。
  • データはデフォルトの Hive パーティショニング レイアウトに従う必要があります。
  • 基盤となるファイルの中で、Hive パーティショニング キーと列は重複できません。
  • 現在、BigQuery ウェブ UI、コマンドライン ツール、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 が抽出されます。

詳しくは、ウェブ UIコマンドライン ツール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-311 です。

特定のファイルのみからデータを読み込むには:

  • 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 列が入力されます。

ウェブ UI を使用した HivePartitioningOptions の設定

ウェブ UI で Hive パーティショニング オプションを設定する手順は次のとおりです。

  1. Cloud Console で BigQuery ウェブ UI を開きます。

    Cloud Console に移動

  2. [リソース] ペインで、データセットを選択します。

  3. [テーブルを作成] ボタンをクリックして、新しいテーブルを作成します。

  4. [テーブルの作成元] プルダウンから [Cloud Storage] を選択します。

    Hive パーティショニング オプション

  5. [Cloud Storage バケットからファイルを選択] フィールドにデータセットのファイルパスを入力し、次にプルダウンからそのファイルタイプを選択します。

    1. [ソースデータ パーティショニング] ボックスをオンにして、指定されたフィールドにソース URI プレフィックスを入力します。
    2. [パーティション推論モード] で、AUTO の場合は [種類を自動的に推測します] を選択し、STRINGS の場合は [すべての列は文字列です] を選択します。
    3. [テーブルタイプ] プルダウンから [ネイティブ テーブル] を選択します。

コマンドライン ツールを使用した 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 の設定

JobConfigurationLoadHivePartitioningOptions を設定することで Hive パーティショニングがサポートされます。

なお、hivePartitioningOptions.mode が CUSTOM に設定されている場合、hivePartitioningOptions.sourceUriPrefixgs://bucket/path_to_table/{key1:TYPE1}/{key2:TYPE2}/{key3:TYPE3} に設定して、パーティション キー スキーマを sourceUriPrefix 内でエンコードする必要があるので注意してください。