テーブルの作成と使用

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

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

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

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

始める前に

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

テーブルの命名

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

  • 1,024 文字以内。
  • カテゴリ L(文字)、M(マーク)、N(数字)、Pc(コネクタ、アンダースコアを含む)、Pd(ダッシュ)、Zs(スペース)の Unicode 文字を含む。詳しくは、一般カテゴリをご覧ください。

有効なテーブル名のすべての例を次に示します: table 01ग्राहक00_お客様étudiant-01

注意点

  • 一部のテーブル名とテーブル名の接頭辞は予約済みです。テーブル名または接頭辞が予約されているというエラーが表示された場合は、別の名前を選択して、もう試してください。
  • 複数のドット演算子(.)を連続して含めると、重複する演算子が暗黙的に削除されます。

    たとえば、以下は、project_name....datasest_name..table_name

    次のようになります。project_name.dataset_name.table_name

テーブルを作成する

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

  • コンソールまたは 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.adminbigquery.jobs.create 権限を含む)
  • roles/bigquery.userbigquery.jobs.create 権限を含む)
  • roles/bigquery.jobUserbigquery.jobs.create 権限を含む)

また、bigquery.datasets.create 権限がある場合は、自分が作成したデータセット内のテーブルを作成および更新できます。

BigQuery での IAM のロールと権限については、事前定義ロールと権限をご覧ください。

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

次の方法でスキーマ定義を含む空のテーブルを作成できます。

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

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

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

スキーマ定義を含む空のテーブルを作成するには:

コンソール

  1. コンソールで、[BigQuery] ページに移動します。

    BigQuery に移動

  2. [エクスプローラ] ペインでプロジェクトを展開し、データセットを選択します。
  3. [データセット情報] セクションで、 [テーブルを作成] をクリックします。
  4. [テーブルの作成] パネルで、次の詳細を指定します。
    1. [ソース] セクションの [テーブルの作成元] リストで [空のテーブル] を選択します。
    2. [送信先] セクションで、次の詳細を指定します。
      1. [データセット] で、テーブルを作成するデータセットを選択します。
      2. [テーブル] フィールドに、作成するテーブルの名前を入力します。
      3. [テーブルタイプ] フィールドが [ネイティブ テーブル] に設定されていることを確認します。
    3. [スキーマ] セクションでスキーマ定義を入力します。 スキーマ情報は、次のいずれかの方法で手動で入力できます。
      • オプション 1: [テキストとして編集] をクリックし、スキーマを JSON 配列の形式で貼り付けます。JSON 配列を使用する場合は、JSON スキーマ ファイルの作成と同じプロセスを使用してスキーマを生成します。既存のテーブルのスキーマを JSON 形式で表示するには、次のコマンドを入力します。
            bq show --format=prettyjson dataset.table
            
      • オプション 2: [フィールドを追加] をクリックして、テーブル スキーマを入力します。各フィールドの [名前]、[]、[モード] を指定します。
    4. 省略可: [パーティションとクラスタの設定] を指定します。詳細については、パーティション分割テーブルの作成クラスタ化テーブルの作成と使用をご覧ください。
    5. 省略可: 詳細オプションセクションで、顧客管理の暗号鍵を使用する場合は、顧客管理の暗号鍵(CMEK)を使用するオプションを選択します。デフォルトでは、BigQuery は Google が管理する鍵を使用して、保存されているお客様のコンテンツを暗号化します。
    6. [テーブルを作成] をクリックします。
    7. [テーブルを作成] をクリックします。

SQL

次の例では、2023 年 1 月 1 日まで有効の、newtable という名前のテーブルを作成します。

  1. コンソールで、BigQuery ページに移動します。

    BigQuery に移動

  2. クエリエディタで次のステートメントを入力します。

    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')]);
    

  3. [ 実行] をクリックします。

クエリの実行方法については、インタラクティブ クエリの実行をご覧ください。

bq

--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 はここでは説明しません。これらのオプション パラメータの詳細については、次のリンクをご覧ください。

デフォルト以外のプロジェクトでテーブルを作成する場合は、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_1key_2:value_2 は、ラベルを指定する 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 のリファレンス ドキュメントをご覧ください。

import (
	"context"
	"fmt"
	"time"

	"cloud.google.com/go/bigquery"
)

// createTableExplicitSchema demonstrates creating a new BigQuery table and specifying a schema.
func createTableExplicitSchema(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydatasetid"
	// tableID := "mytableid"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	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
	}
	return nil
}

