分割テーブルデータの管理
このドキュメントでは、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__
です。
パーティション分割テーブルのセキュリティ
パーティションパーティション分割テーブルのアクセス制御は、標準テーブルのアクセス制御と同じです。さらに詳しい内容については、テーブル アクセス制御の概要をご覧ください。
次のステップ
パーティション分割テーブルの操作の詳細については、次をご覧ください。