テーブルの作成と使用

このドキュメントでは、BigQuery で標準のテーブル、つまり「ネイティブ」テーブルを作成して使用する方法を説明します。他のタイプのテーブルを作成する方法については、以下をご覧ください。

テーブルを作成した後は、以下の操作を行うことができます。

  • テーブルデータへのアクセスを制御する
  • テーブルに関する情報を取得する
  • データセット内のテーブルを一覧表示する
  • テーブル メタデータの取得

テーブルのプロパティの更新、テーブルのコピー、テーブルの削除などのテーブルの管理の詳細については、テーブルの管理をご覧ください。

始める前に

BigQuery でテーブルを作成する前に、まず次のことを行います。

テーブルの制限事項

BigQuery テーブルには以下の制限があります。

  • テーブル名はデータセットごとに一意である必要があります。
  • GCP Console と従来の BigQuery ウェブ UI で、一度にコピーできるテーブルは 1 つのみです。
  • テーブルをコピーするとき、コピー先データセットはコピー元テーブルと同じロケーションに存在する必要があります。たとえば、EU にあるデータセットから US にあるデータセットにはテーブルをコピーできません。
  • CLI、API、クライアント ライブラリを使用して複数のソーステーブルを宛先テーブルにコピーする場合、すべてのソーステーブルで同一のスキーマが使用されている必要があります。
  • GCP Console、従来の BigQuery ウェブ UI、コマンドライン ツール、API、クライアント ライブラリを使用して一度に削除できるテーブルは 1 つのみです。
  • テーブルデータをエクスポートするとき、宛先にできるのは Cloud Storage のみです。
  • データセット内のテーブル数が 50,000 個に近くなると、テーブルの列挙が遅くなります。API 呼び出しと従来の BigQuery ウェブ UI のいずれを使用する場合でも、列挙のパフォーマンスは低下します。現在、GCP Console の BigQuery ウェブ UI で表示できるテーブル数は、データセットあたり 50,000 までです。

    従来の BigQuery ウェブ UI のパフォーマンスを向上させるには、?minimal パラメータを使用して表示するテーブルの数をプロジェクトあたり 30,000 に制限します。このパラメータは、従来の BigQuery ウェブ UI の URL に次の形式で追加します。 https://bigquery.cloud.google.com/queries/project_id?minimal

テーブルの命名

BigQuery でテーブルを作成するとき、テーブル名はデータセットごとに一意である必要があります。テーブル名の要件は次のとおりです。

  • 1,024 文字以内
  • 英字(大文字または小文字)、数字、アンダースコアだけが含まれている

テーブルの作成

BigQuery のテーブルは、次の方法で作成できます。

  • 手動で、GCP Console、従来の BigQuery ウェブ UI、またはコマンドライン ツールの bq mk コマンドを使用する
  • プログラムでtables.insert API メソッドを呼び出す
  • クライアント ライブラリを使用する
  • クエリ結果から作成する
  • 外部データソースを参照するテーブルを定義する
  • データを読み込むときに作成する
  • CREATE TABLE DDL ステートメントを使用する

必要な権限

テーブルを作成するには、少なくとも次の権限が付与されている必要があります。

  • bigquery.tables.create(テーブルを作成する権限)
  • bigquery.tables.updateData(読み込みジョブ、クエリジョブ、コピージョブを使用してテーブルにデータを書き込む権限)
  • bigquery.jobs.create(クエリジョブ、読み込みジョブ、コピージョブを実行してテーブルにデータを書き込む権限)

テーブルに書き込むデータにアクセスするために、bigquery.tables.getData などの権限も必要になる場合があります。

bigquery.tables.create 権限および bigquery.tables.updateData 権限はいずれも、事前定義された以下の Cloud IAM の役割に含まれています。

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

bigquery.jobs.create 権限は、事前定義された以下の Cloud IAM の役割に含まれています。

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

また、bigquery.datasets.create 権限を持つユーザーがデータセットを作成すると、そのデータセットに対する bigquery.dataOwner アクセス権がユーザーに付与されます。bigquery.dataOwner アクセス権があれば、データセット内でテーブルを作成および更新できます。

BigQuery での Cloud IAM の役割と権限については、事前定義された役割と権限をご覧ください。

スキーマ定義を含む空のテーブルの作成

スキーマ定義を含む空のテーブルを作成すると、次のことができるようになります。

  • GCP Console または従来の BigQuery ウェブ UI を使用してスキーマを入力する
  • コマンドライン ツールを使用してインラインでスキーマを指定する
  • コマンドライン ツールを使用して JSON スキーマ ファイルを送信する
  • API の tables.insert メソッドを呼び出すときに、テーブル リソースでスキーマを指定する

テーブル スキーマの指定方法の詳細については、スキーマの指定をご覧ください。

テーブルを作成した後、そのテーブルへデータを入力するにはデータの読み込みまたはクエリ結果の書き込みを行います。

スキーマ定義を含む空のテーブルを作成するには、次の手順に従います。

Console

  1. GCP Console で BigQuery ウェブ UI を開きます。
    BigQuery ウェブ UI に移動

  2. ナビゲーション パネルの [リソース] セクションでプロジェクトを展開し、データセットを選択します。

  3. ウィンドウの右側の詳細パネルで、[テーブルを作成] をクリックします。

    テーブルの作成

  4. [テーブルの作成] ページの [ソース] セクションで、[空のテーブル] を選択します。

  5. [テーブルの作成] ページの [送信先] セクションで、次の操作を行います。

    • [データセット名] で、該当するデータセットを選択します。

      データセットを選択

    • [テーブル名] フィールドに、BigQuery で作成するテーブルの名前を入力します。

    • [テーブルタイプ] が [ネイティブ テーブル] に設定されていることを確認します。

  6. [スキーマ] セクションにスキーマ定義を入力します。

    • スキーマ情報を手動で入力します。

      • [テキストとして編集] を有効にし、テーブル スキーマを JSON 配列として入力します。

      • [フィールドを追加] を使用して、スキーマを手動で入力します。

  7. [パーティションとクラスタの設定] はデフォルト値(No partitioning)のままにします。

  8. [詳細オプション] セクションの [暗号化] の値は、デフォルト(Google-managed key)のままにします。BigQuery はデフォルトで、保存されているお客様のコンテンツを暗号化します。

  9. [テーブルを作成] をクリックします。

DDL

データ定義言語(DDL)ステートメントを使用すると、標準 SQL クエリ構文を使用してテーブルとビューの作成と変更ができます。

データ定義言語ステートメントの使用をご覧ください。