Java

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Field;
import com.google.cloud.bigquery.Schema;
import com.google.cloud.bigquery.StandardSQLTypeName;
import com.google.cloud.bigquery.StandardTableDefinition;
import com.google.cloud.bigquery.TableDefinition;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableInfo;

public class CreateTable {

  public static void runCreateTable() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    Schema schema =
        Schema.of(
            Field.of("stringField", StandardSQLTypeName.STRING),
            Field.of("booleanField", StandardSQLTypeName.BOOL));
    createTable(datasetName, tableName, schema);
  }

  public static void createTable(String datasetName, String tableName, Schema schema) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, tableName);
      TableDefinition tableDefinition = StandardTableDefinition.of(schema);
      TableInfo tableInfo = TableInfo.newBuilder(tableId, tableDefinition).build();

      bigquery.create(tableInfo);
      System.out.println("Table created successfully");
    } catch (BigQueryException e) {
      System.out.println("Table was not created. \n" + e.toString());
    }
  }
}

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

# 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"

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

table = bigquery.Table(table_id, schema=schema)
table = client.create_table(table)  # Make an 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

スキーマ定義を含まない空のテーブルを作成する

Java

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Schema;
import com.google.cloud.bigquery.StandardTableDefinition;
import com.google.cloud.bigquery.TableDefinition;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableInfo;

// Sample to create a table without schema
public class CreateTableWithoutSchema {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    createTableWithoutSchema(datasetName, tableName);
  }

  public static void createTableWithoutSchema(String datasetName, String tableName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, tableName);
      TableDefinition tableDefinition = StandardTableDefinition.of(Schema.of());
      TableInfo tableInfo = TableInfo.newBuilder(tableId, tableDefinition).build();

      bigquery.create(tableInfo);
      System.out.println("Table created successfully");
    } catch (BigQueryException e) {
      System.out.println("Table was not created. \n" + e.toString());
    }
  }
}

クエリ結果からテーブルを作成する

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

コンソール

  1. コンソールで [BigQuery] ページを開きます。

    BigQuery ページに移動

  2. [エクスプローラ] パネルでプロジェクトを開いて、データセットを選択します。

  3. 有効な SQL クエリを入力します。

  4. [展開] をクリックして、[クエリを設定] を選択します。

    クエリの設定

  5. [クエリ結果の宛先テーブルを設定する] オプションを選択する。

    宛先の設定

  6. [送信先] セクションで、テーブルを作成する [データセット] を選択し、[Table Id] を選びます。

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

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

  9. クエリの設定を更新するには、[保存] をクリックします。

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

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

SQL

次の例では、CREATE TABLE ステートメントを使用して、一般公開 bikeshare_trips テーブル内のデータから trips テーブルを作成します。

  1. コンソールで、BigQuery ページに移動します。

    BigQuery に移動

  2. クエリエディタで次のステートメントを入力します。

    CREATE TABLE mydataset.trips AS (
      SELECT
        bikeid,
        start_time,
        duration_minutes
      FROM
        bigquery-public-data.austin_bikeshare.bikeshare_trips
    );
    

  3. [ 実行] をクリックします。

クエリの実行方法については、インタラクティブ クエリの実行をご覧ください。

詳細については、既存のテーブルからの新しいテーブルの作成をご覧ください。

bq

クエリ結果に基づいて永続テーブルを作成するには、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 Data 一般公開データセットからデータを取得します。

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_table フラグが指定されているため、クエリ結果が宛先テーブルに追加されます。

bq query \
--append_table \
--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 のリファレンス ドキュメントをご覧ください。

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// queryWithDestination demonstrates saving the results of a query to a specific table by setting the destination
// via the API properties.
func queryWithDestination(w io.Writer, projectID, destDatasetID, destTableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	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)
	// Run the query and print results when the query job is completed.
	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.Fprintln(w, row)
	}
	return nil
}

Java

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

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableId;

public class SaveQueryToTable {

  public static void runSaveQueryToTable() {
    // TODO(developer): Replace these variables before running the sample.
    String query = "SELECT corpus FROM `bigquery-public-data.samples.shakespeare` GROUP BY corpus;";
    String destinationTable = "MY_TABLE";
    String destinationDataset = "MY_DATASET";

    saveQueryToTable(destinationDataset, destinationTable, query);
  }

  public static void saveQueryToTable(
      String destinationDataset, String destinationTableId, String query) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      // Identify the destination table
      TableId destinationTable = TableId.of(destinationDataset, destinationTableId);

