パーティション分割テーブルの作成
このページでは、BigQuery でパーティション分割テーブルを作成する方法について説明します。パーティション分割テーブルの概要については、分割テーブルの概要をご覧ください。
始める前に
このドキュメントの各タスクを実行するために必要な権限をユーザーに与える Identity and Access Management(IAM)のロールを付与します。
必要な権限
テーブルを作成するには、次の IAM 権限が必要です。
bigquery.tables.create
bigquery.tables.updateData
bigquery.jobs.create
また、テーブルに書き込むデータにアクセスするために bigquery.tables.getData
権限が必要になる場合があります。
次の IAM 事前定義ロールには、テーブルの作成に必要な権限が含まれています。
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
(bigquery.jobs.create
権限を含む)roles/bigquery.user
(bigquery.jobs.create
権限を含む)roles/bigquery.jobUser
(bigquery.jobs.create
権限を含む)
また、bigquery.datasets.create
権限がある場合は、自分が作成したデータセット内のテーブルを作成および更新できます。
BigQuery での IAM のロールと権限について詳しくは、事前定義ロールと権限をご覧ください。
空のパーティション分割テーブルを作成する
BigQuery でパーティション分割テーブルを作成する手順は、任意のテーブル オプションに加えてパーティショニング オプションを指定する点を除き、標準テーブルを作成する手順と同様です。
時間単位列パーティション分割テーブルを作成する
スキーマ定義を持つ空の時間単位列パーティション分割テーブルを作成するには:
コンソール
Google Cloud コンソールで [BigQuery] ページに移動します。
- [エクスプローラ] ペインでプロジェクトを開き、データセットを選択します。
- [データセット情報] セクションで、[ テーブルを作成] をクリックします。
- [テーブルを作成] パネルで、次の詳細を指定します。
- [ソース] セクションの [テーブルの作成元] リストで [空のテーブル] を選択します。
- [宛先] セクションで、次の詳細を指定します。
- [データセット] で、テーブルを作成するデータセットを選択します。
- [テーブル] フィールドに、作成するテーブルの名前を入力します。
- [テーブルタイプ] フィールドが [ネイティブ テーブル] に設定されていることを確認します。
- [スキーマ] セクションでスキーマ定義を入力します。スキーマには、パーティショニング列に
DATE
、TIMESTAMP
、DATETIME
列を含める必要があります。詳細については、スキーマの指定をご覧ください。スキーマ情報は、次のいずれかの方法で手動で入力できます。- オプション 1: [テキストとして編集] をクリックし、スキーマを JSON 配列の形式で貼り付けます。JSON 配列を使用する場合は、JSON スキーマ ファイルの作成と同じプロセスを使用してスキーマを生成します。既存のテーブルのスキーマを JSON 形式で表示するには、次のコマンドを入力します。
bq show --format=prettyjson dataset.table
- オプション 2: [型、モードを指定します。 フィールドを追加] をクリックして、テーブル スキーマを入力します。各フィールドの名前、
- オプション 1: [テキストとして編集] をクリックし、スキーマを JSON 配列の形式で貼り付けます。JSON 配列を使用する場合は、JSON スキーマ ファイルの作成と同じプロセスを使用してスキーマを生成します。既存のテーブルのスキーマを JSON 形式で表示するには、次のコマンドを入力します。
- [パーティションとクラスタの設定] セクションの [パーティショニング] リストで、[フィールドにより分割] を選択してから、パーティショニングする列を選択します。このオプションは、スキーマに
DATE
、TIMESTAMP
、またはDATETIME
列が含まれている場合にのみ使用できます。 - 省略可: このテーブルのすべてのクエリでパーティション フィルタを必須にするには、[パーティション フィルタを要求] チェックボックスをオンにします。パーティション フィルタを使用すると、費用が低減され、パフォーマンスが向上する場合があります。詳細については、パーティション フィルタの要件を設定するをご覧ください。
- [パーティショニング タイプ] を選択して、1 日ごと、1 時間ごと、月別、年別のいずれかのパーティショニングを選択します。
- 省略可: [詳細オプション] セクションで、顧客管理の暗号鍵を使用する場合は、[顧客管理の暗号鍵(CMEK)を使用] オプションを選択します。BigQuery はデフォルトで、Google が所有し Google が管理する鍵を使用して、保存されているお客様のコンテンツを暗号化します。
- [テーブルを作成] をクリックします。
SQL
時間単位列パーティション分割テーブルを作成するには、PARTITION BY
句を指定した CREATE TABLE
DDL ステートメントを使用します。
次の例では、transaction_date
列に基づいた 1 日ごとのパーティションを含むテーブルが作成されます。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY transaction_date OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
OPTIONS
句を使用して、パーティションの有効期限やパーティション フィルタ要件などのテーブル オプションを設定します。[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
DATE
列のデフォルトのパーティショニング タイプは 1 日ごとのパーティショニングです。別のパーティショニング タイプを指定するには、PARTITION BY
句に DATE_TRUNC
関数を含めます。たとえば、次のクエリは月別のパーティションを含むテーブルを作成します。
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY DATE_TRUNC(transaction_date, MONTH) OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
また、パーティショニング列として TIMESTAMP
列または DATETIME
列を指定することもできます。その場合は、PARTITION BY
句に TIMESTAMP_TRUNC
関数または DATETIME_TRUNC
関数を含めて、パーティション タイプを指定します。たとえば、次のステートメントは TIMESTAMP
列に基づいて 1 日ごとのパーティションを含むテーブルを作成します。
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_ts TIMESTAMP) PARTITION BY TIMESTAMP_TRUNC(transaction_ts, DAY) OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
--table
フラグ(または-t
ショートカット)を指定して、bq mk
コマンドを使用します。bq mk \ --table \ --schema SCHEMA \ --time_partitioning_field COLUMN \ --time_partitioning_type UNIT_TIME \ --time_partitioning_expiration EXPIRATION_TIME \ --require_partition_filter=BOOLEAN PROJECT_ID:DATASET.TABLE
次のように置き換えます。
- SCHEMA:
column:data_type,column:data_type
形式のスキーマ定義、またはローカルマシン上の JSON スキーマ ファイルのパス。詳細については、スキーマの指定をご覧ください。 - COLUMN: パーティショニング列の名前。テーブル スキーマでは、この列は
TIMESTAMP
型、DATETIME
型、またはDATE
型である必要があります。 - UNIT_TIME: パーティショニング タイプ。サポートされる値は、
DAY
、HOUR
、MONTH
、またはYEAR
です。 - EXPIRATION_TIME: テーブルのパーティションの有効期限(秒単位)。
--time_partitioning_expiration
フラグは省略可能です。詳細については、パーティションの有効期限の設定をご覧ください。 - BOOLEAN:
true
の場合、このテーブルのクエリにはパーティション フィルタを含める必要があります。--require_partition_filter
フラグは省略可能です。詳細については、パーティション フィルタの要件を設定するをご覧ください。 - PROJECT_ID: プロジェクト ID。省略した場合は、デフォルトのプロジェクトが使用されます。
- DATASET: プロジェクト内のデータセットの名前。
- TABLE: 作成するテーブルの名前。
他のコマンドライン オプションについては、
bq mk
をご覧ください。次の例では、1 時間ごとのパーティショニングを使用して
ts
列でパーティション分割されたmytable
という名前のテーブルを作成します。パーティションの有効期限は 259,200 秒(3 日間)です。bq mk \ -t \ --schema 'ts:TIMESTAMP,qtr:STRING,sales:FLOAT' \ --time_partitioning_field ts \ --time_partitioning_type HOUR \ --time_partitioning_expiration 259200 \ mydataset.mytable
- SCHEMA:
Terraform
google_bigquery_table
リソースを使用します。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
次の例では、日付によってパーティション分割された mytable
という名前のテーブルを作成します。
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
- Cloud Shell を起動します。
-
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
-
Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は
.tf
にする必要があります(例:main.tf
)。このチュートリアルでは、このファイルをmain.tf
とします。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。
新しく作成した
main.tf
にサンプルコードをコピーします。必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。
- 環境に適用するサンプル パラメータを確認し、変更します。
- 変更を保存します。
-
Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
terraform init
最新バージョンの Google プロバイダを使用する場合は、
-upgrade
オプションを使用します。terraform init -upgrade
変更を適用する
-
構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
terraform plan
必要に応じて構成を修正します。
-
次のコマンドを実行します。プロンプトで「
yes
」と入力して、Terraform 構成を適用します。terraform apply
Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。
- Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。
API
timePartitioning
プロパティと schema
プロパティを指定する定義済みのテーブル リソースを使用して tables.insert
メソッドを呼び出します。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Go の設定手順を完了してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Node.js の設定手順を完了してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。