テーブルの作成と使用
このドキュメントでは、BigQuery で標準(組み込み)テーブルを作成して使用する方法について説明します。他のタイプのテーブルを作成する方法については、以下をご覧ください。
テーブルを作成した後は、以下の操作を行うことができます。
- テーブルデータへのアクセスを制御する
- テーブルに関する情報を取得する
- データセット内のテーブルを一覧表示する
- テーブル メタデータの取得
テーブルのプロパティの更新、テーブルのコピー、テーブルの削除などのテーブルの管理の詳細については、テーブルの管理をご覧ください。
始める前に
BigQuery でテーブルを作成する前に、まず次のことを行います。
- BigQuery スタートガイドに従ってプロジェクトを設定します。
- BigQuery データセットを作成します。
- 必要に応じて、テーブルの概要でテーブルの制限事項、割り当て、料金を把握します。
テーブルの命名
BigQuery でテーブルを作成するとき、テーブル名はデータセットごとに一意である必要があります。テーブル名の要件は次のとおりです。
- 1,024 文字以内。
- カテゴリ L(文字)、M(マーク)、N(数字)、Pc(コネクタ、アンダースコアを含む)、Pd(ダッシュ)、Zs(スペース)の Unicode 文字を含む。詳しくは、一般カテゴリをご覧ください。
有効なテーブル名のすべての例を次に示します: table 01
、ग्राहक
、00_お客様
、étudiant-01
。
注意点:
- テーブル名では、デフォルトで大文字と小文字を区別します。
mytable
とMyTable
は、大文字と小文字の区別が無効なデータセットの一部でない限り、同じデータセット内に共存できます。 - 一部のテーブル名とテーブル名の接頭辞は予約済みです。テーブル名または接頭辞が予約されているというエラーが表示された場合は、別の名前を選択して、もう試してください。
複数のドット演算子(
.
)を連続して含めると、重複する演算子が暗黙的に削除されます。たとえば、以下は、
project_name....datasest_name..table_name
次のようになります。
project_name.dataset_name.table_name
テーブルを作成する
BigQuery では、次の方法でテーブルを作成できます。
- Google Cloud コンソールまたは bq コマンドライン ツールの
bq mk
コマンドを使用して手動で作成する。 - プログラムで
tables.insert
API メソッドを呼び出して作成する。 - クライアント ライブラリを使用する。
- クエリ結果から作成する。
- 外部データソースを参照するテーブルを定義する。
- データを読み込むときに作成する。
CREATE TABLE
データ定義言語(DDL)ステートメントを使用する。
必要な権限
テーブルを作成するには、次の 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 のロールと権限については、事前定義ロールと権限をご覧ください。
スキーマ定義を含む空のテーブルを作成する
次の方法でスキーマ定義を含む空のテーブルを作成できます。
- Google Cloud コンソールを使用してスキーマを入力する。
- bq コマンドライン ツールを使用してインラインでスキーマを指定する。
- bq コマンドライン ツールを使用して JSON スキーマ ファイルを送信する。
- API の
tables.insert
メソッドを呼び出すときに、テーブル リソースでスキーマを指定する。
テーブル スキーマの指定方法については、スキーマの指定をご覧ください。
テーブルを作成した後、そのテーブルへデータを入力するにはデータの読み込みまたはクエリ結果の書き込みを行います。
スキーマ定義を含む空のテーブルを作成するには:
コンソール
Google Cloud コンソールで [BigQuery] ページに移動します。
- [エクスプローラ] ペインでプロジェクトを展開し、データセットを選択します。
- [データセット情報] セクションで、 [テーブルを作成] をクリックします。
- [テーブルの作成] パネルで、次の詳細を指定します。
- [ソース] セクションの [テーブルの作成元] リストで [空のテーブル] を選択します。
- [送信先] セクションで、次の詳細を指定します。
- [データセット] で、テーブルを作成するデータセットを選択します。
- [テーブル] フィールドに、作成するテーブルの名前を入力します。
- [テーブルタイプ] フィールドが [ネイティブ テーブル] に設定されていることを確認します。
- [スキーマ] セクションでスキーマ定義を入力します。
スキーマ情報は、次のいずれかの方法で手動で入力できます。
- オプション 1: [テキストとして編集] をクリックし、スキーマを JSON 配列の形式で貼り付けます。JSON 配列を使用する場合は、JSON スキーマ ファイルの作成と同じプロセスを使用してスキーマを生成します。既存のテーブルのスキーマを JSON 形式で表示するには、次のコマンドを入力します。
bq show --format=prettyjson dataset.table
- オプション 2: 型]、[モード] を指定します。 [フィールドを追加] をクリックして、テーブル スキーマを入力します。各フィールドの [名前]、[
- オプション 1: [テキストとして編集] をクリックし、スキーマを JSON 配列の形式で貼り付けます。JSON 配列を使用する場合は、JSON スキーマ ファイルの作成と同じプロセスを使用してスキーマを生成します。既存のテーブルのスキーマを JSON 形式で表示するには、次のコマンドを入力します。
- 省略可: [パーティションとクラスタの設定] を指定します。詳細については、パーティション分割テーブルの作成とクラスタ化テーブルの作成と使用をご覧ください。
- 省略可: [詳細オプション] セクションで、顧客管理の暗号鍵を使用する場合は、[顧客管理の暗号鍵(CMEK)を使用] オプションを選択します。デフォルトの場合、BigQuery では、Google が管理する鍵を使用して、保存されているお客様のコンテンツを暗号化します。
- [テーブルを作成] をクリックします。
SQL
次の例では、2023 年 1 月 1 日まで有効の、newtable
という名前のテーブルを作成します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
CREATE TABLE mydataset.newtable ( x INT64 OPTIONS (description = 'An optional INTEGER field'), y STRUCT < a ARRAY <STRING> OPTIONS (description = 'A repeated STRING field'), b BOOL > ) OPTIONS ( expiration_timestamp = TIMESTAMP '2023-01-01 00:00:00 UTC', description = 'a table that expires in 2023', labels = [('org_unit', 'development')]);
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリの実行をご覧ください。
bq
-
Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。
Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
--table
または-t
フラグを指定して、bq mk
コマンドを使用します。テーブル スキーマ情報は、インラインまたは JSON スキーマ ファイルによって指定できます。次のオプション パラメータを使用できます。--expiration
--description
--time_partitioning_field
--time_partitioning_type
--range_partitioning
--clustering_fields
--destination_kms_key
--label
--time_partitioning_field
、--time_partitioning_type
、--range_partitioning
、--clustering_fields
、--destination_kms_key
はここでは説明しません。これらのオプション パラメータの詳細については、次のリンクをご覧ください。--time_partitioning_field
、--time_partitioning_type
、--range_partitioning
の詳細については、パーティション分割テーブルをご覧ください。--clustering_fields
の詳細については、クラスタ化テーブルをご覧ください。--destination_kms_key
の詳細については、顧客管理の暗号鍵をご覧ください。
デフォルト以外のプロジェクトでテーブルを作成する場合は、
project_id:dataset
の形式でプロジェクト ID をデータセットに追加します。既存のデータセット内にスキーマ定義を持つ空のテーブルを作成するには、以下を入力します。
bq mk \ --table \ --expiration integer \ --description description \ --label key_1:value_1 \ --label key_2:value_2 \ project_id:dataset.table \ schema
次のように置き換えます。
- integer はテーブルのデフォルトの存続期間(秒)です。最小値は 3,600 秒(1 時間)です。現在の UTC 時間にこの整数値を足した値が、有効期限になります。テーブルの作成時に有効期限を設定した場合、データセットのデフォルトのテーブル有効期限設定は無視されます。
- description はテーブルの説明です。引用符で囲みます。
- key_1:value_1 と key_2:value_2 は、ラベルを指定する Key-Value ペアです。
- project_id は、プロジェクト ID です。
- dataset は、プロジェクトのデータセットです。
- table は、作成するテーブルの名前です。
- schema は、field:data_type,field:data_type という形式のインライン スキーマ定義、またはローカルマシン上の JSON スキーマ ファイルへのパスです。
コマンドラインでスキーマを指定する場合、
RECORD
(STRUCT
)型と列の説明を含めることはできません。また、列のモードも指定できません。すべてのモードはデフォルトのNULLABLE
になります。説明、モード、RECORD
型を含めるには、JSON スキーマ ファイルを指定します。例:
インライン スキーマ定義を使用してテーブルを作成するには、以下のコマンドを入力します。このコマンドは、デフォルト プロジェクトにある
mydataset
内にmytable
という名前のテーブルを作成します。テーブルの存続期間は 3,600 秒(1 時間)、説明はThis is my table
、ラベルはorganization:development
に設定されます。このコマンドでは--table
ではなく-t
ショートカットを使用しています。スキーマはインラインでqtr:STRING,sales:FLOAT,year:STRING
と指定されています。bq mk \ -t \ --expiration 3600 \ --description "This is my table" \ --label organization:development \ mydataset.mytable \ qtr:STRING,sales:FLOAT,year:STRING
次のコマンドを入力し、JSON スキーマ ファイルを使用してテーブルを作成します。このコマンドは、デフォルト プロジェクトにある
mydataset
内にmytable
という名前のテーブルを作成します。テーブルの存続期間は 3,600 秒(1 時間)、説明はThis is my table
、ラベルはorganization:development
に設定されます。スキーマ ファイルのパスは/tmp/myschema.json
です。bq mk \ --table \ --expiration 3600 \ --description "This is my table" \ --label organization:development \ mydataset.mytable \ /tmp/myschema.json
JSON スキーマ ファイルを使用してテーブルを作成するには、次のコマンドを入力します。このコマンドは、
myotherproject
プロジェクトにあるmydataset
内にmytable
という名前のテーブルを作成します。テーブルの存続期間は 3,600 秒(1 時間)、説明はThis is my table
、ラベルはorganization:development
に設定されます。スキーマ ファイルのパスは/tmp/myschema.json
です。bq mk \ --table \ --expiration 3600 \ --description "This is my table" \ --label organization:development \ myotherproject:mydataset.mytable \ /tmp/myschema.json
Terraform
google_bigquery_table
リソースを使用します。
テーブルを作成する
次の例では、mytable
という名前のテーブルが作成されます。
テーブルを作成してアクセス権を付与する
次の例では、mytable
という名前のテーブルを作成し、google_bigquery_table_iam_policy
リソースを使用してアクセス権限を付与しています。このステップは、テーブルが存在するデータセットへのアクセス権を持たないプリンシパルにテーブルへのアクセス権を付与する場合にのみ行います。
顧客管理の暗号鍵を使用してテーブルを作成する
次の例では、mytable
という名前のデータセットを作成します。また、google_kms_crypto_key
と google_kms_key_ring
リソースを使用し、テーブルに Cloud Key Management Service の鍵を指定します。この例を実行する前に、Cloud Key Management Service API を有効にする必要があります。
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
定義済みのテーブル リソースを使用して tables.insert
メソッドを呼び出します。
C#
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの C# の手順に沿って設定を行ってください。詳細については、BigQuery C# API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Go の手順に沿って設定を行ってください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Java の手順に沿って設定を行ってください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Node.js の手順に沿って設定を行ってください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
PHP
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの PHP の手順に沿って設定を行ってください。詳細については、BigQuery PHP API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Python の手順に沿って設定を行ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Ruby
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Ruby の手順に沿って設定を行ってください。詳細については、BigQuery Ruby API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
スキーマ定義を含まない空のテーブルを作成する
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Java の手順に沿って設定を行ってください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
クエリ結果からテーブルを作成する
クエリ結果からテーブルを作成するには、結果を宛先テーブルに書き込みます。
コンソール
Google Cloud コンソールで [BigQuery] ページを開きます。
[エクスプローラ] パネルでプロジェクトを開いて、データセットを選択します。
有効な SQL クエリを入力します。
[展開] をクリックして、[クエリを設定] を選択します。
[クエリ結果の宛先テーブルを設定する] オプションを選