分割テーブルデータの管理

このドキュメントでは、BigQuery でパーティション分割テーブルデータを管理する方法について説明します。

パーティション デコレータ

パーティション デコレータを使用すると、テーブル内のパーティションを参照できます。たとえば、特定のパーティションにデータを書き込むことができます。

パーティション デコレータの形式は table_name$partition_id で、partition_id セグメントの形式はパーティショニングのタイプによって異なります。

パーティショニング タイプ 形式
毎時 yyyymmddhh my_table$2021071205
毎日 yyyymmdd my_table$20210712
月別 yyyymm my_table$202107
毎年 yyyy my_table$2021
整数の範囲 range_start my_table$40

パーティション内のデータを参照する

指定したパーティションのデータを参照するには、bq head コマンドでパーティション デコレータを使用します。

たとえば、次のコマンドは、2018-02-24 パーティションの my_dataset.my_table の最初の 10 行にあるすべてのフィールドを一覧表示します。

    bq head --max_rows=10 'my_dataset.my_tablee$20180224'

特定のパーティションへデータを書き込む

特定のパーティションにデータを読み込むには、bq load コマンドでパーティション デコレータを使用します。次の例では、テーブルはすでに日付でパーティショニングされていると仮定し、既存のテーブルの 20160501(2016 年 5 月 1 日)パーティションにデータを書き込んでいます。

bq load --source_format=CSV 'my_dataset.my_table$20160501' data.csv

クエリの結果を特定のパーティションに書き込むこともできます。

bq query \
  --use_legacy_sql=false  \
  --destination_table='my_table$20160501' \
  --append_table=true \
  'SELECT * FROM my_dataset.another_table'

この方法を取り込み時間パーティショニングで使用すると、データが最初に作成された時間に対応するパーティションに古いデータを読み込むことができます。

また、この方法でタイムゾーンを調整することもできます。デフォルトでは、取り込み時間パーティションは UTC 時間に基づきます。パーティションの時刻を特定のタイムゾーンに合わせるには、パーティション デコレータを使用して UTC の取り込み時間をオフセットします。たとえば、太平洋標準時(PST)を使用している場合、対応するパーティション デコレータ $20160501 を使用すると、2016 年 5 月 1 日(PST)で生成されたデータを、その日付のパーティションに読み込むことができます

時間単位列と整数範囲のパーティション分割テーブルの場合、デコレータで指定されたパーティション ID が、書き込まれるデータと一致する必要があります。たとえば、テーブルが DATE 列でパーティション分割されている場合は、デコレータがその列の値と一致する必要があります。一致していない場合は、エラーが発生します。ただし、データが単一のパーティション内にあることがわかっている場合は、パーティション デコレータを指定することで書き込みパフォーマンスを向上させることができます。

データの読み込みの詳細については、BigQuery へのデータの読み込みの概要をご覧ください。

パーティション分割テーブルへのデータのストリーミング

tabledata.insertAll メソッドを使用してパーティション分割テーブルにデータをストリーミングする方法については、パーティション分割テーブルへのストリーミングをご覧ください。

テーブルデータをエクスポートする

パーティション分割テーブルからすべてのデータをエクスポートする処理は、分割されていないテーブルからデータをエクスポートする処理と同じプロセスです。詳細については、テーブルデータのエクスポートをご覧ください。

個々のパーティションからデータをエクスポートするには、テーブル名にパーティション デコレータを追加します。例: my_table$20160201

テーブル名にパーティション名を追加して、__NULL____UNPARTITIONED__ のパーティションからデータをエクスポートすることもできます。たとえば、my_table$__NULL__my_table$__UNPARTITIONED__ です。

パーティション分割テーブルのセキュリティ

パーティションパーティション分割テーブルのアクセス制御は、標準テーブルのアクセス制御と同じです。さらに詳しい内容については、テーブル アクセス制御の概要をご覧ください。

次のステップ

パーティション分割テーブルの操作の詳細については、次をご覧ください。