      // Build the query job
      QueryJobConfiguration queryConfig =
          QueryJobConfiguration.newBuilder(query).setDestinationTable(destinationTable).build();

      // Execute the query.
      bigquery.query(queryConfig);

      // The results are now saved in the destination table.

      System.out.println("Saved query ran successfully");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Saved query did not run \n" + e.toString());
    }
  }
}

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 queryDestinationTable() {
  // Queries the U.S. given names dataset for the state of Texas
  // and saves results to permanent table.

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

  // Create destination table reference
  const dataset = bigquery.dataset(datasetId);
  const destinationTable = dataset.table(tableId);

  const query = `SELECT name
    FROM \`bigquery-public-data.usa_names.usa_1910_2013\`
    WHERE state = 'TX'
    LIMIT 100`;

  // For all options, see https://cloud.google.com/bigquery/docs/reference/v2/tables#resource
  const options = {
    query: query,
    // Location must match that of the dataset(s) referenced in the query.
    location: 'US',
    destination: destinationTable,
  };

  // Run the query as a job
  const [job] = await bigquery.createQueryJob(options);

  console.log(`Job ${job.id} started.`);
  console.log(`Query results loaded to table ${destinationTable.id}`);
}

Python

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

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

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

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

job_config = bigquery.QueryJobConfig(destination=table_id)

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, job_config=job_config)  # Make an API request.
query_job.result()  # Wait for the job to complete.

print("Query results loaded to the table {}".format(table_id))

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

外部データソースは、データが BigQuery ストレージに格納されていない場合でも、BigQuery から直接クエリできるデータソースです。

BigQuery では、次の外部データソースがサポートされています。

詳細については、外部データソースへのクエリの実行をご覧ください。

データの読み込み時にテーブルを作成する

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

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

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

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

テーブルとビューへのアクセスを構成するには、エンティティに次のレベルで IAM ロールを付与します。以下に、各レベルを許可されるリソースの範囲が大きい順に一覧で示します。

  • Google Cloud リソース階層の上位レベル(プロジェクト、フォルダ、組織レベルなど)
  • データセット レベル
  • テーブル / ビューレベル

次の方法で、テーブル内のデータアクセスを制限することもできます。

IAM で保護されているリソースを使用したアクセスは追加型です。たとえば、エンティティにプロジェクトなどの上位レベルのアクセス権がない場合は、データセット レベルでアクセス権を付与すると、データセット内のテーブルとビューにアクセスできます。同様に、エンティティに高レベルまたはデータセット レベルでのアクセス権がない場合は、テーブルまたはビューレベルでエンティティにアクセス権を付与できます。

プロジェクト、フォルダ、組織レベルなど、Google Cloud リソース階層の上位レベルで IAM ロールを付与すると、エンティティは幅広いリソースのセットにアクセスできるようになります。たとえば、プロジェクト レベルでエンティティにロールを付与すると、そのエンティティには、プロジェクトに含まれるすべてのデータセットに適用される権限が付与されます。

データセット レベルでロールを付与すると、そのエンティティが上位レベルでアクセスできない場合でも、そのデータセットのテーブルとビューで実行できるオペレーションが指定されます。データセット レベルのアクセス制御を構成する方法については、データセットへのアクセスの制御をご覧ください。

テーブルまたはビューレベルでロールを付与すると、エンティティに上位レベルのアクセスがない場合でも、特定のテーブルやビューに対してエンティティが実行できるオペレーションが特定されます。テーブルレベルのアクセス制御の構成については、テーブルおよびビューへのアクセスの制御をご覧ください。

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

IAM で保護されているリソースに「拒否」権限を設定することはできません。

ロールと権限の詳細については、IAM のドキュメント内のロールについてと BigQuery の IAM のロールと権限をご覧ください。

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

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

  • コンソールの使用
  • bq コマンドライン ツールの bq show コマンドを使用する。
  • tables.get API メソッドを呼び出す。
  • クライアント ライブラリを使用する。
  • INFORMATION_SCHEMA ビューのクエリを実行する(ベータ版)。

必要な権限

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

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

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

BigQuery での IAM ロールと権限の詳細については、アクセス制御をご覧ください。

テーブル情報の取得

テーブルに関する情報を取得するには:

コンソール

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

  2. データセット名をクリックして展開します。 データセット内のテーブルとビューが表示されます。

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

  4. [詳細] パネルで、[詳細] をクリックしてテーブルの説明とテーブル情報を表示します。

  5. 必要に応じて、[スキーマ] タブに切り替えて、テーブルのスキーマ定義を表示します。