GCP Console で DDL ステートメントを使用してテーブルを作成するには、次の手順に従います。

  1. GCP Console で BigQuery ウェブ UI を開きます。
    GCP Console に移動する

  2. [クエリを新規作成] をクリックします。

  3. [クエリエディタ] テキスト領域に CREATE TABLE DDL ステートメントを入力します。

    次のクエリは、2020 年 1 月 1 日まで有効の、newtable という名前のテーブルを作成します。テーブルの説明は「2020 年に有効期限切れとなるテーブル」、テーブルのラベルは org_unit:development です。

     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 "2020-01-01 00:00:00 UTC",
       description="a table that expires in 2020",
       labels=[("org_unit", "development")]
     )

  4. (省略可)[展開] をクリックして [クエリの設定] を選択します。 クエリの設定

  5. (省略可)[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。処理を行うロケーションの設定を未指定のままにすると、該当するロケーションが自動的に検出されます。 クエリ処理のロケーション

  6. [実行] をクリックします。クエリが完了すると、テーブルが [リソース] ペインに表示されます。

従来の UI

  1. ナビゲーション内のデータセット名の横にある下矢印アイコン 下矢印アイコン をクリックし、[Create new table] をクリックします。

  2. [テーブルの作成] ページの [Source Data] セクションで、[Create empty table] をクリックします。

  3. [テーブルの作成] ページの [宛先テーブル] セクションで、次の操作を行います。

    • [テーブル名] で適切なデータセットを選択し、作成するテーブルの名前をテーブル名フィールドに入力します。
    • [テーブルタイプ] が [ネイティブ テーブル] に設定されていることを確認します。
  4. [Schema] セクションで、スキーマ定義を手動で入力します。

    • スキーマ情報は次の方法で手動で入力できます。

      • [テキストとして編集] をクリックし、テーブル スキーマを JSON 配列として入力します。

        スキーマを JSON 配列として追加する

      • [フィールドを追加] を使用してスキーマを入力します。

        追加フィールドを使用してスキーマを追加する

  5. [Options] セクションはデフォルト値のままにします。

    • パーティショニング タイプ: None
    • パーティショニング フィールド: - 使用不可
    • パーティション フィルタ を要求: - 使用不可
    • クラスタリング フィールド: - 使用不可
    • Destination Encryption: Default(デフォルトでは、BigQuery は Google が管理する鍵を使用して、お客様の保存済みコンテンツを暗号化します)
  6. [テーブルを作成] をクリックします。

CLI

--table または -t フラグを指定して mk コマンドを使用します。テーブル スキーマ情報は、インラインまたは JSON ファイルによって指定できます。次のオプション パラメータを使用できます。

  • --expiration
  • --description
  • --time_partitioning_type
  • --destination_kms_key
  • --label.

--time_partitioning_type--destination_kms_key はここでは説明しません。--time_partitioning_type の詳細については、取り込み時間パーティション分割テーブルまたはパーティション分割テーブルをご覧ください。--destination_kms_key の詳細については、顧客管理の暗号鍵をご覧ください。

デフォルト以外のプロジェクトでテーブルを作成する場合は、project_id:dataset の形式でプロジェクト ID をデータセットに追加します。

既存のデータセット内にスキーマ定義を含む空のテーブルを作成するには、以下を入力します。

bq mk \
--table \
--expiration integer \
--description description \
--label key:value, key:value \
project_id:dataset.table \
schema

ここで

  • integer は、テーブルのデフォルトの存続期間(秒)です。最小値は 3,600 秒(1 時間)です。現在の UTC 時間にこの整数値を足した値が、有効期限になります。テーブルの作成時に有効期限を設定した場合、データセットのデフォルトのテーブル有効期限設定は無視されます。
  • description は、テーブルの説明です。引用符で囲みます。
  • key:value は、ラベルを表す key:value ペアです。 カンマ区切りリストを使用して複数のラベルを入力できます。
  • project_id はプロジェクト ID です。
  • dataset は、プロジェクト内のデータセットです。
  • table は、作成するテーブルの名前です。
  • schema は、field:data_type,field:data_type という形式のインライン スキーマ定義か、ローカルマシン上の JSON スキーマ ファイルのパスです。

コマンドラインでスキーマを指定する場合、RECORDSTRUCT)型と列の説明を含めることはできません。また、列のモードも指定できません。すべてのモードはデフォルトの 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

テーブルを作成した後、テーブルの有効期限、説明、ラベルを更新できます。スキーマ定義を変更することもできます。

API

定義済みのテーブル リソースを使用して tables.insert メソッドを呼び出します。

C#

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の C# の設定手順を実施してください。詳細については、BigQuery C# API のリファレンス ドキュメントをご覧ください。


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryCreateTable
{
    public BigQueryTable CreateTable(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        var dataset = client.GetDataset(datasetId);
        // Create schema for new table.
        var schema = new TableSchemaBuilder
        {
            { "full_name", BigQueryDbType.String },
            { "age", BigQueryDbType.Int64 }
        }.Build();
        // Create the table
        return dataset.CreateTable(tableId: "your_table_id", schema: schema);
    }
}

Go

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。

sampleSchema := bigquery.Schema{
	{Name: "full_name", Type: bigquery.StringFieldType},
	{Name: "age", Type: bigquery.IntegerFieldType},
}

metaData := &bigquery.TableMetadata{
	Schema:         sampleSchema,
	ExpirationTime: time.Now().AddDate(1, 0, 0), // Table will be automatically deleted in 1 year.
}
tableRef := client.Dataset(datasetID).Table(tableID)
if err := tableRef.Create(ctx, metaData); err != nil {
	return err
}

Java

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

TableId tableId = TableId.of(datasetName, tableName);
// Table field definition
Field field = Field.of(fieldName, LegacySQLTypeName.STRING);
// Table schema definition
Schema schema = Schema.of(field);
TableDefinition tableDefinition = StandardTableDefinition.of(schema);
TableInfo tableInfo = TableInfo.newBuilder(tableId, tableDefinition).build();
Table table = bigquery.create(tableInfo);

Node.js

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。

// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function createTable() {
  // Creates a new table named "my_table" in "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // const tableId = "my_table";
  // const schema = 'Name:string, Age:integer, Weight:float, IsMagic:boolean';

  // For all options, see https://cloud.google.com/bigquery/docs/reference/v2/tables#resource
  const options = {
    schema: schema,
    location: 'US',
  };

  // Create a new table in the dataset
  const [table] = await bigquery
    .dataset(datasetId)
    .createTable(tableId, options);

  console.log(`Table ${table.id} created.`);
}

PHP

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の PHP の設定手順を実施してください。詳細については、BigQuery PHP API のリファレンス ドキュメントをご覧ください。

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $tableId = 'The BigQuery table ID';
// $fields = [
//    [
//        'name' => 'field1',
//        'type' => 'string',
//        'mode' => 'required'
//    ],
//    [
//        'name' => 'field2',
//        'type' => 'integer'
//    ],
//];

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$schema = ['fields' => $fields];
$table = $dataset->createTable($tableId, ['schema' => $schema]);
printf('Created table %s' . PHP_EOL, $tableId);

Python

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Python の設定手順を実施してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。

from google.cloud import bigquery

schema = [
    bigquery.SchemaField("full_name", "STRING", mode="REQUIRED"),
    bigquery.SchemaField("age", "INTEGER", mode="REQUIRED"),
]

# TODO(developer): Construct a BigQuery client object.
# client = bigquery.Client()

# TODO(developer): Set table_id to the ID of the table to create
# table_id = "your-project.your_dataset.your_table_name"

table = bigquery.Table(table_id, schema=schema)
table = client.create_table(table)  # API request
print(
    "Created table {}.{}.{}".format(table.project, table.dataset_id, table.table_id)
)

Ruby

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Ruby の設定手順を実施してください。詳細については、BigQuery Ruby API のリファレンス ドキュメントをご覧ください。

require "google/cloud/bigquery"

def create_table dataset_id = "my_dataset"
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  table_id = "my_table"

  table = dataset.create_table table_id do |updater|
    updater.string  "full_name", mode: :required
    updater.integer "age",       mode: :required
  end

  puts "Created table: #{table_id}"
end

クエリ結果からのテーブルの作成

クエリ結果からテーブルを作成するには、結果を宛先テーブルに書き込みます。

Console

  1. GCP Console で BigQuery ウェブ UI を開きます。

    GCP Console に移動する

  2. ナビゲーション パネルの [リソース] セクションでプロジェクトを展開し、データセットを選択します。

  3. クエリエディタが表示されていない場合は、ウィンドウの右上にある [エディタを表示] をクリックします。

  4. [クエリエディタ] テキスト領域に有効な SQL クエリを入力します。

  5. エディタの下にある [展開] をクリックし、[クエリの設定] を選択します。

    クエリの設定

  6. [クエリ結果の宛先テーブルを設定する] チェックボックスをオンにします。

    宛先の設定

  7. [送信先] セクションの [プロジェクト名] と [データセット名] でテーブルを作成するプロジェクトとデータセットをそれぞれ選択し、[テーブル名] に作成するテーブルの名前を設定します。

  8. [宛先テーブルの書き込み設定] セクションで、次のいずれかを選択します。

    • [空の場合に書き込む] - テーブルが空の場合にのみ、クエリ結果をテーブルに書き込みます。
    • [テーブルに追加する] - クエリ結果を既存のテーブルに追加します。
    • [テーブルを上書きする] - 既存のテーブルにクエリ結果を同じ名前で上書きします。
  9. (省略可)[処理を行うロケーション] で [自動選択] をクリックし、ロケーションを選択します。

  10. [クエリを実行] をクリックします。これにより、指定したテーブルにクエリ結果を書き込むクエリジョブが作成されます。

