パーティション分割テーブルの作成
このページでは、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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
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:
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
メソッドを呼び出します。
整数範囲パーティション分割テーブルを作成する
スキーマ定義を持つ空の整数範囲パーティション分割テーブルを作成するには:
コンソール
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:
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
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
クエリには SELECT AS
句を指定した 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
というパーティションを作成します。
パーティション分割テーブルのセキュリティ
パーティション分割テーブルのアクセス制御は、標準テーブルのアクセス制御と同じです。さらに詳しい内容については、テーブル アクセス制御の概要をご覧ください。
次のステップ
- パーティション分割テーブルの管理方法と更新方法については、パーティション分割テーブルの管理をご覧ください。
- パーティション分割テーブルをクエリする方法については、パーティション分割テーブルのクエリをご覧ください。