bq

すべてのテーブル情報を表示するには、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 のリファレンス ドキュメントをご覧ください。

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
)

// printTableInfo demonstrates fetching metadata from a table and printing some basic information
// to an io.Writer.
func printTableInfo(w io.Writer, projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

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

Java

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Table;
import com.google.cloud.bigquery.TableId;

public class GetTable {

  public static void runGetTable() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "bigquery_public_data";
    String datasetName = "samples";
    String tableName = "shakespeare";
    getTable(projectId, datasetName, tableName);
  }

  public static void getTable(String projectId, String datasetName, String tableName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(projectId, datasetName, tableName);
      Table table = bigquery.getTable(tableId);
      System.out.println("Table info: " + table.getDescription());
    } catch (BigQueryException e) {
      System.out.println("Table not retrieved. \n" + e.toString());
    }
  }
}

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 getTable() {
  // Retrieves 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";

  // Retrieve table reference
  const dataset = bigquery.dataset(datasetId);
  const [table] = await dataset.table(tableId).get();

  console.log('Table:');
  console.log(table.metadata.tableReference);
}
getTable();

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

# 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)  # Make an API request.

# View table properties
print(
    "Got table '{}.{}.{}'.".format(table.project, table.dataset_id, table.table_id)
)
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 ビューは、テーブル内の列(フィールド)に関するメタデータの取得に使用します。
  • INFORMATION_SCHEMA.TABLE_STORAGE ビューと INFORMATION_SCHEMA.TABLE_STORAGE_TIMELINE_BY_* ビューは、テーブルによる現在と過去のストレージ使用量に関するメタデータの取得に使用します。

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

TABLES ビュー

INFORMATION_SCHEMA.TABLES ビューにクエリを実行すると、クエリの結果として、データセット内の各テーブルまたはビューが 1 行で返されます。ビューの詳細情報を取得するには、INFORMATION_SCHEMA.VIEWS ビューに対してクエリを実行します。

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

列名 データ型
table_catalog STRING データセットを含むプロジェクトのプロジェクト ID。
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 テーブルの作成時間
ddl STRING テーブルの再作成に使用できる DDL ステートメントCREATE TABLECREATE VIEW など)
clone_time TIMESTAMP テーブル クローンプレビュー)の場合、このテーブルを作成するためにベーステーブルがクローンされた時間。タイムトラベルが使用された場合、このフィールドにはタイムトラベルのタイムスタンプが含まれます。それ以外の場合、clone_time フィールドは creation_time フィールドと同じです。table_typeCLONE に設定されているテーブルにのみ適用されます。
base_table_catalog STRING テーブル クローンプレビュー)の場合、ベーステーブルのプロジェクト。table_typeCLONE に設定されているテーブルにのみ適用されます。
base_table_schema STRING テーブル クローンプレビュー)の場合、ベーステーブルのデータセット。table_typeCLONE に設定されているテーブルにのみ適用されます。
base_table_name STRING テーブル クローンプレビュー)の場合、ベーステーブルの名前。table_typeCLONE に設定されているテーブルにのみ適用されます。
default_collation_name STRING デフォルトの照合仕様の名前(存在する場合)。それ以外の場合は、NULL です。

Examples

例 1:

次の例では、mydataset という名前のデータセット内のすべてのテーブルのテーブル メタデータを取得します。このクエリは、将来の使用のために予約されている is_typed を除き、INFORMATION_SCHEMA.TABLES ビューからすべての列を選択します。デフォルト プロジェクトにある mydataset 内のすべてのタイプのテーブルに対するメタデータが返されます。

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

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

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

  SELECT
    * EXCEPT(is_typed)
  FROM
    mydataset.INFORMATION_SCHEMA.TABLES;

結果は次のようになります。読みやすくするため、一部の列は結果から除外されています。