宛先テーブルを指定せずにクエリを実行した場合は、エディタの下にある [結果を保存する] ボタンをクリックすると、キャッシュされた結果テーブルを永続テーブルにコピーできます。

DDL

データ定義言語(DDL)ステートメントを使用すると、標準 SQL クエリ構文を使用してテーブルを作成および変更できます。

詳細については、CREATE TABLE ステートメントのページと、既存のテーブルからの新しいテーブルの作成CREATE TABLE の例をご覧ください。

従来の UI

  1. 従来の BigQuery ウェブ UI に移動します。
    従来の BigQuery ウェブ UI に移動

  2. [クエリを作成] ボタンをクリックします。

  3. [New Query] テキスト領域に有効な SQL クエリを入力します。

  4. [オプションを表示] をクリックします。

  5. [宛先テーブル] セクションで、[テーブルを選択] をクリックします。

  6. [宛先テーブルを選択] ダイアログで次の操作を行います。

    1. [プロジェクト] で、データセットとテーブルを保存するプロジェクトを選択します。

    2. [データセット] で、テーブルを保存するデータセットを選択します。

    3. [テーブル ID] フィールドにテーブル名を入力します。この名前はコピー先データセット内で一意である必要があります。テーブル名は最長 1,024 文字で、a~z、A~Z、0~9、_(アンダースコア文字)のみを使用できます。

    4. [OK] をクリックします。

  7. [宛先テーブル] セクションの [書き込み設定] で、次のいずれかを選択します。

    • [空の場合に書き込む] - テーブルが空の場合にのみ、クエリ結果をテーブルに書き込みます。
    • [テーブルに追加する] - クエリ結果を既存のテーブルに追加します。
    • [テーブルを上書きする] - 既存のテーブルにクエリ結果を同じ名前で上書きします。
  8. (省略可)[Processing Location] で [Unspecified] をクリックし、データのロケーションを選択します。

  9. [クエリを実行] をクリックします。これにより、指定したテーブルにクエリ結果を書き込むクエリジョブが作成されます。

宛先テーブルを指定せずにクエリを実行した場合は、結果ウィンドウの [Save as Table] ボタンをクリックすると、一時テーブルを永続テーブルにコピーできます。

CLI

クエリ結果に基づいて永続テーブルを作成するには、bq query コマンドを入力して、--destination_table フラグを指定します。標準 SQL 構文を使用するには、use_legacy_sql=false フラグを指定します。デフォルト プロジェクト以外のプロジェクトにあるテーブルにクエリ結果を書き込むには、project_id:dataset の形式でプロジェクト ID をデータセット名に追加します。

(省略可)--location フラグを指定して、その値をロケーションに設定します。

既存の宛先テーブルに対する書き込み処理を制御するには、次のオプション フラグのいずれかを指定します。

  • --append_table - 宛先テーブルが存在する場合、クエリ結果がそのテーブルに追加されます。
  • --replace - 宛先テーブルが存在する場合、そのテーブルはクエリ結果で上書きされます。
bq --location=location query \
--destination_table project_id:dataset.table \
--use_legacy_sql=false 'query'

ここで

  • location は、クエリの処理に使用するロケーションの名前です。--location フラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値を asia-northeast1 に設定します。ロケーションのデフォルト値は、.bigqueryrc ファイルを使用して設定できます。
  • project_id はプロジェクト ID です。
  • dataset は、クエリ結果を書き込むテーブルが含まれるデータセットの名前です。
  • table は、クエリ結果を書き込むテーブルの名前です。
  • query は、標準 SQL 構文のクエリです。

書き込み処理フラグが指定されていない場合は、デフォルトの動作として、テーブルが空の場合にのみ結果が書き込まれます。テーブルが存在していて空でない場合は、「BigQuery error in query operation: Error processing job project_id:bqjob_123abc456789_00000e1234f_1': Already Exists: Table project_id:dataset.table」というエラーが返されます。

例:

次のコマンドを入力すると、mydataset 内の mytable という分割テーブルにクエリ結果が書き込まれます。このデータセットはデフォルト プロジェクトにあります。コマンドに書き込み処理フラグは指定されていないため、宛先テーブルは新規または空である必要があります。それ以外の場合は、Already exists エラーが返されます。このクエリは、USA Name データという一般公開データセットからデータを取得します。

bq query \
--destination_table mydataset.mytable \
--use_legacy_sql=false \
'SELECT
  name,
  number
FROM
  `bigquery-public-data`.usa_names.usa_1910_current
WHERE
  gender = "M"
ORDER BY
  number DESC'

クエリ結果を使用して mydataset 内の mytable という名前の宛先テーブルを上書きするには、次のコマンドを入力します。このデータセットはデフォルト プロジェクトにあります。このコマンドには --replace フラグが指定されているため、宛先テーブルが上書きされます。

bq query \
--destination_table mydataset.mytable \
--replace \
--use_legacy_sql=false \
'SELECT
   name,
   number
 FROM
   `bigquery-public-data`.usa_names.usa_1910_current
 WHERE
   gender = "M"
 ORDER BY
   number DESC'
 

mydataset 内の mytable という名前の宛先テーブルにクエリ結果を追加するには、次のコマンドを入力します。このデータセットはデフォルト プロジェクトではなく my-other-project にあります。このコマンドには --append フラグが指定されているため、クエリ結果が宛先テーブルに追加されます。

bq query \
--append \
--use_legacy_sql=false \
--destination_table my-other-project:mydataset.mytable \
'SELECT
   name,
   number
 FROM
   `bigquery-public-data`.usa_names.usa_1910_current
 WHERE
   gender = "M"
 ORDER BY
   number DESC'
 

上記のそれぞれの例では、次のような出力が生成されます。読みやすくするために、出力の一部のみを示します。

Waiting on bqjob_r123abc456_000001234567_1 ... (2s) Current status: DONE
+---------+--------+
|  name   | number |
+---------+--------+
| Robert  |  10021 |
| John    |   9636 |
| Robert  |   9297 |
| ...              |
+---------+--------+

API

クエリ結果を永続テーブルに保存するには、jobs.insert メソッドを呼び出して query ジョブを構成し、destinationTable プロパティの値を含めます。既存の宛先テーブルに対する書き込み処理を制御するには、writeDisposition プロパティを構成します。

クエリジョブの処理を行うロケーションを制御するには、ジョブリソースjobReference セクションにある location プロパティを指定します。

Go

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")

q := client.Query("SELECT 17 as my_col")
q.Location = "US" // Location must match the dataset(s) referenced in query.
q.QueryConfig.Dst = client.Dataset(destDatasetID).Table(destTableID)
job, err := q.Run(ctx)
if err != nil {
	return err
}
status, err := job.Wait(ctx)
if err != nil {
	return err
}
if err := status.Err(); err != nil {
	return err
}
it, err := job.Read(ctx)
for {
	var row []bigquery.Value
	err := it.Next(&row)
	if err == iterator.Done {
		break
	}
	if err != nil {
		return err
	}
	fmt.Println(row)
}

Java

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

クエリの結果を永続テーブルに保存するには、QueryJobConfiguration宛先テーブルを目的の TableId に設定します。

// BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
// String destinationDataset = 'my_destination_dataset';
// String destinationTable = 'my_destination_table';
String query = "SELECT corpus FROM `bigquery-public-data.samples.shakespeare` GROUP BY corpus;";
QueryJobConfiguration queryConfig =
    // Note that setUseLegacySql is set to false by default
    QueryJobConfiguration.newBuilder(query)
        // Save the results of the query to a permanent table.
        .setDestinationTable(TableId.of(destinationDataset, destinationTable))
        .build();

// Print the results.
for (FieldValueList row : bigquery.query(queryConfig).iterateAll()) {
  for (FieldValue val : row) {
    System.out.printf("%s,", val.toString());
  }
  System.out.printf("\n");
}

Python

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Python の設定手順を実施してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。

クエリ結果を永続テーブルに保存するには、QueryJobConfig を作成し、宛先を目的の TableReference に設定します。そのジョブ構成を query メソッドに渡します。

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'your_dataset_id'

job_config = bigquery.QueryJobConfig()
# Set the destination table
table_ref = client.dataset(dataset_id).table('your_table_id')
job_config.destination = table_ref
sql = """
    SELECT corpus
    FROM `bigquery-public-data.samples.shakespeare`
    GROUP BY corpus;
"""

# Start the query, passing in the extra configuration.
query_job = client.query(
    sql,
    # Location must match that of the dataset(s) referenced in the query
    # and of the destination table.
    location='US',
    job_config=job_config)  # API request - starts the query

query_job.result()  # Waits for the query to finish
print('Query results loaded to table {}'.format(table_ref.path))

外部データソースを参照するテーブルの作成

外部データソース(フェデレーション データソースとも呼ばれます)は、データが BigQuery に格納されていない場合でも直接クエリできるデータソースです。データの読み込みまたはストリーミングの代わりに、外部データソースを参照するテーブルを作成します。

BigQuery では、次のデータに対して直接クエリを実行できます。

外部データソースに格納されているデータを参照する一時または永続テーブルを作成することにより、サポートされている外部データソース内のデータに対してクエリを実行できます。外部データソースの操作の詳細については、次をご覧ください。

データを読み込むときにテーブルを作成

BigQuery にデータを読み込むときに、新しいテーブルかパーティションにデータを読み込むことができます。また、既存のテーブルやパーティションにデータを追記したり、テーブルやパーティションを上書きすることもできます。データを読み込む前に空のテーブルを作成する必要はありません。新しいテーブルの作成とデータの読み込みを同時に行うことができます。

BigQuery にデータを読み込むとき、テーブルまたはパーティションのスキーマを指定できます。また、サポートされているデータ形式であれば、スキーマの自動検出を使用できます。

データの読み込みの詳細については、BigQuery へのデータの読み込みの概要をご覧ください。

テーブルへのアクセスの制御

テーブルやビューにアクセス制御を直接割り当てることはできません。アクセス権を付与できる BigQuery リソースの最下位レベルは、データセット レベルです。テーブルやビューへのアクセス権を構成するには、データセット レベル以上のエンティティに Cloud IAM の役割を付与します。

データセット レベルで役割を付与すると、そのデータセットに含まれるテーブルやビューに対してエンティティが実行できるオペレーションが特定されます。データセット レベルのアクセス制御を構成する方法については、データセットへのアクセスの制御をご覧ください。

Google Cloud Platform リソース階層でデータセットよりも高位のレベル(プロジェクト レベル、フォルダレベル、組織レベルなど)で Cloud IAM の役割を付与することもできます。高位のレベルで役割を付与すると、より広範なリソースへのアクセス権がエンティティに付与されます。たとえば、プロジェクト レベルでエンティティに役割を付与すると、そのエンティティには、プロジェクトに含まれるすべてのデータセットに適用される権限が付与されます。リソースへのアクセス権を付与する方法については、Cloud IAM ドキュメントのリソースへのアクセス権の付与、変更、取り消しをご覧ください。

Cloud IAM のカスタムの役割を作成することもできます。カスタムの役割を作成する場合、エンティティに実行を許可する特定のオペレーションによって、付与する権限は異なります。

役割と権限の詳細については、以下をご覧ください。

テーブルの使用

テーブルに関する情報の取得

