パーティション分割テーブルの作成
このページでは、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-owned and Google-managed encryption keyを使用して保存されているお客様のコンテンツを暗号化します。
- [テーブルを作成] をクリックします。
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:
- Cloud Shell を起動します。
-
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
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 によって作成または更新されたことを確認します。
Terraform
google_bigquery_table
リソースを使用します。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
次の例では、日付によってパーティション分割された mytable
という名前のテーブルを作成します。
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
ディレクトリを準備する
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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
取り込み時間パーティション分割テーブルを作成する
スキーマ定義を持つ空の取り込み時間パーティション分割テーブルを作成するには:
コンソール
Google Cloud コンソールで [BigQuery] ページを開きます。
[エクスプローラ] パネルでプロジェクトを開いて、データセットを選択します。
アクション オプションを開いて、[開く] をクリックします。
詳細パネルで [テーブルを作成]
をクリックします。[テーブルの作成] ページの [ソース] セクションで、[空のテーブル] を選択します。
[送信先] で次の操作を行います。
- [データセット名] で、該当するデータセットを選択します。
- [テーブル名] フィールドに、テーブルの名前を入力します。
- [テーブルタイプ] が [ネイティブ テーブル] に設定されていることを確認します。
[スキーマ] セクションでスキーマ定義を入力します。
[パーティションとクラスタの設定] セクションの [パーティショニング] で、[取り込み時間により分割] をクリックします。
(省略可)このテーブルのすべてのクエリでパーティション フィルタを要求するには、[パーティション フィルタを要求] チェックボックスをオンにします。パーティション フィルタを要求すると、コストが削減され、パフォーマンスが向上する場合があります。詳細については、パーティション フィルタの要件を設定するをご覧ください。
[テーブルを作成] をクリックします。
SQL
取り込み時間パーティション分割テーブルを作成するには、_PARTITIONDATE
でパーティショニングする PARTITION BY
句を指定した CREATE TABLE
ステートメントを使用します。
次の例では、1 日ごとのパーティションを含むテーブルを作成しています。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
CREATE TABLE mydataset.newtable (transaction_id INT64) PARTITION BY _PARTITIONDATE OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
OPTIONS
句を使用して、パーティションの有効期限やパーティション フィルタ要件などのテーブル オプションを設定します。[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
取り込み時間パーティショニングのデフォルトのパーティショニング タイプは、1 日ごとのパーティショニングです。別のパーティショニング タイプを指定するには、PARTITION BY
句に DATE_TRUNC
関数を含めます。たとえば、次のクエリは月別のパーティションを含むテーブルを作成します。
CREATE TABLE mydataset.newtable (transaction_id INT64) PARTITION BY DATE_TRUNC(_PARTITIONTIME, MONTH) 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_type UNIT_TIME \ --time_partitioning_expiration EXPIRATION_TIME \ --require_partition_filter=BOOLEAN \ PROJECT_ID:DATASET.TABLE
次のように置き換えます。
- SCHEMA:
column:data_type,column:data_type
形式の定義、またはローカルマシン上の JSON スキーマ ファイルのパス。詳細については、スキーマの指定をご覧ください。 - UNIT_TIME: パーティショニング タイプ。サポートされる値は、
DAY
、HOUR
、MONTH
、またはYEAR
です。 - EXPIRATION_TIME: テーブルのパーティションの有効期限(秒単位)。
--time_partitioning_expiration
フラグは省略可能です。詳細については、パーティションの有効期限の設定をご覧ください。 - BOOLEAN:
true
の場合、このテーブルのクエリにはパーティション フィルタを含める必要があります。--require_partition_filter
フラグは省略可能です。詳細については、パーティション フィルタの要件を設定するをご覧ください。 - PROJECT_ID: プロジェクト ID。省略した場合は、デフォルトのプロジェクトが使用されます。
- DATASET: プロジェクト内のデータセットの名前。
- TABLE: 作成するテーブルの名前。
他のコマンドライン オプションについては、
bq mk
をご覧ください。次の例では、
mytable
という名前の取り込み時間パーティション分割テーブルを作成します。このテーブルには 1 日ごとのパーティショニングがあり、パーティションの有効期限が 259,200 秒(3 日間)に設定されています。bq mk \ -t \ --schema qtr:STRING,sales:FLOAT,year:STRING \ --time_partitioning_type DAY \ --time_partitioning_expiration 259200 \ mydataset.mytable
- SCHEMA:
- Cloud Shell を起動します。
-
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
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 によって作成または更新されたことを確認します。
Terraform
google_bigquery_table
リソースを使用します。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
次の例では、取り込み時間によってパーティション分割された mytable
という名前のテーブルを作成します。
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
変更を適用する
API
timePartitioning
プロパティと schema
プロパティを指定する定義済みのテーブル リソースを使用して tables.insert
メソッドを呼び出します。
整数範囲パーティション分割テーブルを作成する
スキーマ定義を持つ空の整数範囲パーティション分割テーブルを作成するには:
コンソール
Google Cloud コンソールで [BigQuery] ページを開きます。
[エクスプローラ] パネルでプロジェクトを開いて、データセットを選択します。
アクション オプションを開いて、[開く] をクリックします。
詳細パネルで [テーブルを作成]
をクリックします。[テーブルの作成] ページの [ソース] セクションで、[空のテーブル] を選択します。
[送信先] で次の操作を行います。
- [データセット名] で、該当するデータセットを選択します。
- [テーブル名] フィールドに、テーブルの名前を入力します。
- [テーブルタイプ] が [ネイティブ テーブル] に設定されていることを確認します。
[スキーマ] セクションでスキーマ定義を入力します。スキーマにパーティショニング列に対する
INTEGER
列が含まれていることを確認してください。詳細については、スキーマの指定をご覧ください。[パーティションとクラスタの設定] セクションの [パーティショニング] プルダウン リストで、[フィールドにより分割] を選択して、パーティショニング列を選びます。このオプションは、スキーマに
INTEGER
列が含まれている場合にのみ使用できます。[開始]、[終了]、[間隔] の値を指定します。
- [開始] は、最初のパーティション範囲の開始値です(この値は含まれる)。
- [終了] は、最後のパーティション範囲の終了値です(この値は含まれない)。
- [間隔] は、各パーティション範囲の幅です。
この範囲外の値は、特定の
__UNPARTITIONED__
パーティションに入ります。(省略可)このテーブルのすべてのクエリでパーティション フィルタを要求するには、[パーティション フィルタを要求] チェックボックスをオンにします。パーティション フィルタを要求すると、コストが削減され、パフォーマンスが向上する場合があります。詳細については、パーティション フィルタの要件を設定するをご覧ください。
[テーブルを作成] をクリックします。
SQL
整数範囲パーティション分割テーブルを作成するには、PARTITION BY
句を指定した CREATE TABLE
DDL ステートメントを使用します。
次の例では、customer_id
列でパーティショニングされた、開始 0、終了 100、間隔 10 のテーブルを作成しています。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
CREATE TABLE mydataset.newtable (customer_id INT64, date1 DATE) PARTITION BY RANGE_BUCKET(customer_id, GENERATE_ARRAY(0, 100, 10)) OPTIONS ( require_partition_filter = TRUE);
OPTIONS
句を使用して、パーティション フィルタ要件などのテーブル オプションを設定します。[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
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 \ --schema schema \ --range_partitioning=COLUMN_NAME,START,END,INTERVAL \ --require_partition_filter=BOOLEAN \ PROJECT_ID:DATASET.TABLE
次のように置き換えます。
- SCHEMA:
column:data_type,column:data_type
形式のインライン スキーマ定義、またはローカルマシン上の JSON スキーマ ファイルのパス。詳細については、スキーマの指定をご覧ください。 - COLUMN_NAME: パーティショニング列の名前。テーブル スキーマでは、この列は
INTEGER
型である必要があります。 - START: 最初のパーティション範囲の開始値(この値は含まれる)。
- END: 最後のパーティション範囲の終了値(この値は含まれない)。
- INTERVAL: 各パーティション範囲の幅。
- BOOLEAN:
true
の場合、このテーブルのクエリにはパーティション フィルタを含める必要があります。--require_partition_filter
フラグは省略可能です。詳細については、パーティション フィルタの要件を設定するをご覧ください。 - PROJECT_ID: プロジェクト ID。省略した場合は、デフォルトのプロジェクトが使用されます。
- DATASET: プロジェクト内のデータセットの名前。
- TABLE: 作成するテーブルの名前。
パーティション範囲外の値は、特別な
__UNPARTITIONED__
パーティションに入ります。他のコマンドライン オプションについては、
bq mk
をご覧ください。次の例では、
customer_id
列でパーティション分割されたmytable
という名前のテーブルを作成します。bq mk \ -t \ --schema 'customer_id:INTEGER,qtr:STRING,sales:FLOAT' \ --range_partitioning=customer_id,0,100,10 \ mydataset.mytable
- SCHEMA:
- Cloud Shell を起動します。
-
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
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 によって作成または更新されたことを確認します。
Terraform
google_bigquery_table
リソースを使用します。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
次の例では、整数範囲によってパーティション分割された mytable
という名前のテーブルを作成します。
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
変更を適用する
API
rangePartitioning
プロパティと schema
プロパティを指定する定義済みのテーブル リソースを使用して tables.insert
メソッドを呼び出します。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Node.js の設定手順を完了してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
クエリ結果からパーティション分割テーブルを作成する
クエリ結果からパーティション分割テーブルを作成するには:
- SQL で
CREATE TABLE ... AS SELECT
ステートメントを使用します。この方法を使用すると、時間単位列または整数範囲でパーティショニングされたテーブルは作成できますが、取り込み時間でパーティショニングされたテーブルは作成できません。 - bq コマンドライン ツールまたは BigQuery API を使用して、クエリに宛先テーブルを設定します。クエリを実行すると、BigQuery は結果を宛先テーブルに書き込みます。この方法は、どのパーティショニング タイプにも使用できます。
jobs.insert
API メソッドを呼び出し、timePartitioning
またはrangePartitioning
のいずれかのプロパティでパーティショニングを指定します。
SQL
CREATE TABLE
ステートメントを使用します。パーティショニングを構成するには、PARTITION BY
句を含めます。
次の例では、transaction_date
列でパーティション分割されたテーブルを作成します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY transaction_date AS ( SELECT transaction_id, transaction_date FROM mydataset.mytable );
OPTIONS
句を使用して、パーティション フィルタ要件などのテーブル オプションを設定します。[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
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.
クエリからパーティション分割テーブルを作成するには、
--destination_table
フラグと--time_partitioning_type
フラグを指定したbq query
コマンドを使用します。時間単位列パーティショニング:
bq query \ --use_legacy_sql=false \ --destination_table TABLE_NAME \ --time_partitioning_field COLUMN \ --time_partitioning_type UNIT_TIME \ 'QUERY_STATEMENT'
取り込み時間パーティショニング:
bq query \ --use_legacy_sql=false \ --destination_table TABLE_NAME \ --time_partitioning_type UNIT_TIME \ 'QUERY_STATEMENT'
整数範囲パーティショニング:
bq query \ --use_legacy_sql=false \ --destination_table PROJECT_ID:DATASET.TABLE \ --range_partitioning COLUMN,START,END,INTERVAL \ 'QUERY_STATEMENT'
次のように置き換えます。
- PROJECT_ID: プロジェクト ID。省略した場合は、デフォルトのプロジェクトが使用されます。
- DATASET: プロジェクト内のデータセットの名前。
- TABLE: 作成するテーブルの名前。
- COLUMN: パーティショニング列の名前。
- UNIT_TIME: パーティショニング タイプ。サポートされる値は、
DAY
、HOUR
、MONTH
、またはYEAR
です。 - START: 範囲パーティショニングの開始値(この値は含まれる)。
- END: 範囲パーティショニングの終了値(この値は含まれない)。
- INTERVAL: パーティション内の各範囲の幅。
- QUERY_STATEMENT: テーブルのデータ入力に使用されるクエリ。
次の例では、月別のパーティショニングを使用して
transaction_date
列でパーティショニングされたテーブルを作成しています。bq query \ --use_legacy_sql=false \ --destination_table mydataset.newtable \ --time_partitioning_field transaction_date \ --time_partitioning_type MONTH \ 'SELECT transaction_id, transaction_date FROM mydataset.mytable'
次の例では、整数範囲パーティショニングを使用して
customer_id
列でパーティショニングされたテーブルを作成します。bq query \ --use_legacy_sql=false \ --destination_table mydataset.newtable \ --range_partitioning customer_id,0,100,10 \ 'SELECT * FROM mydataset.ponies'
取り込み時間パーティション分割テーブルの場合は、パーティション デコレータを使用して特定のパーティションにデータを読み込むこともできます。次の例では、新しい取り込み時間パーティション分割テーブルを作成し、
20180201
(2018 年 2 月 1 日)パーティションにデータを読み込んでいます。bq query \ --use_legacy_sql=false \ --time_partitioning_type=DAY \ --destination_table='newtable$20180201' \ 'SELECT * FROM mydataset.mytable'
API
クエリ結果をパーティション分割テーブルに保存するには、jobs.insert
メソッドを呼び出します。query
ジョブを構成します。destinationTable
に宛先テーブルを指定します。timePartitioning
プロパティまたは rangePartitioning
プロパティでパーティショニングを指定します。
日付別テーブルを取り込み時間パーティション分割テーブルへ変換する
日付別テーブルを以前に作成している場合は、bq コマンドライン ツールで partition
コマンドを使用して、関連する一連のテーブル全体を単一の取り込み時間パーティション分割テーブルに変換できます。
bq --location=LOCATION partition \ --time_partitioning_type=PARTITION_TYPE \ --time_partitioning_expiration INTEGER \ PROJECT_ID:SOURCE_DATASET.SOURCE_TABLE \ PROJECT_ID:DESTINATION_DATASET.DESTINATION_TABLE
次のように置き換えます。
- LOCATION: ロケーションの名前。
--location
フラグは省略可能です。 - PARTITION_TYPE: パーティション タイプ。有効な値は
DAY
、HOUR
、MONTH
、またはYEAR
です。 - INTEGER: パーティションの有効期限(秒)。最小値はありません。パーティションの日付(UTC)に、この整数値を足した値が有効期限になります。
time_partitioning_expiration
フラグは省略可能です。 - PROJECT_ID: プロジェクト ID。
- SOURCE_DATASET: 日付別テーブルを含むデータセット。
- SOURCE_TABLE: 日付別テーブルの接頭辞。
- DESTINATION_DATASET; 新しいパーティション分割テーブルのデータセット。
- DESTINATION_TABLE; 作成するパーティション分割テーブルの名前。
partition
コマンドは --label
、--expiration
、--add_tags
、--description
フラグをサポートしていません。ラベル、テーブルの有効期限、タグ、および説明は、テーブルの作成後に追加できます。
partition
コマンドを実行すると、BigQuery は、シャーディングしたテーブルからパーティションを生成するコピージョブを作成します。
次の例では、sourcetable_
という接頭辞が付いた一連の日付別テーブルから、mytable_partitioned
という名前の取り込み時間パーティション分割テーブルを作成しています。新しいテーブルは毎日パーティション分割され、パーティションの有効期限は 259,200 秒(3 日間)に設定されます。
bq partition \
--time_partitioning_type=DAY \
--time_partitioning_expiration 259200 \
mydataset.sourcetable_ \
mydataset.mytable_partitioned
日付別テーブルが sourcetable_20180126
と sourcetable_20180127
の場合、このコマンドは mydataset.mytable_partitioned$20180126
と mydataset.mytable_partitioned$20180127
というパーティションを作成します。
パーティション分割テーブルのセキュリティ
パーティション分割テーブルのアクセス制御は、標準テーブルのアクセス制御と同じです。さらに詳しい内容については、テーブル アクセス制御の概要をご覧ください。
次のステップ
- パーティション分割テーブルの管理方法と更新方法については、パーティション分割テーブルの管理をご覧ください。
- パーティション分割テーブルをクエリする方法については、パーティション分割テーブルのクエリをご覧ください。