+----------------+---------------+----------------+------------+--------------------+---------------------+---------------------------------------------+
| table_catalog  | table_schema  |   table_name   | table_type | is_insertable_into |    creation_time    |                     ddl                     |
+----------------+---------------+----------------+------------+--------------------+---------------------+---------------------------------------------+
| myproject      | mydataset     | mytable1       | BASE TABLE | YES                | 2018-10-29 20:34:44 | CREATE TABLE `myproject.mydataset.mytable1` |
|                |               |                |            |                    |                     | (                                           |
|                |               |                |            |                    |                     |   id INT64                                  |
|                |               |                |            |                    |                     | );                                          |
| myproject      | mydataset     | myview1        | VIEW       | NO                 | 2018-12-29 00:19:20 | CREATE VIEW `myproject.mydataset.myview1`   |
|                |               |                |            |                    |                     | AS SELECT 100 as id;                        |
+----------------+---------------+----------------+------------+--------------------+---------------------+---------------------------------------------+
例 2:

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

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

  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    |                     ddl                     |
  +----------------+---------------+----------------+------------+--------------------+---------------------+---------------------------------------------+
  | myproject      | mydataset     | mytable1       | BASE TABLE | YES                | 2018-10-31 22:40:05 | CREATE TABLE myproject.mydataset.mytable1 |
  |                |               |                |            |                    |                     | (                                           |
  |                |               |                |            |                    |                     |   id INT64                                  |
  |                |               |                |            |                    |                     | );                                          |
  +----------------+---------------+----------------+------------+--------------------+---------------------+---------------------------------------------+
  

例 3:

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

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

SELECT
  table_name, ddl
FROM
  `bigquery-public-data`.census_bureau_usa.INFORMATION_SCHEMA.TABLES
WHERE
  table_name = 'population_by_zip_2010';

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

+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|       table_name       |                                                                                                            ddl                                                                                                             |
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| population_by_zip_2010 | CREATE TABLE `bigquery-public-data.census_bureau_usa.population_by_zip_2010`                                                                                                                                               |
|                        | (                                                                                                                                                                                                                          |
|                        |   geo_id STRING OPTIONS(description="Geo code"),                                                                                                                                                                           |
|                        |   zipcode STRING NOT NULL OPTIONS(description="Five digit ZIP Code Tabulation Area Census Code"),                                                                                                                          |
|                        |   population INT64 OPTIONS(description="The total count of the population for this segment."),                                                                                                                             |
|                        |   minimum_age INT64 OPTIONS(description="The minimum age in the age range. If null, this indicates the row as a total for male, female, or overall population."),                                                          |
|                        |   maximum_age INT64 OPTIONS(description="The maximum age in the age range. If null, this indicates the row as having no maximum (such as 85 and over) or the row is a total of the male, female, or overall population."), |
|                        |   gender STRING OPTIONS(description="male or female. If empty, the row is a total population summary.")                                                                                                                    |
|                        | )                                                                                                                                                                                                                          |
|                        | OPTIONS(                                                                                                                                                                                                                   |
|                        |   labels=[("freebqcovid", "")]                                                                                                                                                                                             |
|                        | );                                                                                                                                                                                                                         |
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  

TABLE_OPTIONS ビュー

INFORMATION_SCHEMA.TABLE_OPTIONS ビューにクエリを実行すると、クエリ結果として、データセット内のテーブルまたはビューごとに、各オプションに対して 1 行が表示されます。ビューの詳細情報を取得するには、INFORMATION_SCHEMA.VIEWS ビューに対してクエリを実行します。

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

列名 データ型
TABLE_CATALOG STRING データセットを含むプロジェクトのプロジェクト ID
TABLE_SCHEMA STRING datasetId とも呼ばれる、テーブルやビューを含むデータセットの名前
TABLE_NAME STRING テーブルまたはビューの名前(tableId とも呼ばれる)
OPTION_NAME STRING options テーブル内の名前値の 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 の配列
require_partition_filter BOOL テーブルに対するクエリでパーティション フィルタが必要かどうか
enable_refresh BOOL マテリアライズド ビューで自動更新が有効にされているかどうか
refresh_interval_minutes FLOAT64 マテリアライズド ビューが更新される頻度

外部テーブルの場合、次のオプションが使用できます。

オプション
allow_jagged_rows

BOOL

true の場合、末尾のオプションの列が欠落している行を受け入れます。

CSV データに適用されます。

allow_quoted_newlines

BOOL

true の場合、改行文字を含む引用符で囲まれたデータ セクションを許可します。

CSV データに適用されます。

compression

STRING

データソースの圧縮タイプ。サポートされる値: GZIP。指定しない場合、データソースは圧縮されません。

CSV データと JSON データに適用されます。

description

STRING

このテーブルの説明。

enable_logical_types

BOOL

true の場合、Avro の論理型を対応する SQL 型に変換します。詳細については、論理型をご覧ください。

Avro データに適用されます。

enum_as_string

BOOL

true の場合、Parquet ENUM 論理型はデフォルトで BYTES ではなく STRING として推測されます。

Parquet データに適用されます。

enable_list_inference

BOOL

true の場合は、Parquet LIST 論理型専用のスキーマ推定を使用します。

