外部パーティション分割データの読み込み
BigQuery では、Hive パーティショニング レイアウトを使用して Cloud Storage に保存されているデータを読み込むことができます。Hive パーティショニングを使用すると、外部データを複数のファイルに整理し、命名規則でファイルを異なるパーティションに分割できます。詳細については、サポートされるデータ レイアウトをご覧ください。
デフォルトでは、パーティション分割テーブルを明示的に作成しない限り、データの読み込み後に BigQuery でデータがパーティショニングされることはありません。
Hive パーティション分割データの読み込み
Hive パーティション分割データを読み込むには、次のいずれかのオプションを選択します。
コンソール
Google Cloud コンソールで [BigQuery] に移動します。
- [エクスプローラ] ペインでプロジェクトを開いて、データセットを選択します。
- (アクションを表示)をクリックしてから、[テーブルを作成] をクリックします。[テーブルを作成] ペインが開きます。
- [送信元] セクションで、次の詳細を指定します。
- [テーブルの作成元] で [Google Cloud Storage] を選択します。
- [Select file from Cloud Storage bucket] に、ワイルドカードを使用して Cloud Storage フォルダへのパスを入力します。たとえば、
my_bucket/my_files*
のようにします。Cloud Storage バケットは、作成、追加、または上書きするテーブルを含むデータセットと同じロケーションに存在している必要があります。 - [ファイル形式] リストでファイル形式を選択します。
- [ソースデータ パーティショニング] チェックボックスをオンにして、[ソース URI の接頭辞を選択] に Cloud Storage URI の接頭辞を入力します。たとえば、
gs://my_bucket/my_files
のようにします。 - [パーティション推論モード] セクションで、次のいずれかのオプションを選択します。
- 種類を自動的に推測します: パーティション スキーマ検出モードを
AUTO
に設定します。 - すべての列は文字列です: パーティション スキーマ検出モードを
STRINGS
に設定します。 - 独自に指定します: パーティション スキーマ検出モードを
CUSTOM
に設定し、パーティション キーのスキーマ情報を手動で入力します。詳細については、カスタム パーティション キー スキーマを指定するをご覧ください。
- 種類を自動的に推測します: パーティション スキーマ検出モードを
- 省略可: このテーブルのすべてのクエリでパーティション フィルタを必須にするには、[パーティション フィルタを要求] チェックボックスをオンにします。パーティション フィルタを要求すると、コストが削減され、パフォーマンスが向上する場合があります。詳細については、クエリ内のパーティション キーに対する必須の述語フィルタをご覧ください。
- [宛先] セクションで、次の詳細を指定します。
- [プロジェクト] で、テーブルを作成するプロジェクトを選択します。
- [データセット] で、テーブルを作成するデータセットを選択します。
- [テーブル] に、作成するテーブルの名前を入力します。
- [テーブルタイプ] で [ネイティブ テーブル] を選択します。
- [スキーマ] セクションでスキーマ定義を入力します。
- スキーマの自動検出を有効にするには、[自動検出] を選択します。
- スキーマと一致しない追加の列値を持つ行を無視するには、[詳細オプション] セクションを開いて [不明な値] を選択します。
- [テーブルを作成] をクリックします。
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
に設定します。 - 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
列が入力されます。
パーティション スキーマ
以降のセクションでは、BigQuery がサポートするデフォルトの Hive パーティション分割レイアウトとスキーマ検出モードについて説明します。
サポートされるデータ レイアウト
Cloud Storage からデータをクエリする場合、Hive パーティション キーは通常の列として表示されます。データはデフォルトの Hive パーティション分割レイアウトに従う必要があります。たとえば、次のファイルはデフォルトのレイアウトに従っています。すなわち、Key-Value ペアがディレクトリとして等号記号(=)のセパレータでレイアウトされていて、パーティション キーが常に同じ順序になっています。
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
スキーマの順序が一貫していないファイルも検出に失敗します。たとえば、逆パーティション キー エンコーディングを使用した次の 2 つのファイルについて考えてみましょう。
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 では、以下の 3 つの 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 パーティション分割テーブルのディレクトリ構造では、同じパーティショニング キーが同じ順序で表示され、テーブルごとに最大 10 個のパーティション キーがあると想定されます。
- データはデフォルトの Hive パーティショニング レイアウトに従う必要があります。
- Hive パーティショニング キーと基になるファイル内の列は重複できません。
サポートは GoogleSQL のみに対応しています。
Cloud Storage からの読み込みに関する制限のすべてが適用されます。
次のステップ
- パーティション分割テーブルについて学習する。
- BigQuery で SQL を使用する方法を学習する。