テーブルに関する情報またはメタデータは、次の方法で入手できます。

  • GCP Console または従来の BigQuery ウェブ UI の使用
  • bq show CLI コマンドの使用
  • tables.get API メソッドを呼び出す
  • クライアント ライブラリの使用
  • INFORMATION_SCHEMA ビューのクエリ(ベータ版

必要な権限

テーブルに関する情報を取得するには、少なくとも bigquery.tables.get 権限が付与されている必要があります。bigquery.tables.get 権限は、事前定義された以下の Cloud IAM の役割に含まれています。

  • bigquery.metadataViewer
  • bigquery.dataViewer
  • bigquery.dataOwner
  • bigquery.dataEditor
  • bigquery.admin

また、bigquery.datasets.create 権限を持つユーザーがデータセットを作成すると、そのデータセットに対する bigquery.dataOwner アクセス権がユーザーに付与されます。bigquery.dataOwner アクセス権により、ユーザーはテーブルのメタデータを取得できます。

BigQuery での Cloud IAM の役割と権限については、アクセス制御をご覧ください。

テーブルの情報の取得

テーブルに関する情報を取得するには、次の手順に従います。

Console

  1. ナビゲーション パネルの [リソース] セクションでプロジェクトを展開し、データセットを選択します。データセット名をクリックして展開します。これにより、データセット内のテーブルとビューが表示されます。

  2. テーブル名をクリックします。

  3. エディタの下にある [詳細] をクリックします。表示されるページに、テーブルの説明とテーブル情報が示されます。

  4. テーブルのスキーマ定義を表示するには、[スキーマ] タブをクリックします。

従来の UI

  1. ナビゲーション パネルで、データセットの左側にある下矢印アイコン 下矢印アイコン をクリックして展開するか、データセット名をダブルクリックします。これにより、データセット内のテーブルとビューが表示されます。

  2. テーブル名をクリックします。

  3. [詳細] をクリックします。[Table Details] ページに、テーブルの説明とテーブル情報が表示されます。

    テーブルの詳細の表示

  4. テーブルのスキーマ定義を表示するには、[スキーマ] タブをクリックします。

CLI

すべてのテーブル情報を表示するには、bq show コマンドを発行します。テーブルのスキーマ情報のみを表示するには、--schema フラグを使用します。--format フラグを使用して出力を制御できます。

デフォルト以外のプロジェクトにあるテーブルの情報を取得する場合は、project_id:dataset の形式でプロジェクト ID をデータセットに追加します。

bq show \
--schema \
--format=prettyjson \
project_id:dataset.table

ここで

  • project_id はプロジェクト ID です。
  • dataset は、データセットの名前です。
  • table は、テーブルの名前です。

例:

次のコマンドを入力して、mydataset にある mytable に関するすべての情報を表示します。mydataset はデフォルト プロジェクトにあります。

bq show --format=prettyjson mydataset.mytable

次のコマンドを入力して、mydataset にある mytable に関するすべての情報を表示します。mydataset はデフォルト プロジェクトではなく myotherproject にあります。

bq show --format=prettyjson myotherproject:mydataset.mytable

mydataset 内の mytable に関するスキーマ情報のみを表示するには、次のコマンドを入力します。mydataset はデフォルト プロジェクトではなく myotherproject にあります。

bq show --schema --format=prettyjson myotherproject:mydataset.mytable

API

tables.get メソッドを呼び出し、関連パラメータを指定します。

Go

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。

meta, err := client.Dataset(datasetID).Table(tableID).Metadata(ctx)
if err != nil {
	return err
}
// Print basic information about the table.
fmt.Printf("Schema has %d top-level fields\n", len(meta.Schema))
fmt.Printf("Description: %s\n", meta.Description)
fmt.Printf("Row in managed storage: %d\n", meta.NumRows)

Java

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

TableId tableId = TableId.of(projectId, datasetName, tableName);
Table table = bigquery.getTable(tableId);

PHP

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の PHP の設定手順を実施してください。詳細については、BigQuery PHP API のリファレンス ドキュメントをご覧ください。

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
//$projectId = 'The Google project ID';
//$datasetId = 'The BigQuery dataset ID';
//$tableId   = 'The BigQuery table ID';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table($tableId);

Python

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Python の設定手順を実施してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。

from google.cloud import bigquery

# TODO(developer): Construct a BigQuery client object.
# client = bigquery.Client()

# TODO(developer): Set table_id to the ID of the model to fetch.
# table_id = 'your-project.your_dataset.your_table'

table = client.get_table(table_id)

print(
    "Got table '{}.{}.{}'.".format(table.project, table.dataset_id, table.table_id)
)

# View table properties
print("Table schema: {}".format(table.schema))
print("Table description: {}".format(table.description))
print("Table has {} rows".format(table.num_rows))

INFORMATION_SCHEMA を使用したテーブル情報の取得(ベータ版

INFORMATION_SCHEMA は、データセット、テーブル、ビューに関するメタデータへのアクセスを提供する一連のビューです。

INFORMATION_SCHEMA.TABLES および INFORMATION_SCHEMA.TABLE_OPTIONS ビューにクエリを実行し、プロジェクト内のテーブルとビューに関するメタデータを取得できます。INFORMATION_SCHEMA.COLUMNS および INFORMATION_SCHEMA.COLUMN_FIELD_PATHS ビューにクエリを実行し、テーブル内の列(フィールド)に関するメタデータを取得することもできます。

TABLESTABLE_OPTIONS ビューには、ビューに関する概要情報も含まれています。詳細情報を取得するには、INFORMATION_SCHEMA.VIEWS ビューに対してクエリを実行します。

TABLES ビュー

INFORMATION_SCHEMA.TABLES ビューにクエリを実行すると、クエリ結果として、データセット内のテーブルまたはビューごとに 1 行が表示されます。

INFORMATION_SCHEMA.TABLES ビューに対するクエリでは、データセット修飾子を指定する必要があります。また、クエリを発行するには、テーブルまたはビューの格納先であるデータセットへのアクセス権が必要です。

INFORMATION_SCHEMA.TABLES ビューのスキーマは次のとおりです。

列名 データ型
TABLE_CATALOG STRING データセットを含むプロジェクトの名前
TABLE_SCHEMA STRING datasetId とも呼ばれる、テーブルやビューを含むデータセットの名前
TABLE_NAME STRING tableId とも呼ばれる、テーブルまたはビューの名前
TABLE_TYPE STRING 次のテーブルタイプ:
IS_INSERTABLE_INTO STRING YES または NO(テーブルが DML INSERT ステートメントに対応しているかどうかによる)
IS_TYPED STRING 値は常に NO
CREATION_TIME TIMESTAMP テーブルの作成時間

データセット プロパティの詳細については、REST API ドキュメントのデータセット リソースのページをご覧ください。テーブルとビューのプロパティの詳細については、REST API ドキュメントのテーブル リソースのページをご覧ください。

例 1:

次の例では、今後の使用のために予約されている is_typed を除き、すべての列を INFORMATION_SCHEMA.TABLES ビューから取得します。デフォルト プロジェクト(myproject)にある mydataset 内のすべてのテーブルに対するメタデータが返されます。

mydataset には、次のテーブルが含まれています。

  • mytable1: 標準の BigQuery テーブル
  • myview1: BigQuery のビュー

INFORMATION_SCHEMA.TABLES ビューに対するクエリでは、データセット修飾子を指定する必要があります。また、クエリを発行するには、テーブルの格納先であるデータセットへのアクセス権が必要です。

デフォルト プロジェクト以外のプロジェクトに対してクエリを実行するには、この形式 `project_id`.dataset.INFORMATION_SCHEMA.view でそのプロジェクト ID をデータセットに追加します。例: `myproject`.mydataset.INFORMATION_SCHEMA.TABLES

クエリを実行するには、次の手順に従います。

Console

  1. GCP Console で BigQuery ウェブ UI を開きます。

    GCP Console に移動する

  2. [クエリエディタ] ボックスに、次の標準 SQL クエリを入力します。INFORMATION_SCHEMA では標準 SQL 構文が必要です。標準 SQL は GCP Console のデフォルトの構文です。

    SELECT
     * EXCEPT(is_typed)
    FROM
     mydataset.INFORMATION_SCHEMA.TABLES
    
  3. [実行] をクリックします。

CLI

query コマンドで、--nouse_legacy_sql または --use_legacy_sql=false フラグを使用して標準 SQL 構文を指定します。INFORMATION_SCHEMA クエリには標準 SQL 構文が必要です。

クエリを実行するには、以下を入力します。

bq query --nouse_legacy_sql \
'SELECT
   * EXCEPT(is_typed)
 FROM
   mydataset.INFORMATION_SCHEMA.TABLES'

結果は次のようになります。

  +----------------+---------------+----------------+------------+--------------------+---------------------+
  | table_catalog  | table_schema  |   table_name   | table_type | is_insertable_into |    creation_time    |
  +----------------+---------------+----------------+------------+--------------------+---------------------+
  | myproject      | mydataset     | mytable1       | BASE TABLE | YES                | 2018-10-29 20:34:44 |
  | myproject      | mydataset     | myview1        | VIEW       | NO                 | 2018-12-29 00:19:20 |
  +----------------+---------------+----------------+------------+--------------------+---------------------+
  

例 2:

次の例では、INFORMATION_SCHEMA.TABLES ビューからタイプが BASE TABLE のすべてのテーブルを取得します。is_typed 列は除外されます。デフォルト プロジェクト(myproject)にある mydataset のテーブルに対するメタデータが返されます。

INFORMATION_SCHEMA.TABLES ビューに対するクエリでは、データセット修飾子を指定する必要があります。また、クエリを発行するには、テーブルの格納先であるデータセットへのアクセス権が必要です。

デフォルト プロジェクト以外のプロジェクトに対してクエリを実行するには、この形式 `project_id`.dataset.INFORMATION_SCHEMA.view でそのプロジェクト ID をデータセットに追加します。例: `myproject`.mydataset.INFORMATION_SCHEMA.TABLES

クエリを実行するには、次の手順に従います。

Console

  1. GCP Console で BigQuery ウェブ UI を開きます。

    GCP Console に移動する

  2. [クエリエディタ] ボックスに、次の標準 SQL クエリを入力します。INFORMATION_SCHEMA では標準 SQL 構文が必要です。標準 SQL は GCP Console のデフォルトの構文です。

    SELECT
     * EXCEPT(is_typed)
    FROM
     mydataset.INFORMATION_SCHEMA.TABLES
    WHERE
     table_type="BASE TABLE"
    
  3. [実行] をクリックします。

CLI

query コマンドで、--nouse_legacy_sql または --use_legacy_sql=false フラグを使用して標準 SQL 構文を指定します。INFORMATION_SCHEMA クエリには標準 SQL 構文が必要です。

クエリを実行するには、以下を入力します。

bq query --nouse_legacy_sql \
'SELECT
   * EXCEPT(is_typed)
 FROM
   mydataset.INFORMATION_SCHEMA.TABLES
 WHERE
   table_type="BASE TABLE"'

結果は次のようになります。

  +----------------+---------------+----------------+------------+--------------------+---------------------+
  | table_catalog  | table_schema  |   table_name   | table_type | is_insertable_into |    creation_time    |
  +----------------+---------------+----------------+------------+--------------------+---------------------+
  | myproject      | mydataset     | mytable1       | BASE TABLE | NO                 | 2018-10-31 22:40:05 |
  +----------------+---------------+----------------+------------+--------------------+---------------------+
  

TABLE_OPTIONS ビュー

INFORMATION_SCHEMA.TABLE_OPTIONS ビューにクエリを実行すると、クエリ結果として、データセット内のテーブルまたはビューごとに 1 行が表示されます。

INFORMATION_SCHEMA.TABLE_OPTIONS ビューに対するクエリでは、データセット修飾子を指定する必要があります。また、クエリを発行するには、テーブルまたはビューの格納先であるデータセットへのアクセス権が必要です。

INFORMATION_SCHEMA.TABLE_OPTIONS ビューのスキーマは次のとおりです。

列名 データ型
TABLE_CATALOG STRING データセットを含むプロジェクトの名前
TABLE_SCHEMA STRING datasetId とも呼ばれる、テーブルやビューを含むデータセットの名前
TABLE_NAME STRING tableId とも呼ばれる、テーブルまたはビューの名前
OPTION_NAME STRING オプション テーブル内の名前の値の 1 つ
OPTION_TYPE STRING オプション テーブルのデータ型の値の 1 つ
OPTION_VALUE STRING オプション テーブルの値オプションの 1 つ
オプション テーブル
OPTION_NAME OPTION_TYPE OPTION_VALUE
partition_expiration_days FLOAT64 パーティション分割テーブルのすべてのパーティションのデフォルトの存続期間(日数)
expiration_timestamp FLOAT64 テーブルのデフォルトの存続期間(日数)
kms_key_name STRING テーブルの暗号化に使用される Cloud KMS 鍵の名前
friendly_name STRING テーブルの記述名
description STRING テーブルの説明
labels ARRAY<STRUCT<STRING, STRING>> テーブルのラベルを表す STRUCT の配列

データセット プロパティの詳細については、REST API ドキュメントのデータセット リソースのページをご覧ください。テーブルとビューのプロパティの詳細については、REST API ドキュメントのテーブル リソースのページをご覧ください。

例 1:

次の例では、INFORMATION_SCHEMA.TABLE_OPTIONS ビューにクエリを実行して、デフォルト プロジェクト(myproject)にある mydataset の全テーブルのデフォルトのテーブル有効期限を取得します。

INFORMATION_SCHEMA.TABLE_OPTIONS ビューに対するクエリでは、データセット修飾子を指定する必要があります。また、クエリを発行するには、テーブルの格納先であるデータセットへのアクセス権が必要です。

デフォルト プロジェクト以外のプロジェクトに対してクエリを実行するには、この形式 `project_id`.dataset.INFORMATION_SCHEMA.view でそのプロジェクト ID をデータセットに追加します。例: `myproject`.mydataset.INFORMATION_SCHEMA.TABLE_OPTIONS

クエリを実行するには、次の手順に従います。

Console

  1. GCP Console で BigQuery ウェブ UI を開きます。

    GCP Console に移動する

  2. [クエリエディタ] ボックスに、次の標準 SQL クエリを入力します。INFORMATION_SCHEMA では標準 SQL 構文が必要です。標準 SQL は GCP Console のデフォルトの構文です。

    SELECT
     *
    FROM
     mydataset.INFORMATION_SCHEMA.TABLE_OPTIONS
    WHERE
     option_name="expiration_timestamp"
    
  3. [実行] をクリックします。

CLI

query コマンドで、--nouse_legacy_sql または --use_legacy_sql=false フラグを使用して標準 SQL 構文を指定します。INFORMATION_SCHEMA クエリには標準 SQL 構文が必要です。

クエリを実行するには、以下を入力します。

bq query --nouse_legacy_sql \
'SELECT
   *
 FROM
   mydataset.INFORMATION_SCHEMA.TABLE_OPTIONS
 WHERE
   option_name="expiration_timestamp"'

結果は次のようになります。

  +----------------+---------------+------------+----------------------+-------------+--------------------------------------+
  | table_catalog  | table_schema  | table_name |     option_name      | option_type |             option_value             |
  +----------------+---------------+------------+----------------------+-------------+--------------------------------------+
  | myproject      | mydataset     | mytable1   | expiration_timestamp | TIMESTAMP   | TIMESTAMP "2020-01-16T21:12:28.000Z" |
  | myproject      | mydataset     | mytable2   | expiration_timestamp | TIMESTAMP   | TIMESTAMP "2021-01-01T21:12:28.000Z" |
  +----------------+---------------+------------+----------------------+-------------+--------------------------------------+
  

例 2:

次の例では、mydataset 内のすべてのテーブルから、テストデータを含むテーブルを絞り込んでそのメタデータを取得します。このクエリでは、説明に「test」が含まれているテーブルを見つけるために description オプションの値を使用します。mydataset はデフォルト プロジェクト(myproject)にあります。

デフォルト プロジェクト以外のプロジェクトに対してクエリを実行するには、この形式 `project_id`.dataset.INFORMATION_SCHEMA.view でそのプロジェクト ID をデータセットに追加します。例: `myproject`.mydataset.INFORMATION_SCHEMA.TABLE_OPTIONS

クエリを実行するには、次の手順に従います。

Console

  1. GCP Console で BigQuery ウェブ UI を開きます。

    GCP Console に移動する

  2. [クエリエディタ] ボックスに、次の標準 SQL クエリを入力します。INFORMATION_SCHEMA では標準 SQL 構文が必要です。標準 SQL は GCP Console のデフォルトの構文です。

    SELECT
     *
    FROM
     mydataset.INFORMATION_SCHEMA.TABLE_OPTIONS
    WHERE
     option_name="description" AND option_value LIKE "%test%"
    
  3. [実行] をクリックします。

CLI

query コマンドで、--nouse_legacy_sql または --use_legacy_sql=false フラグを使用して標準 SQL 構文を指定します。INFORMATION_SCHEMA クエリには標準 SQL 構文が必要です。

クエリを実行するには、以下を入力します。

bq query --nouse_legacy_sql \
'SELECT
   *
 FROM
   mydataset.INFORMATION_SCHEMA.TABLE_OPTIONS
 WHERE
   option_name="description" AND option_value LIKE "%test%"'

結果は次のようになります。

  +----------------+---------------+------------+-------------+-------------+--------------+
  | table_catalog  | table_schema  | table_name | option_name | option_type | option_value |
  +----------------+---------------+------------+-------------+-------------+--------------+
  | myproject      | mydataset     | mytable1   | description | STRING      | "test data"  |
  | myproject      | mydataset     | mytable2   | description | STRING      | "test data"  |
  +----------------+---------------+------------+-------------+-------------+--------------+
  

COLUMNS ビュー

INFORMATION_SCHEMA.COLUMNS ビューにクエリを実行すると、クエリ結果として、テーブル内の列(フィールド)ごとに 1 行が表示されます。

INFORMATION_SCHEMA.COLUMNS ビューに対するクエリでは、データセット修飾子を指定する必要があります。また、クエリを発行するには、テーブルの格納先であるデータセットへのアクセス権が必要です。

INFORMATION_SCHEMA.COLUMNS ビューのスキーマは次のとおりです。

列名 データ型
TABLE_CATALOG STRING データセットを含むプロジェクトの名前
TABLE_SCHEMA STRING datasetId とも呼ばれる、テーブルを含むデータセットの名前
TABLE_NAME STRING tableId とも呼ばれる、テーブルまたはビューの名前
COLUMN_NAME STRING 列の名前
ORDINAL_POSITION INT64 テーブル内の列の 1 から始まるオフセット。_PARTITIONTIME や _PARTITIONDATE などの疑似列の場合、値は NULL
IS_NULLABLE STRING YES または NO(列のモードが NULL 値を許可するかどうかによる)
DATA_TYPE STRING 列の標準 SQL データ型
IS_GENERATED STRING 値は常に NEVER
GENERATION_EXPRESSION STRING 値は常に NULL
IS_STORED STRING 値は常に NULL
IS_HIDDEN STRING YES または NO(列が _PARTITIONTIME や _PARTITIONDATE などの疑似列であるかどうかによる)
IS_UPDATABLE STRING 値は常に NULL
IS_SYSTEM_DEFINED STRING YES または NO(列が _PARTITIONTIME や _PARTITIONDATE などの疑似列であるかどうかによる)
IS_PARTITIONING_COLUMN STRING YES または NO(列がパーティショニング列かどうかによる)
CLUSTERING_ORDINAL_POSITION STRING テーブルのクラスタリング列内の列の 1 から始まるオフセット。テーブルがクラスタ化テーブルでない場合、値は NULL

データセット プロパティの詳細については、REST API ドキュメントのデータセット リソースのページをご覧ください。テーブルとビューのプロパティの詳細については、REST API ドキュメントのテーブル リソースのページをご覧ください。

次の例では、census_bureau_usa データセットにある population_by_zip_2010 テーブルの INFORMATION_SCHEMA.COLUMNS ビューからメタデータを取得しています。このデータセットは、BigQuery の一般公開データセット プログラムの一部です。

クエリ対象のテーブルは別のプロジェクト(bigquery-public-data プロジェクト)にあるため、この形式 `project_id`.dataset.INFORMATION_SCHEMA.view でプロジェクト ID をデータセットに追加します。例: `bigquery-public-data`.census_bureau_usa.INFORMATION_SCHEMA.TABLES

次の列は現時点で将来用に予約されているため、クエリ結果から除外されます。

  • IS_GENERATED
  • GENERATION_EXPRESSION
  • IS_STORED
  • IS_UPDATABLE

INFORMATION_SCHEMA.COLUMNS ビューに対するクエリでは、データセット修飾子を指定する必要があります。また、クエリを発行するには、テーブルの格納先であるデータセットへのアクセス権が必要です。

クエリを実行するには、次の手順に従います。

Console

  1. GCP Console で BigQuery ウェブ UI を開きます。

    GCP Console に移動する

  2. [クエリエディタ] ボックスに、次の標準 SQL クエリを入力します。INFORMATION_SCHEMA では標準 SQL 構文が必要です。標準 SQL は GCP Console のデフォルトの構文です。

    SELECT
     * EXCEPT(is_generated, generation_expression, is_stored, is_updatable)
    FROM
     `bigquery-public-data`.census_bureau_usa.INFORMATION_SCHEMA.COLUMNS
    WHERE
     table_name="population_by_zip_2010"
    
  3. [実行] をクリックします。

CLI

query コマンドで、--nouse_legacy_sql または --use_legacy_sql=false フラグを使用して標準 SQL 構文を指定します。INFORMATION_SCHEMA クエリには標準 SQL 構文が必要です。

クエリを実行するには、以下を入力します。

bq query --nouse_legacy_sql \
'SELECT
   * EXCEPT(is_generated, generation_expression, is_stored, is_updatable)
 FROM
   `bigquery-public-data`.census_bureau_usa.INFORMATION_SCHEMA.COLUMNS
 WHERE
   table_name="population_by_zip_2010"'

結果は次のようになります。読みやすくするために table_catalogtable_schema は結果から除外されます。

+------------------------+-------------+------------------+-------------+-----------+-----------+-------------------+------------------------+-----------------------------+
|       table_name       | column_name | ordinal_position | is_nullable | data_type | is_hidden | is_system_defined | is_partitioning_column | clustering_ordinal_position |
+------------------------+-------------+------------------+-------------+-----------+-----------+-------------------+------------------------+-----------------------------+
| population_by_zip_2010 | zipcode     |                1 | NO          | STRING    | NO        | NO                | NO                     |                        NULL |
| population_by_zip_2010 | geo_id      |                2 | YES         | STRING    | NO        | NO                | NO                     |                        NULL |
| population_by_zip_2010 | minimum_age |                3 | YES         | INT64     | NO        | NO                | NO                     |                        NULL |
| population_by_zip_2010 | maximum_age |                4 | YES         | INT64     | NO        | NO                | NO                     |                        NULL |
| population_by_zip_2010 | gender      |                5 | YES         | STRING    | NO        | NO                | NO                     |                        NULL |
| population_by_zip_2010 | population  |                6 | YES         | INT64     | NO        | NO                | NO                     |                        NULL |
+------------------------+-------------+------------------+-------------+-----------+-----------+-------------------+------------------------+-----------------------------+
  

COLUMN_FIELD_PATHS ビュー

INFORMATION_SCHEMA.COLUMN_FIELD_PATHS ビューにクエリを実行すると、クエリ結果として、RECORD(またはSTRUCT)列内でネストされた列ごとに 1 行が表示されます。

INFORMATION_SCHEMA.COLUMN_FIELD_PATHS ビューに対するクエリでは、データセット修飾子を指定する必要があります。また、クエリを発行するには、テーブルの格納先であるデータセットへのアクセス権が必要です。

INFORMATION_SCHEMA.COLUMN_FIELD_PATHS ビューのスキーマは次のとおりです。

列名 データ型
TABLE_CATALOG >STRING データセットを含むプロジェクトの名前
TABLE_SCHEMA STRING datasetId とも呼ばれる、テーブルを含むデータセットの名前
TABLE_NAME STRING tableId とも呼ばれる、テーブルまたはビューの名前
COLUMN_NAME STRING 列の名前
FIELD_PATH STRING RECORD 列または STRUCT 列内でネストされた列のパス
DATA_TYPE STRING 列の標準 SQL データ型
DESCRIPTION STRING 列の説明

データセット プロパティの詳細については、REST API ドキュメントのデータセット リソースのページをご覧ください。テーブルとビューのプロパティの詳細については、REST API ドキュメントのテーブル リソースのページをご覧ください。

次の例では、github_repos データセットにある commits テーブルの INFORMATION_SCHEMA.COLUMN_FIELD_PATHS ビューからメタデータを取得しています。このデータセットは、BigQuery の一般公開データセット プログラムの一部です。

クエリ対象のテーブルは別のプロジェクト(bigquery-public-data プロジェクト)にあるため、この形式 `project_id`.dataset.INFORMATION_SCHEMA.view でプロジェクト ID をデータセットに追加します。例: `bigquery-public-data`.github_repos.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS

commits テーブルには、以下のネストされた列と、ネストされた繰り返し列があります。

  • author: ネストされた RECORD
  • committer: ネストされた RECORD
  • trailer: ネストされた繰り返しの RECORD
  • difference: ネストされた繰り返しの RECORD

クエリでは、author 列と difference 列に関するメタデータを取得します。

INFORMATION_SCHEMA.COLUMN_FIELD_PATHS ビューに対するクエリでは、データセット修飾子を指定する必要があります。また、クエリを発行するには、テーブルの格納先であるデータセットへのアクセス権が必要です。

クエリを実行するには、次の手順に従います。

Console

  1. GCP Console で BigQuery ウェブ UI を開きます。

    GCP Console に移動する

  2. [クエリエディタ] ボックスに、次の標準 SQL クエリを入力します。INFORMATION_SCHEMA では標準 SQL 構文が必要です。標準 SQL は GCP Console のデフォルトの構文です。

    SELECT
     *
    FROM
     `bigquery-public-data`.github_repos.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS
    WHERE
     table_name="commits"
     AND column_name="author"
     OR column_name="difference"
    
  3. [実行] をクリックします。

CLI

query コマンドで、--nouse_legacy_sql または --use_legacy_sql=false フラグを使用して標準 SQL 構文を指定します。INFORMATION_SCHEMA クエリには標準 SQL 構文が必要です。

クエリを実行するには、以下を入力します。

bq query --nouse_legacy_sql \
'SELECT
   *
 FROM
   `bigquery-public-data`.github_repos.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS
 WHERE
   table_name="commits"
   AND column_name="author"
   OR column_name="difference"'

結果は次のようになります。読みやすくするために table_catalogtable_schema は結果から除外されます。

  +------------+-------------+---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------+
  | table_name | column_name |     field_path      |                                                                      data_type                                                                      | description |
  +------------+-------------+---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------+
  | commits    | author      | author              | STRUCT<name STRING, email STRING, time_sec INT64, tz_offset INT64, date TIMESTAMP>                                                                  | NULL        |
  | commits    | author      | author.name         | STRING                                                                                                                                              | NULL        |
  | commits    | author      | author.email        | STRING                                                                                                                                              | NULL        |
  | commits    | author      | author.time_sec     | INT64                                                                                                                                               | NULL        |
  | commits    | author      | author.tz_offset    | INT64                                                                                                                                               | NULL        |
  | commits    | author      | author.date         | TIMESTAMP                                                                                                                                           | NULL        |
  | commits    | difference  | difference          | ARRAY<STRUCT<old_mode INT64, new_mode INT64, old_path STRING, new_path STRING, old_sha1 STRING, new_sha1 STRING, old_repo STRING, new_repo STRING>> | NULL        |
  | commits    | difference  | difference.old_mode | INT64                                                                                                                                               | NULL        |
  | commits    | difference  | difference.new_mode | INT64                                                                                                                                               | NULL        |
  | commits    | difference  | difference.old_path | STRING                                                                                                                                              | NULL        |
  | commits    | difference  | difference.new_path | STRING                                                                                                                                              | NULL        |
  | commits    | difference  | difference.old_sha1 | STRING                                                                                                                                              | NULL        |
  | commits    | difference  | difference.new_sha1 | STRING                                                                                                                                              | NULL        |
  | commits    | difference  | difference.old_repo | STRING                                                                                                                                              | NULL        |
  | commits    | difference  | difference.new_repo | STRING                                                                                                                                              | NULL        |
  +------------+-------------+---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------+
  

データセット内のテーブルの一覧表示

データセット内のテーブルは、次の方法で一覧表示できます。

  • GCP Console または従来の BigQuery ウェブ UI の使用
  • bq ls CLI コマンドの使用
  • tables.list API メソッドを呼び出す
  • クライアント ライブラリの使用

必要な権限

データセットに含まれるテーブルを一覧表示するには、少なくとも bigquery.tables.list 権限が付与されている必要があります。bigquery.tables.list 権限は、事前定義された以下の Cloud IAM の役割に含まれています。

  • bigquery.user
  • bigquery.metadataViewer
  • bigquery.dataViewer
  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

BigQuery での Cloud IAM の役割と権限については、アクセス制御をご覧ください。

テーブルの一覧表示

データセット内のテーブルを一覧表示するには、次の手順に従います。

Console

  1. GCP Console のナビゲーション パネルで、データセット名をクリックして展開します。これにより、データセット内のテーブルとビューが表示されます。

  2. リストをスクロールして、データセット内のテーブルを表示します。テーブルとビューはアイコンで区別できます。

従来の UI

  1. ナビゲーション パネルのウェブ UI で、データセットの左側にある下矢印アイコン 下矢印アイコン をクリックして展開するか、データセット名をダブルクリックします。これにより、データセット内のテーブルとビューが表示されます。

  2. リストをスクロールして、データセット内のテーブルを表示します。テーブルとビューはアイコンで区別できます。

    テーブルの表示

CLI

bq ls コマンドを発行します。--format フラグを使用して出力を制御できます。デフォルト プロジェクト以外のプロジェクトにあるテーブルを一覧表示する場合は、project_id:dataset の形式でプロジェクト ID をデータセットに追加します。

その他のフラグ

  • --max_results または -n : 結果の最大数を示す整数。デフォルト値は 50 です。
bq ls \
--format=pretty \
--max_results integer \
project_id:dataset

ここで

  • integer は、一覧表示するテーブルの数を表す整数です。
  • project_id はプロジェクト ID です。
  • dataset は、データセットの名前です。

このコマンドを実行すると、Type フィールドに TABLE または VIEW が表示されます。次に例を示します。

+-------------------------+-------+----------------------+-------------------+
|         tableId         | Type  |        Labels        | Time Partitioning |
+-------------------------+-------+----------------------+-------------------+
| mytable                 | TABLE | department:shipping  |                   |
| myview                  | VIEW  |                      |                   |
+-------------------------+-------+----------------------+-------------------+

例:

次のコマンドを入力すると、デフォルト プロジェクトにある mydataset データセット内のテーブルが一覧表示されます。

bq ls --format=pretty mydataset

次のコマンドを入力して、mydataset からデフォルト出力数の 50 を超えるテーブルを返します。mydataset はデフォルト プロジェクトにあります。

bq ls --format=pretty --max_results 60 mydataset

次のコマンドを入力すると、myotherproject にある mydataset データセット内のテーブルが一覧表示されます。

bq ls --format=pretty myotherproject:mydataset

API

API を使用してテーブルを一覧表示するには、tables.list メソッドを呼び出します。

C#

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の C# の設定手順を実施してください。詳細については、BigQuery C# API のリファレンス ドキュメントをご覧ください。


using Google.Cloud.BigQuery.V2;
using System;
using System.Collections.Generic;
using System.Linq;

public class BigQueryListTables
{
    public void ListTables(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Retrieve list of tables in the dataset
        List<BigQueryTable> tables = client.ListTables(datasetId).ToList();
        // Display the results
        if (tables.Count > 0)
        {
            Console.WriteLine($"Tables in dataset {datasetId}:");
            foreach (var table in tables)
            {
                Console.WriteLine($"\t{table.Reference.TableId}");
            }
        }
        else
        {
            Console.WriteLine($"{datasetId} does not contain any tables.");
        }
    }
}

Go

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。

ts := client.Dataset(datasetID).Tables(ctx)
for {
	t, err := ts.Next()
	if err == iterator.Done {
		break
	}
	if err != nil {
		return err
	}
	fmt.Fprintf(w, "Table: %q\n", t.TableID)
}

Java

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

DatasetId datasetId = DatasetId.of(projectId, datasetName);
Page<Table> tables = bigquery.listTables(datasetId, TableListOption.pageSize(100));
for (Table table : tables.iterateAll()) {
  // do something with the table
}

Node.js

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function listTables() {
  // Lists tables in 'my_dataset'.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = 'my_dataset';

  // List all tables in the dataset
  const [tables] = await bigquery.dataset(datasetId).getTables();

  console.log('Tables:');
  tables.forEach(table => console.log(table.id));
}

PHP

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の PHP の設定手順を実施してください。詳細については、BigQuery PHP API のリファレンス ドキュメントをご覧ください。

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId  = 'The Google project ID';
// $datasetId  = 'The BigQuery dataset ID';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$tables = $dataset->tables();
foreach ($tables as $table) {
    print($table->id() . PHP_EOL);
}

Python

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Python の設定手順を実施してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。

from google.cloud import bigquery

# TODO(developer): Construct a BigQuery client object.
# client = bigquery.Client()

# TODO(developer): Set dataset_id to the ID of the dataset that contains
#                  the tables you are listing.
# dataset_id = 'your-project.your_dataset'

tables = client.list_tables(dataset_id)

print("Tables contained in '{}':".format(dataset_id))
for table in tables:
    print("{}.{}.{}".format(table.project, table.dataset_id, table.table_id))

Ruby

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Ruby の設定手順を実施してください。詳細については、BigQuery Ruby API のリファレンス ドキュメントをご覧ください。

require "google/cloud/bigquery"

def list_tables dataset_id = "your_dataset_id"
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id

  puts "Tables in dataset #{dataset_id}:"
  dataset.tables.each do |table|
    puts "\t#{table.table_id}"
  end
end

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。