Parquet データに適用されます。

encoding

STRING

データの文字エンコード。サポートされている値: UTF8(または UTF-8)、ISO_8859_1(または ISO-8859-1)。

CSV データに適用されます。

expiration_timestamp

TIMESTAMP

このテーブルの有効期限。指定しない場合、テーブルは期限切れになりません。

例: "2025-01-01 00:00:00 UTC"

field_delimiter

STRING

CSV ファイル内のフィールド区切り文字。

CSV データに適用されます。

format

STRING

外部データの形式。 CREATE EXTERNAL TABLE に指定できる値は、AVROCSVDATASTORE_BACKUPGOOGLE_SHEETSNEWLINE_DELIMITED_JSON(または JSON)、ORCPARQUET です。

LOAD DATA に指定できる値は、AVROCSVNEWLINE_DELIMITED_JSON(または JSON)、ORCPARQUET です。

JSONNEWLINE_DELIMITED_JSON と同等です。

decimal_target_types

ARRAY<STRING>

Decimal 型の変換方法を指定します。ExternalDataConfiguration.decimal_target_types と同等です。

例: ["NUMERIC", "BIGNUMERIC"]

json_extension

STRING

JSON データの場合、特定の JSON 置換形式を指定します。指定しない場合、BigQuery はデータを汎用 JSON レコードとして読み取ります。

サポートされる値:
GEOJSON。改行区切りの GeoJSON データ。詳細については、改行区切りの GeoJSON ファイルから外部テーブルを作成するをご覧ください。

hive_partition_uri_prefix

STRING

パーティション キーのエンコードを開始する前のすべてのソース URI の一般的なプレフィックス。Hive パーティション分割された外部テーブルにのみ適用されます。

Avro、CSV、JSON、Parquet、ORC のデータに適用されます。

例: "gs://bucket/path"

ignore_unknown_values

BOOL

true の場合、テーブル スキーマにない余分な値を無視します。エラーは返しません。

CSV データと JSON データに適用されます。

max_bad_records

INT64

データの読み取り時に無視する不良レコードの最大数。

適用対象: CSV、JSON、スプレッドシートのデータ。

null_marker

STRING

CSV ファイル内の NULL 値を表す文字列。

CSV データに適用されます。

preserve_ascii_control_characters

BOOL

true の場合、埋め込みの ASCII 制御文字(ASCII テーブルの最初の 32 文字「\x00」から「\x1F」まで)が保持されます。

CSV データに適用されます。

projection_fields

STRING

読み込むエンティティ プロパティのリスト。

Datastore データに適用されます。

quote

STRING

CSV ファイルのデータ セクションを引用するために使用される文字列。データに引用符で囲まれた改行文字が含まれている場合は、allow_quoted_newlines プロパティも true に設定します。

CSV データに適用されます。

require_hive_partition_filter

BOOL

true の場合、このテーブルに対するすべてのクエリでパーティション フィルタが必要になります。パーティション フィルタを使用すると、データを読み取るときにパーティションを削除できます。Hive パーティション分割された外部テーブルにのみ適用されます。

Avro、CSV、JSON、Parquet、ORC のデータに適用されます。

sheet_range

STRING

クエリの対象となるスプレッドシートのスプレッドシートの範囲。

スプレッドシートのデータに適用されます。

例: “sheet1!A1:B20”

skip_leading_rows

INT64

データを読み取る際にスキップするファイルの先頭行の数。

CSV データとスプレッドシートのデータに適用されます。

uris

ARRAY<STRING>

外部データのロケーションの完全修飾 URI の配列。

例: ["gs://bucket/path/*"]

例 1:

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

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

  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

  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 ビューのスキーマは次のとおりです。

列名 データ型
TABLE_CATALOG STRING データセットを含むプロジェクトのプロジェクト ID
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 INT64 テーブルのクラスタリング列内の列の 1 から始まるオフセット。テーブルがクラスタ化テーブルでない場合、値は NULL
COLLATION_NAME STRING 照合順序の仕様の名前(存在する場合)。それ以外の場合は NULL

STRING または ARRAY<STRING> が渡されると、照合指定が存在する場合は返されます。それ以外の場合は、NULL が返されます。

Examples

次の例では、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
  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_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 ビューのスキーマは次のとおりです。

列名 データ型
TABLE_CATALOG STRING データセットを含むプロジェクトのプロジェクト ID
TABLE_SCHEMA STRING datasetId とも呼ばれる、テーブルを含むデータセットの名前
TABLE_NAME STRING テーブルまたはビューの名前(tableId とも呼ばれる)
COLUMN_NAME STRING 列の名前
FIELD_PATH STRING RECORD 列または STRUCT 列内でネストされた列のパス
DATA_TYPE STRING 列の標準 SQL データ型
DESCRIPTION STRING 列の説明
COLLATION_NAME STRING 照合順序の仕様の名前(存在する場合)。それ以外の場合は NULL

STRUCTSTRINGARRAY<STRING>、または STRING フィールドが渡された場合照合順序が存在する場合は、照合指定が返されます。それ以外の場合は、NULL が返されます。

Examples

次の例では、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 列に関するメタデータを表示するには、次のクエリを実行します。

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_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        |
  +------------+-------------+---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------+
  

TABLE_STORAGE ビュー

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

列名 データ型
PROJECT_ID STRING データセットを含むプロジェクトのプロジェクト ID
PROJECT_NUMBER INT64 データセットを含むプロジェクトのプロジェクト番号
TABLE_SCHEMA STRING テーブルやマテリアライズド ビューを含むデータセットの名前(datasetId とも呼ばれる)
TABLE_NAME STRING テーブルまたはマテリアライズド ビューの名前(tableId とも呼ばれる)
CREATION_TIME TIMESTAMP テーブルの作成時間
TOTAL_ROWS INT64 テーブルまたはマテリアライズド ビューの行の総数
TOTAL_PARTITIONS INT64 テーブルまたはマテリアライズド ビューに存在するパーティションの数。パーティション分割されていないテーブルは 0 を返します。
TOTAL_LOGICAL_BYTES INT64 テーブルまたはマテリアライズド ビューの論理(非圧縮)バイトの合計数
ACTIVE_LOGICAL_BYTES INT64 作成後 90 日未満の論理(非圧縮)バイト数
LONG_TERM_LOGICAL_BYTES INT64 作成後 90 日以上経過した論理(非圧縮)バイト数
TOTAL_PHYSICAL_BYTES INT64 ストレージに使用される物理(圧縮)バイトの合計数(アクティブ テーブル、長期間テーブル タイムトラベル(削除されたテーブルに対する)を含む)
ACTIVE_PHYSICAL_BYTES INT64 作成後 90 日未満の物理(圧縮)バイト数
LONG_TERM_PHYSICAL_BYTES INT64 作成後 90 日以上経過した物理(圧縮)バイト数
TIME_TRAVEL_PHYSICAL_BYTES INT64 タイムトラベル ストレージで使用される物理(圧縮)バイト数(削除または変更されたデータ)

Examples

次の例では、現在組織で最もストレージを使用しているプロジェクトを示します。

SELECT
  project_id,
  SUM(total_logical_bytes) AS total_logical_bytes
FROM
  `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE
GROUP BY
  project_id
ORDER BY
  total_logical_bytes DESC;

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

+---------------------+---------------------+
|     project_id      | total_logical_bytes |
+---------------------+---------------------+
| projecta            |     971329178274633 |
+---------------------+---------------------+
| projectb            |     834638211024843 |
+---------------------+---------------------+
| projectc            |     562910385625126 |
+---------------------+---------------------+

TABLE_STORAGE_TIMELINE_BY_* ビュー

テーブル ストレージのタイムライン ビューは、行の書き込み、更新、削除など、テーブルのストレージ変更をトリガーするイベントごとに 1 行を返します。つまり、1 日のテーブルで複数の行が存在することがあります。時間範囲でビューをクエリする場合は、その日の最新のタイムスタンプを使用します。

このビューのスキーマは次のとおりです。

列名 データ型
TIMESTAMP TIMESTAMP ストレージが最後に再計算された時間を示すタイムスタンプ。再計算は、テーブル内のデータの変更によってトリガーされます。
DELETED BOOLEAN テーブルが削除されているかどうかを示します
PROJECT_ID STRING データセットを含むプロジェクトのプロジェクト ID
PROJECT_NUMBER INT64 データセットを含むプロジェクトのプロジェクト番号
TABLE_SCHEMA STRING テーブルやマテリアライズド ビューを含むデータセットの名前(datasetId とも呼ばれる)
TABLE_NAME STRING テーブルまたはマテリアライズド ビューの名前(tableId とも呼ばれる)
CREATION_TIME TIMESTAMP テーブルの作成時間
TOTAL_ROWS INT64 テーブルまたはマテリアライズド ビューの行の総数
TOTAL_PARTITIONS INT64 テーブルまたはマテリアライズド ビューのパーティションの数。パーティション分割されていないテーブルは 0 を返します。
TOTAL_LOGICAL_BYTES INT64 テーブルまたはマテリアライズド ビューの論理バイトの合計数
ACTIVE_LOGICAL_BYTES INT64 作成後 90 日未満の論理バイト数
LONG_TERM_LOGICAL_BYTES INT64 作成後 90 日以上経過した論理バイト数
TOTAL_PHYSICAL_BYTES INT64 ストレージに使用される物理バイトの合計数(アクティブ テーブル、長期間テーブル タイムトラベル(削除されたテーブルに対する)を含む)
ACTIVE_PHYSICAL_BYTES INT64 作成後 90 日未満の物理バイト数
LONG_TERM_PHYSICAL_BYTES INT64 作成後 90 日以上経過した物理バイト数
TIME_TRAVEL_PHYSICAL_BYTES INT64 タイムトラベル ストレージで使用される物理バイト数(削除または変更されたデータ)

Examples

デフォルト プロジェクト以外のプロジェクトに対してクエリを実行するには、次の形式でプロジェクト ID を追加します。

PROJECT_ID.DATASET_ID.INFORMATION_SCHEMA.TABLE_STORAGE_TIMELINE_BY_ORGANIZATION
以下を置き換えます。

  • PROJECT_ID: プロジェクトの ID。
  • DATASET_ID: データセットの ID。

例:myproject.mydataset.INFORMATION_SCHEMA.TABLE_STORAGE_TIMELINE_BY_ORGANIZATION

次の例は、組織内の各プロジェクトによって特定の時点で使用されている物理ストレージの合計を示しています。

WITH most_recent_records as (
  SELECT
    project_id,
    table_schema,
    table_name,
    MAX(timestamp) as max_timestamp
  FROM
    `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE_TIMELINE_BY_ORGANIZATION
  WHERE
    timestamp <= 'TIMESTAMP'
  GROUP BY
    project_id, table_schema, table_name
  )
  SELECT
    i_s.project_id,
    SUM(i_s.total_physical_bytes) AS TotalPhysicalBytes
  FROM
    `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE_TIMELINE_BY_ORGANIZATION as i_s
  JOIN
    most_recent_records
  ON
    i_s.project_id = most_recent_records.project_id
    AND i_s.table_schema = most_recent_records.table_schema
    AND i_s.table_name = most_recent_records.table_name
    AND i_s.timestamp = most_recent_records.max_timestamp
  GROUP BY
    project_id;

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

-----------------+------------------------+
|  project_id    |  TotalPhysicalBytes    |
+----------------+------------------------+
| projecta       | 3844                   |
| projectb       | 16022778               |
| projectc       | 8934009                |
+----------------+------------------------+

データセットに含まれるテーブルを一覧表示する

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

  • コンソールの使用
  • bq コマンドライン ツールの bq ls コマンドを使用する。
  • tables.list API メソッドを呼び出す。
  • クライアント ライブラリを使用する。

必要な権限

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

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

BigQuery での IAM ロールと権限の詳細については、アクセス制御をご覧ください。

テーブルのリスト表示

データセット内のテーブルを一覧表示する場合:

コンソール

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

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

bq

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 のリファレンス ドキュメントをご覧ください。

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// listTables demonstrates iterating through the collection of tables in a given dataset.
func listTables(w io.Writer, projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	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)
	}
	return nil
}

Java

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

import com.google.api.gax.paging.Page;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQuery.TableListOption;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.DatasetId;
import com.google.cloud.bigquery.Table;

public class ListTables {

  public static void runListTables() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "bigquery-public-data";
    String datasetName = "samples";
    listTables(projectId, datasetName);
  }

  public static void listTables(String projectId, String datasetName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      DatasetId datasetId = DatasetId.of(projectId, datasetName);
      Page<Table> tables = bigquery.listTables(datasetId, TableListOption.pageSize(100));
      tables.iterateAll().forEach(table -> System.out.print(table.getTableId().getTable() + "\n"));

      System.out.println("Tables listed successfully.");
    } catch (BigQueryException e) {
      System.out.println("Tables were not listed. Error occurred: " + e.toString());
    }
  }
}

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

# 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)  # Make an API request.

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

テーブルのセキュリティ

BigQuery でテーブルへのアクセスを制御するには、テーブルのアクセス制御の概要をご覧ください。

次のステップ

使ってみる

Google Cloud を初めて使用される方は、アカウントを作成して、実際のシナリオでの BigQuery のパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。

BigQuery の無料トライアル