データ定義言語ステートメントの使用

データ定義言語(DDL)ステートメントを使用すると、標準 SQL クエリ構文を使用して BigQuery リソースを作成および変更できます。現時点では、BigQuery で DDL コマンドを使用して次のことができます。

CREATE TABLE ステートメント

BigQuery でテーブルを作成するには、CREATE TABLE DDL ステートメントを使用します。

構文

{CREATE TABLE | CREATE TABLE IF NOT EXISTS | CREATE OR REPLACE TABLE}
table_name
[(
  column_name column_schema[, ...]
)]
[PARTITION BY partition_expression]
[CLUSTER BY clustering_column_list]
[OPTIONS(table_option_list)]
[AS query_statement]

ここで

{CREATE TABLE | CREATE TABLE IF NOT EXISTS | CREATE OR REPLACE TABLE} は、次のステートメントのいずれかです。

  • CREATE TABLE - 新しいテーブルを作成します。
  • CREATE TABLE IF NOT EXISTS - 指定したデータセット内にそのテーブルが存在しない場合にのみ、新しいテーブルを作成します。
  • CREATE OR REPLACE TABLE - 指定したデータセット内にテーブルを作成し、同じ名前のテーブルが存在する場合は置き換えます。

CREATE TABLE ステートメントは、以下の規則に従う必要があります。

  • 使用できる CREATE ステートメントは 1 つのみ。
  • 列リストと as query_statement 句のいずれかまたは両方が存在する必要がある。
  • 列リストと as query_statement 句の両方が存在する場合、BigQuery は、as query_statement 句内の名前を無視し、位置に基づいて列を列リストに一致させる。
  • as query_statement 句が存在し、列リストが存在しない場合、BigQuery は、列の名前と型を as query_statement 句から判断する。
  • 列リストと as query_statement 句のいずれかで、列名が指定されている必要がある。
  • 列名を重複させることはできない。

table_name

table_name は作成するテーブルの名前です。テーブル名はデータセット内で一意である必要があります。テーブル名の要件は次のとおりです。

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

column_namecolumn_schema

(column_name column_schema[, ...]) には、テーブルのスキーマ情報がカンマ区切りのリストで含まれています。

  • column_name は、列の名前です。列名の要件は次のとおりです。
    • 英字(大文字または小文字)、数字(0~9)、アンダースコア(_)だけが含まれている
    • 英字またはアンダースコアで始まっている
    • 128 文字以内である
  • column_schemaデータ型に似ていますが、ARRAY 以外の型に対してはオプションの NOT NULL 制約をサポートします。column_schema は、トップレベルの列と STRUCT フィールドに対するオプションもサポートします。
column_schema :=
   {simple_type [NOT NULL] |
    STRUCT<field_list> [NOT NULL] |
    ARRAY<array_element_schema>}
   [OPTIONS(column_option_list)]

field_list := field_name column_schema [, ...]

array_element_schema := {simple_type | STRUCT<field_list>} [NOT NULL]

simple_typeサポートされている任意のデータ型です(STRUCTARRAY は除きます)。

field_name は、構造体フィールドの名前です。構造体フィールドの名前には列名と同じ制約があります。

列またはフィールドに対して NOT NULL 制約が存在する場合、その列またはフィールドは REQUIRED モードで作成されます。逆に、列またはフィールドに対して NOT NULL 制約がない場合、その列またはフィールドは NULLABLE モードで作成されます。

ARRAY 型の列とフィールドでは NOT NULL 修飾子はサポートされていません。たとえば、ARRAY<INT64> NOT NULL という column_schema は無効です。その理由は、ARRAY 列には REPEATED モードがあり、列を空にすることはできますが、NULL にすることはできないためです。NOT NULL 制約が指定されているかどうかにかかわらず、テーブル内の配列要素を NULL にすることはできません。たとえば、ARRAY<INT64>ARRAY<INT64 NOT NULL> と同等です。

テーブルの column_schemaNOT NULL 属性は、テーブルに対するクエリを通じて伝播されません。テーブル Tx INT64 NOT NULL として宣言されている列がある場合、たとえば CREATE TABLE dataset.newtable AS SELECT x FROM T によって作成された dataset.newtable テーブルに含まれる xNULLABLE になります。

column_schema は、CREATE TABLE ステートメントの列定義リスト内でのみ使用できます。式の中の型として使用することはできません。たとえば、CAST(1 AS INT64 NOT NULL) は無効です。

partition_expression

PARTITION BY は、テーブルのパーティショニングを制御するオプションの句です。 partition_expression は、テーブルのパーティショニング方法を決める式です。パーティション式には次の値を使用できます。

  • PARTITION BY DATE(_PARTITIONTIME) - _PARTITIONTIME pseudo column に格納された日付ベースのタイムスタンプを使用してテーブルを分割します。この構文は、AS query_statement 句がない CREATE TABLE でのみサポートされています。
  • PARTITION BY DATE(<timestamp_column>) - TIMESTAMP 列の日付を使用してテーブルを分割します。
  • PARTITION BY <date_column> - DATEを使用してテーブルを分割します。

clustering_column_list

CLUSTER BY は、テーブルのクラスタ化を制御するオプションの句です。 clustering_column_list は、テーブルのクラスタ化方法を決めるカンマ区切りのリストです。クラスタ化列リストには、最大 4 つのクラスタ化列を含めることができます。

table_option_list

オプション リストを使用すると、ラベルや有効期限などのテーブル オプションを設定できます。カンマ区切りのリストを使用して複数のオプションを含めることができます。

テーブル オプション リストは次の形式で指定します。

NAME=VALUE, ...

NAMEVALUE は、次のいずれかの組み合わせである必要があります。

NAME VALUE 詳細
expiration_timestamp TIMESTAMP

例: expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC"

このプロパティは、expirationTime テーブル リソース プロパティと同等です。

partition_expiration_days

FLOAT64

例: partition_expiration_days=7

このプロパティは、timePartitioning.expirationMs テーブル リソース プロパティと同等ですが、単位はミリ秒ではなく日数です。1 日は 86,400,000 ミリ秒または 24 時間に相当します。

このプロパティは、テーブルが分割されている場合にのみ設定できます。

require_partition_filter

BOOL

例: require_partition_filter=true

このプロパティは、timePartitioning.requirePartitionFilter テーブル リソース プロパティと同等です。

このプロパティは、テーブルが分割されている場合にのみ設定できます。

kms_key_name

STRING

例: kms_key_name="projects/project_id/locations/location/keyRings/keyring/cryptoKeys/key"

このプロパティは、encryptionConfiguration.kmsKeyName テーブル リソース プロパティと同等です。

詳細については、Cloud KMS 鍵によるデータの保護をご覧ください。

friendly_name

STRING

例: friendly_name="my_table"

このプロパティは、friendlyName テーブル リソース プロパティと同等です。

description

STRING

例: description="a table that expires in 2020"

このプロパティは、description テーブル リソース プロパティと同等です。

labels

ARRAY<STRUCT<STRING, STRING>>

例: labels=[("org_unit", "development")]

このプロパティは、labels テーブル リソース プロパティと同等です。

VALUE は、リテラル、クエリ パラメータ、スカラー関数のみを含む定数式です。定数式が null と評価された場合、対応するオプション NAME は無視されます。

定数式には以下を含めることはできません

  • テーブルへの参照
  • サブクエリ、または SELECTCREATEUPDATE などの SQL 文
  • ユーザー定義関数、集計関数、または分析関数
  • 以下のスカラー関数
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

column_option_list

column_schema 内で column_option_list を使用すると、省略可能な列またはフィールドのオプションを指定できます。列のオプションの構文と要件はテーブル オプションの場合と同じですが、NAMEVALUE のリストは異なります。

NAME VALUE 詳細
description

STRING

例: description="a unique id"

このプロパティは、schema.fields[].description テーブル リソース プロパティと同等です。

query_statement

AS query_statement 句は、作成されるテーブルからのクエリを指定します。query_statement でサポートされている形式については、SQL 構文リファレンスをご覧ください。

既知の制限事項:

  • クエリ結果から取り込み時間パーティション分割テーブルを作成することはできません。その代わりに、CREATE TABLE DDL ステートメントを使用して取り込み時間パーティション分割テーブルを作成した後、INSERT DML ステートメントを使用してそのテーブルにデータを挿入します。
  • OR REPLACE 修飾子を使用してテーブルを別の種類のパーティショニングで置き換えることはできません。その代わりに、テーブルに対して DROP を行った後、CREATE TABLE ... AS SELECT ... ステートメントを使用してテーブルを再作成します。

CREATE TABLE の例

新しいテーブルの作成

CREATE TABLE DDL ステートメントは、指定されたオプションでテーブルを作成します。テーブル名がデータセット内に存在する場合は、次のエラーが返されます。

Already Exists: project_id:dataset.table

次の例は、mydataset 内に newtable という名前のパーティション分割テーブルを作成します。デフォルト プロジェクトを構成していない場合は、`project_id.dataset.table`(バッククォートを含む)の形式でプロジェクト ID をデータセット名の前に追加します(例: `myproject.mydataset.newtable`)。

このテーブルは、PARTITION BY DATE(_PARTITIONTIME)partition_expression を使用して分割されます。この式は、_PARTITIONTIME 擬似列の日付ベースのタイムスタンプを使用してテーブルを分割します。

テーブル スキーマには次の 2 つの列があります。

  • x - 整数と、「オプション INTEGER 型フィールド」の説明
  • y - 次の 2 つの列を含む STRUCT

    • a - 文字列の配列と、「繰り返し STRING 型フィールド」の説明
    • b - ブール値

テーブル オプション リストで指定する内容は次のとおりです。

  • テーブルの有効期限 - 2020 年 1 月 1 日 00:00:00 UTC
  • パーティションの有効期限 - 1 日
  • 説明 - 2020 年に期限が切れるテーブル
  • ラベル - org_unit = development

DDL を使用して新しいテーブルを作成するには:

Console

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

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

    クエリの新規作成

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

     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
       >
     )
     PARTITION BY DATE(_PARTITIONTIME)
     OPTIONS(
       expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
       partition_expiration_days=1,
       description="a table that expires in 2020, with each partition living for 24 hours",
       labels=[("org_unit", "development")]
     )
     

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

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     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
       >
     )
     PARTITION BY DATE(_PARTITIONTIME)
     OPTIONS(
       expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
       partition_expiration_days=1,
       description="a table that expires in 2020, with each partition living for 24 hours",
       labels=[("org_unit", "development")]
     )
     

  4. [RUN QUERY] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
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
  >
)
PARTITION BY DATE(_PARTITIONTIME)
OPTIONS(
  expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
  partition_expiration_days=1,
  description="a table that expires in 2020, with each partition living for 24 hours",
  labels=[("org_unit", "development")]
)'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

既存のテーブルからの新しいテーブルの作成

CREATE TABLE ... AS SELECT DDL ステートメントは、クエリからテーブルを作成します。テーブル名がデータセット内に存在する場合は、次のエラーが返されます。

Already Exists: project_id:dataset.table

次の例は、mydataset 内に top_words という名前のテーブルを作成します。デフォルト プロジェクトを構成していない場合は、`project_id.dataset.table`(バッククォートを含む)の形式でプロジェクト ID をデータセット名の前に追加します(例: `myproject.mydataset.rainy_days`)。

テーブル スキーマには次の 2 つの列があります。

  • corpus - シェイクスピア全集の名前
  • top_words - wordSTRING)と word_count(単語数を表す INT64)の 2 つのフィールドを持つ STRUCTARRAY

テーブル オプション リストで指定する内容は次のとおりです。

  • 説明 - シェイクスピア全集ごとの出現頻度が高い上位 10 個の単語

DDL を使用して新しいテーブルを作成するには:

Console

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

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

    クエリの新規作成

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

     CREATE TABLE mydataset.top_words
     OPTIONS(
       description="Top ten words per Shakespeare corpus"
     ) AS
     SELECT
       corpus,
       ARRAY_AGG(STRUCT(word, word_count) ORDER BY word_count DESC LIMIT 10) AS top_words
     FROM bigquery-public-data.samples.shakespeare
     GROUP BY corpus;

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

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     CREATE TABLE mydataset.top_words
     OPTIONS(
       description="Top ten words per Shakespeare corpus"
     ) AS
     SELECT
       corpus,
       ARRAY_AGG(STRUCT(word, word_count) ORDER BY word_count DESC LIMIT 10) AS top_words
     FROM bigquery-public-data.samples.shakespeare
     GROUP BY corpus;

  4. [RUN QUERY] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
     CREATE TABLE mydataset.top_words
     OPTIONS(
       description="Top ten words per Shakespeare corpus"
     ) AS
     SELECT
       corpus,
       ARRAY_AGG(STRUCT(word, word_count)
                 ORDER BY word_count DESC LIMIT 10) AS top_words
     FROM `bigquery-public-data.samples.shakespeare`
     GROUP BY corpus;'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

テーブルが存在しない場合にのみテーブルを作成

CREATE TABLE IF NOT EXISTS DDL ステートメントは、テーブル名がデータセットに存在しない場合にのみ、指定されたオプションでテーブルを作成します。テーブル名がデータセットに存在する場合、エラーは返されず、アクションも実行されません。

次の例は、mydataset 内に newtable という名前のテーブルが存在しない場合にのみ、mydataset 内に newtable という名前のテーブルを作成します。デフォルト プロジェクトを構成していない場合は、`project_id.dataset.table`(バッククォートを含む)の形式でプロジェクト ID をデータセット名の前に追加します(例: `myproject.mydataset.newtable`)。

テーブル スキーマには次の 2 つの列があります。

  • x - 整数
  • y - a(文字列の配列)と b(ブール値)を持つ STRUCT

テーブル オプション リストで指定する内容は次のとおりです。

  • 有効期限 - 2020 年 1 月 1 日 00:00:00 UTC
  • 説明 - 2020 年に期限が切れるテーブル
  • ラベル - org_unit = development

テーブル名がデータセットに存在しない場合にのみ DDL を使用して新しいテーブルを作成するには:

Console

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

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

    クエリの新規作成

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

     CREATE TABLE IF NOT EXISTS mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, 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. [実行] をクリックします。クエリが完了すると、テーブルが [リソース] ペインに表示されます。

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     CREATE TABLE IF NOT EXISTS mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, 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. [RUN QUERY] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
CREATE TABLE IF NOT EXISTS mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, b BOOL>)
 OPTIONS(
   expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
   description="a table that expires in 2020",
   labels=[("org_unit", "development")]
 )'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

テーブルの作成または置換

CREATE OR REPLACE TABLE DDL ステートメントは、指定されたオプションでテーブルを作成します。テーブル名がデータセット内に存在する場合、そのテーブルは空のテーブルで上書きされます。

次の例は、mydataset 内に newtable という名前のテーブルを作成し、mydataset 内に newtable が存在する場合はそれを上書きします。デフォルト プロジェクトを構成していない場合は、`project_id.dataset.table`(バッククォートを含む)の形式でプロジェクト ID をデータセット名の前に追加します(例: `myproject.mydataset.newtable`)。

テーブル スキーマには次の 2 つの列があります。

  • x - 整数
  • y - a(文字列の配列)と b(ブール値)を持つ STRUCT

テーブル オプション リストで指定する内容は次のとおりです。

  • 有効期限 - 2020 年 1 月 1 日 00:00:00 UTC
  • 説明 - 2020 年に期限が切れるテーブル
  • ラベル - org_unit = development

DDL を使用して新しいテーブルを作成し、同じ名前のテーブルを上書きするには:

Console

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

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

    クエリの新規作成

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

     CREATE OR REPLACE TABLE mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, 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. [実行] をクリックします。

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     CREATE OR REPLACE TABLE mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, 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. [RUN QUERY] をクリックします。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
CREATE OR REPLACE TABLE mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, b BOOL>)
 OPTIONS(
   expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
   description="a table that expires in 2020",
   labels=[("org_unit", "development")]
 )'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

REQUIRED 列を持つテーブルの作成

NOT NULL ステートメントの列定義リスト内の CREATE TABLE 修飾子は、列またはフィールドが REQUIRED モードで作成されることを指定します。

次の例は、mydataset 内に newtable という名前のテーブルを作成します。テーブル名がデータセット内に存在する場合は、次のエラーが返されます。

Already Exists: project_id:dataset.table

デフォルト プロジェクトを構成していない場合は、`project_id.dataset.table`(バッククォートを含む)の形式でプロジェクト ID をデータセット名の前に追加します(例: `myproject.mydataset.newtable`)。

テーブル スキーマには次の 3 つの列があります。

  • x - REQUIRED の整数
  • y - a(文字列の配列)、b(REQUIRED のブール値)、c(NULLABLE の float)を持つ REQUIRED の STRUCT
  • z - NULLABLE の文字列

DDL を使用して REQUIRED 列を持つ新しいテーブルを作成するには:

Console

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

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

    クエリの新規作成

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

     CREATE TABLE my_dataset.new_table (
       x INT64 NOT NULL,
       y STRUCT<
         a ARRAY<STRING>,
         b BOOL NOT NULL,
         c FLOAT64
       > NOT NULL,
       z STRING
     )
     

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

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     CREATE TABLE my_dataset.new_table (
       x INT64 NOT NULL,
       y STRUCT<
         a ARRAY<STRING>,
         b BOOL NOT NULL,
         c FLOAT64
       > NOT NULL,
       z STRING
     )
     

  4. [RUN QUERY] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
 CREATE TABLE my_dataset.new_table (
   x INT64 NOT NULL,
   y STRUCT<
     a ARRAY<STRING>,
     b BOOL NOT NULL,
     c FLOAT64
   > NOT NULL,
   z STRING
 )'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

パーティション分割テーブルの作成

次の例では、DATE 列を使用した newtable という名前のパーティション分割テーブルmydataset 内に作成します。デフォルト プロジェクトを構成していない場合は、`project_id.dataset.table`(バッククォートを含む)の形式でプロジェクト ID をデータセット名の前に追加します(例: `myproject.mydataset.newtable`)。

テーブル スキーマには次の 2 つの列があります。

  • transaction_id - 整数
  • transaction_date - 日付

テーブル オプション リストで指定する内容は次のとおりです。

  • パーティション有効期限 - 3 日
  • 説明 - transaction_date ごとに分割されたテーブル

DDL を使用して新しいテーブルを作成するには:

Console

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

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

    クエリの新規作成

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

     CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE)
     PARTITION BY transaction_date
     OPTIONS(
       partition_expiration_days=3,
       description="a table partitioned by transaction_date"
     )
     

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

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE)
     PARTITION BY transaction_date
     OPTIONS(
       partition_expiration_days=3,
       description="a table partitioned by transaction_date"
     )
     

  4. [RUN QUERY] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE)
PARTITION BY transaction_date
OPTIONS(
  partition_expiration_days=3,
  description="a table partitioned by transaction_date"
)'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

クエリ結果からのパーティション分割テーブルの作成

次の例では、DATE 列を使用した days_with_rain という名前のパーティション分割テーブルmydataset 内に作成します。デフォルト プロジェクトを構成していない場合は、`project_id.dataset.table`(バッククォートを含む)の形式でプロジェクト ID をデータセット名の前に追加します(例: `myproject.mydataset.newtable`)。

テーブル スキーマには次の 2 つの列があります。

  • date - データ収集日(DATE
  • station_name - 気象観測所の名前(STRING
  • prcp - インチ単位の降水量(FLOAT64

テーブル オプション リストで指定する内容は次のとおりです。

  • パーティションの有効期限 - 1 年間
  • 説明 - 降水量が測定される気象観測所(日ごとに分割)

DDL を使用して新しいテーブルを作成するには:

Console

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

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

    クエリの新規作成

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

     CREATE TABLE mydataset.days_with_rain
     PARTITION BY date
     OPTIONS (
       partition_expiration_days=365,
       description="weather stations with precipitation, partitioned by day"
     ) AS
     SELECT
       DATE(CAST(year AS INT64), CAST(mo AS INT64), CAST(da AS INT64)) AS date,
       (SELECT ANY_VALUE(name) FROM `bigquery-public-data.noaa_gsod.stations` AS stations
        WHERE stations.usaf = stn) AS station_name,  -- Stations may have multiple names
       prcp
     FROM `bigquery-public-data.noaa_gsod.gsod2017` AS weather
     WHERE prcp != 99.9  -- Filter unknown values
       AND prcp > 0      -- Filter stations/days with no precipitation
     

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

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     CREATE TABLE mydataset.days_with_rain
     PARTITION BY date
     OPTIONS (
       partition_expiration_days=365,
       description="weather stations with precipitation, partitioned by day"
     ) AS
     SELECT
       DATE(CAST(year AS INT64), CAST(mo AS INT64), CAST(da AS INT64)) AS date,
       (SELECT ANY_VALUE(name) FROM `bigquery-public-data.noaa_gsod.stations` AS stations
        WHERE stations.usaf = stn) AS station_name,  -- Stations may have multiple names
       prcp
     FROM `bigquery-public-data.noaa_gsod.gsod2017` AS weather
     WHERE prcp != 99.9  -- Filter unknown values
       AND prcp > 0      -- Filter stations/days with no precipitation
     

  4. [RUN QUERY] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
CREATE TABLE mydataset.days_with_rain
PARTITION BY date
OPTIONS (
  partition_expiration_days=365,
  description="weather stations with precipitation, partitioned by day"
) AS
SELECT
  DATE(CAST(year AS INT64), CAST(mo AS INT64), CAST(da AS INT64)) AS date,
  (SELECT ANY_VALUE(name) FROM `bigquery-public-data.noaa_gsod.stations` AS stations
   WHERE stations.usaf = stn) AS station_name,  -- Stations may have multiple names
  prcp
FROM `bigquery-public-data.noaa_gsod.gsod2017` AS weather
WHERE prcp != 99.9  -- Filter unknown values
  AND prcp > 0      -- Filter stations/days with no precipitation
'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

クラスタ化テーブルの作成

例 1

次の例では、myclusteredtable という名前のクラスタ化テーブルmydataset 内に作成します。このテーブルは TIMESTAMP 列によって分割されたパーティション分割テーブルであり、customer_id という名前の STRING 列によってクラスタ化されています。

デフォルト プロジェクトを構成していない場合は、`project_id.dataset.table`(バッククォートを含む)の形式でプロジェクト ID をデータセット名の前に追加します(例: `myproject.mydataset.myclusteredtable`)。

テーブル スキーマには次の 3 つの列があります。

  • timestamp - データ収集日(TIMESTAMP
  • customer_id - お客様 ID(STRING
  • transaction_amount - 取引金額(NUMERIC

テーブル オプション リストで指定する内容は次のとおりです。

  • パーティションの有効期限 - 3 日
  • 説明 - 「customer_id でクラスタ化されたテーブル」

DDL ステートメントを使用して、クラスタ化テーブルを作成するには:

Console

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

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

    クエリの新規作成

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

     CREATE TABLE mydataset.myclusteredtable
     (
       timestamp TIMESTAMP,
       customer_id STRING,
       transaction_amount NUMERIC
     )
     PARTITION BY DATE(timestamp)
     CLUSTER BY customer_id
     OPTIONS (
       partition_expiration_days=3,
       description="a table clustered by customer_id"
     )

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

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に CREATE TABLE DDL ステートメントを入力します。

     #standardSQL
     CREATE TABLE mydataset.myclusteredtable
     (
       timestamp TIMESTAMP,
       customer_id STRING,
       transaction_amount NUMERIC
     )
     PARTITION BY DATE(timestamp)
     CLUSTER BY customer_id
     OPTIONS (
       partition_expiration_days=3,
       description="a table clustered by customer_id"
     )

  4. [RUN QUERY] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
CREATE TABLE mydataset.myclusteredtable
(
  timestamp TIMESTAMP,
  customer_id STRING,
  transaction_amount NUMERIC
)
PARTITION BY DATE(timestamp)
CLUSTER BY customer_id
OPTIONS (
  partition_expiration_days=3,
  description="a table clustered by customer_id"
)'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

例 2

次の例では、myclusteredtable という名前のクラスタ化テーブルmydataset 内に作成します。このテーブルは取り込み時間パーティション分割テーブルです。

デフォルト プロジェクトを構成していない場合は、`project_id.dataset.table`(バッククォートを含む)の形式でプロジェクト ID をデータセット名の前に追加します(例: `myproject.mydataset.myclusteredtable`)。

テーブル スキーマには次の 3 つの列があります。

  • timestamp - データ収集日(TIMESTAMP
  • customer_id - お客様 ID(STRING
  • transaction_amount - 取引金額(NUMERIC

テーブル オプション リストで指定する内容は次のとおりです。

  • パーティションの有効期限 - 3 日
  • 説明 - 「customer_id でクラスタ化されたテーブル」

DDL ステートメントを使用して、クラスタ化テーブルを作成するには:

Console

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

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

    クエリの新規作成

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

     CREATE TABLE mydataset.myclusteredtable
     (
       timestamp TIMESTAMP,
       customer_id STRING,
       transaction_amount NUMERIC
     )
     PARTITION BY DATE(_PARTITIONTIME)
     CLUSTER BY
       customer_id
     OPTIONS (
       partition_expiration_days=3,
       description="a table clustered by customer_id"
     )

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

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に CREATE TABLE DDL ステートメントを入力します。

     CREATE TABLE mydataset.myclusteredtable
     (
       timestamp TIMESTAMP,
       customer_id STRING,
       transaction_amount NUMERIC
     )
     PARTITION BY DATE(_PARTITIONTIME)
     CLUSTER BY
       customer_id
     OPTIONS (
       partition_expiration_days=3,
       description="a table clustered by customer_id"
     )

  4. [RUN QUERY] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
CREATE TABLE mydataset.myclusteredtable
(
  timestamp TIMESTAMP,
  customer_id STRING,
  transaction_amount NUMERIC
)
PARTITION BY DATE(_PARTITIONTIME)
CLUSTER BY
  customer_id
OPTIONS (
  partition_expiration_days=3,
  description="a table clustered by customer_id"
)'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

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

次の例では、クエリの結果を使用して myclusteredtable という名前のクラスタ化テーブルmydataset 内に作成します。このテーブルは、TIMESTAMP 列によって分割されたパーティション分割テーブルです。

デフォルト プロジェクトを構成していない場合は、`project_id.dataset.table`(バッククォートを含む)の形式でプロジェクト ID をデータセット名の前に追加します(例: `myproject.mydataset.myclusteredtable`)。

テーブル スキーマには次の 3 つの列があります。

  • timestamp - データ収集日(TIMESTAMP
  • customer_id - お客様 ID(STRING
  • transaction_amount - 取引金額(NUMERIC

テーブル オプション リストで指定する内容は次のとおりです。

  • パーティションの有効期限 - 3 日
  • 説明 - 「customer_id でクラスタ化されたテーブル」

DDL ステートメントを使用して、クラスタ化テーブルを作成するには:

Console

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

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

    クエリの新規作成

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

     CREATE TABLE mydataset.myclusteredtable
     (
       timestamp TIMESTAMP,
       customer_id STRING,
       transaction_amount NUMERIC
     )
     PARTITION BY DATE(timestamp)
     CLUSTER BY
       customer_id
     OPTIONS (
       partition_expiration_days=3,
       description="a table clustered by customer_id"
     )
     AS SELECT * FROM mydataset.myothertable

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

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に CREATE TABLE DDL ステートメントを入力します。

     #standardSQL
     CREATE TABLE mydataset.myclusteredtable
     (
       timestamp TIMESTAMP,
       customer_id STRING,
       transaction_amount NUMERIC
     )
     PARTITION BY DATE(timestamp)
     CLUSTER BY
       customer_id
     OPTIONS (
       partition_expiration_days=3,
       description="a table clustered by customer_id"
     )
     AS SELECT * FROM mydataset.myothertable

  4. [RUN QUERY] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
CREATE TABLE mydataset.myclusteredtable
  (
    timestamp TIMESTAMP,
    customer_id STRING,
    transaction_amount NUMERIC
  )
PARTITION BY DATE(timestamp)
CLUSTER BY
  customer_id
OPTIONS (
  partition_expiration_days=3,
  description="a table clustered by customer_id"
)
AS SELECT * FROM mydataset.myothertable'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

CREATE VIEW ステートメント

BigQuery でビューを作成するには CREATE VIEW DDL ステートメントを使用します。

構文

{CREATE VIEW | CREATE VIEW IF NOT EXISTS | CREATE OR REPLACE VIEW}
view_name
[OPTIONS(view_option_list)]
AS query_expression

ここで

{CREATE VIEW | CREATE VIEW IF NOT EXISTS | CREATE OR REPLACE VIEW} は、次のステートメントのいずれかです。

  • CREATE VIEW - 新しいビューを作成します。
  • CREATE VIEW IF NOT EXISTS - 指定したデータセット内にそのビューが存在しない場合にのみ、新しいビューを作成します。
  • CREATE OR REPLACE VIEW - 指定したデータセット内にビューを作成し、同じ名前のビューが存在する場合は置き換えます。

view_name は、作成するビューの名前です。ビュー名は、データセット内で一意である必要があります。ビュー名には次の制限があります。

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

view_option_list を使用すると、ラベルや有効期限などのビュー作成オプションを追加で指定できます。

CREATE VIEW ステートメントは、以下の規則に従う必要があります。

  • 使用できる CREATE ステートメントは 1 つのみ。

query_expression は、ビューの定義に使用される標準 SQL クエリ式です。

view_option_list

オプション リストを使用すると、ラベルや有効期限などのビュー オプションを設定できます。カンマ区切りのリストを使用して複数のオプションを含めることができます。

ビュー オプション リストは次の形式で指定します。

NAME=VALUE, ...

NAMEVALUE は、次のいずれかの組み合わせである必要があります。

NAME VALUE 詳細
expiration_timestamp TIMESTAMP

例: expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC"

このプロパティは、expirationTime テーブル リソース プロパティと同等です。

friendly_name

STRING

例: friendly_name="my_view"

このプロパティは、friendlyName テーブル リソース プロパティと同等です。

description

STRING

例: description="a view that expires in 2020"

このプロパティは、description テーブル リソース プロパティと同等です。

labels

ARRAY<STRUCT<STRING, STRING>>

例: labels=[("org_unit", "development")]

このプロパティは、labels テーブル リソース プロパティと同等です。

VALUE は、リテラル、クエリ パラメータ、スカラー関数のみを含む定数式です。定数式が null と評価された場合、対応するオプション NAME は無視されます。

定数式には以下を含めることはできません

  • テーブルへの参照
  • サブクエリ、または SELECTCREATEUPDATE などの SQL 文
  • ユーザー定義関数、集計関数、または分析関数
  • 以下のスカラー関数
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

新しいビューの作成

CREATE VIEW DDL ステートメントは、指定されたオプションでビューを作成します。ビュー名がデータセット内に存在する場合、次のエラーが返されます。

Already Exists: project_id:dataset.table

次の例は、mydataset 内に newview という名前のビューを作成します。DDL ステートメントを使用してビューを作成するときは、`project_id.dataset.table`(バッククォートを含む)の形式でプロジェクト、データセット、ビューを指定する必要があります(例: `myproject.mydataset.newview`)。

ビューの定義には次の標準 SQL クエリを使用します。

SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`

ビュー オプション リストで指定する内容は次のとおりです。

  • 有効期限 - ビューが作成されてから 48 時間
  • わかりやすい名前 - newview
  • 説明 - 2 日後に有効期限が切れるビュー
  • ラベル - org_unit = development

DDL を使用して新しいビューを作成するには:

Console

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

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

    クエリの新規作成

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

     CREATE VIEW `myproject.mydataset.newview`
     OPTIONS(
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
       friendly_name="newview",
       description="a view that expires in 2 days",
       labels=[("org_unit", "development")]
     )
     AS SELECT column_1, column_2, column_3 FROM myproject.mydataset.mytable
     

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

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     CREATE VIEW `myproject.mydataset.newview`
     OPTIONS(
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
       friendly_name="newview",
       description="a view that expires in 2 days",
       labels=[("org_unit", "development")]
     )
     AS SELECT column_1, column_2, column_3 FROM myproject.mydataset.mytable
     

  4. [RUN QUERY] をクリックします。クエリが完了すると、ビューがナビゲーション パネルに表示されます。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
CREATE TABLE `myproject.mydataset.newview`
 OPTIONS(
   expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
   friendly_name="newview",
   description="a view that expires in 2 days",
   labels=[("org_unit", "development")]
 )
 AS SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

Java

BigQuery.create() メソッドを呼び出して、クエリジョブを開始します。Job.waitFor() メソッドを呼び出して、DDL クエリが完了するまで待ちます。

// import com.google.cloud.bigquery.*;
// String projectId = "my-project";
// String datasetId = "my_dataset";
// String tableId = "new_view";
// BigQuery bigquery = BigQueryOptions.getDefaultInstance().toBuilder()
//     .setProjectId(projectId)
//     .build().getService();

String sql =
    String.format(
        "CREATE VIEW `%s.%s.%s`\n"
            + "OPTIONS(\n"
            + "  expiration_timestamp=TIMESTAMP_ADD(\n"
            + "    CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),\n"
            + "  friendly_name=\"new_view\",\n"
            + "  description=\"a view that expires in 2 days\",\n"
            + "  labels=[(\"org_unit\", \"development\")]\n"
            + ")\n"
            + "AS SELECT name, state, year, number\n"
            + "  FROM `bigquery-public-data.usa_names.usa_1910_current`\n"
            + "  WHERE state LIKE 'W%%';\n",
        projectId, datasetId, tableId);

// Make an API request to run the query job.
Job job = bigquery.create(JobInfo.of(QueryJobConfiguration.newBuilder(sql).build()));

// Wait for the query to finish.
job = job.waitFor();

QueryJobConfiguration jobConfig = (QueryJobConfiguration) job.getConfiguration();
System.out.printf(
    "Created new view \"%s.%s.%s\".\n",
    jobConfig.getDestinationTable().getProject(),
    jobConfig.getDestinationTable().getDataset(),
    jobConfig.getDestinationTable().getTable());

Python

Client.query() メソッドを呼び出して、クエリジョブを開始します。QueryJob.result() メソッドを呼び出し、DDL クエリが完了するまで待ちます。

# from google.cloud import bigquery
# project = 'my-project'
# dataset_id = 'my_dataset'
# table_id = 'new_view'
# client = bigquery.Client(project=project)

sql = """
CREATE VIEW `{}.{}.{}`
OPTIONS(
    expiration_timestamp=TIMESTAMP_ADD(
        CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
    friendly_name="new_view",
    description="a view that expires in 2 days",
    labels=[("org_unit", "development")]
)
AS SELECT name, state, year, number
    FROM `bigquery-public-data.usa_names.usa_1910_current`
    WHERE state LIKE 'W%'
""".format(
    project, dataset_id, table_id
)

job = client.query(sql)  # API request.
job.result()  # Waits for the query to finish.

print(
    'Created new view "{}.{}.{}".'.format(
        job.destination.project,
        job.destination.dataset_id,
        job.destination.table_id,
    )
)

ビューが存在しない場合にのみビューを作成

CREATE VIEW IF NOT EXISTS DDL ステートメントは、ビュー名がデータセットに存在しない場合にのみ、指定されたオプションでビューを作成します。ビュー名がデータセットに存在する場合、エラーは返されず、アクションも実行されません。

次の例は、mydataset 内に newview という名前のビューが存在しない場合にのみ、mydataset 内に newview という名前のビューを作成します。DDL ステートメントを使用してビューを作成するときは、`project_id.dataset.table`(バッククォートを含む)の形式でプロジェクト、データセット、ビューを指定する必要があります(例: `myproject.mydataset.newview`)。

ビューの定義には次の標準 SQL クエリを使用します。

SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`

ビュー オプション リストで指定する内容は次のとおりです。

  • 有効期限 - ビューが作成されてから 48 時間
  • わかりやすい名前 - newview
  • 説明 - 2 日後に有効期限が切れるビュー
  • ラベル - org_unit = development

ビュー名がデータセットに存在しない場合にのみ、DDL を使用して新しいビューを作成するには:

Console

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

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

    クエリの新規作成

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

     CREATE VIEW IF NOT EXISTS `myproject.mydataset.newview`
     OPTIONS(
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
       friendly_name="newview",
       description="a view that expires in 2 days",
       labels=[("org_unit", "development")]
     )
     AS SELECT column_1, column_2, column_3 FROM myproject.mydataset.mytable
     

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

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     CREATE VIEW IF NOT EXISTS `myproject.mydataset.newview`
     OPTIONS(
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
       friendly_name="newview",
       description="a view that expires in 2 days",
       labels=[("org_unit", "development")]
     )
     AS SELECT column_1, column_2, column_3 FROM myproject.mydataset.mytable
     

  4. [RUN QUERY] をクリックします。クエリが完了すると、ビューがナビゲーション パネルに表示されます。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
CREATE VIEW IF NOT EXISTS `myproject.mydataset.newview`
 OPTIONS(
   expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
   friendly_name="newview",
   description="a view that expires in 2 days",
   labels=[("org_unit", "development")]
 )
 AS SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

ビューの作成または置換

CREATE OR REPLACE VIEW DDL ステートメントは、指定されたオプションでビューを作成します。ビュー名がデータセットに存在する場合は、指定されたクエリ式を使用してそのビューが上書きされます。

次の例は、mydataset 内に newview という名前のビューを作成し、mydatasetnewview が存在する場合はそれを上書きします。DDL ステートメントを使用してビューを作成するときは、`project_id.dataset.table`(バッククォートを含む)の形式でプロジェクト、データセット、ビューを指定する必要があります(例: `myproject.mydataset.newview`)。

ビューの定義には次の標準 SQL クエリを使用します。

    SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`

ビュー オプション リストで指定する内容は次のとおりです。

  • 有効期限 - ビューが作成されてから 48 時間
  • わかりやすい名前 - newview
  • 説明 - 2 日後に有効期限が切れるビュー
  • ラベル - org_unit = development

DDL を使用して新しいビューを作成し、同じ名前のビューを上書きするには:

Console

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

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

    クエリの新規作成

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

     CREATE OR REPLACE VIEW `myproject.mydataset.newview`
     OPTIONS(
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
       friendly_name="newview",
       description="a view that expires in 2 days",
       labels=[("org_unit", "development")]
     )
     AS SELECT column_1, column_2, column_3 FROM myproject.mydataset.mytable
     

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

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     CREATE OR REPLACE VIEW `myproject.mydataset.newview`
     OPTIONS(
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
       friendly_name="newview",
       description="a view that expires in 2 days",
       labels=[("org_unit", "development")]
     )
     AS SELECT column_1, column_2, column_3 FROM myproject.mydataset.mytable
     

  4. [RUN QUERY] をクリックします。クエリが完了すると、ビューがナビゲーション パネルに表示されます。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
CREATE OR REPLACE VIEW `myproject.mydataset.newview`
 OPTIONS(
   expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
   friendly_name="newview",
   description="a view that expires in 2 days",
   labels=[("org_unit", "development")]
 )
 AS SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

CREATE FUNCTION ステートメント

BigQuery はユーザー定義関数(UDF)をサポートしています。UDF を使用すると、SQL 式または JavaScript を使用して関数を作成できます。これらの関数は入力列を受け取ってアクションを実行し、その結果を値として返します。

UDF には永続的なものと一時的なものがあります。永続的な UDF は複数のクエリで再利用できるのに対し、一時的な UDF は 1 つのクエリ内でのみ使用できます。一時的な UDF の詳細については、ユーザー定義関数のドキュメントをご覧ください。

UDF の構文

BigQuery で永続的なユーザー定義関数を作成するには、次の構文を使用します。

CREATE { FUNCTION | OR REPLACE FUNCTION | FUNCTION IF NOT EXISTS }
    dataset_name.function_name ([named_parameter[, ...]])
  [RETURNS data_type]
  { [LANGUAGE js AS javascript_code] | [AS (function_definition)] }
[OPTIONS (library = library_array)];

named_parameter:
  param_name param_type

この構文は、次のコンポーネントで構成されています。

  • CREATE { FUNCTION | OR REPLACE FUNCTION | FUNCTION IF NOT EXISTS }。新しい関数を作成します。関数には 0 個以上の named_parameter を含めることができます。同じ名前を持つ既存の関数を置き換えるには、OR REPLACE キーワードを使用します。同じ名前の関数がすでに存在する場合に実際には何もせずにクエリを成功したものとして扱うには、IF NOT EXISTS 句を使用します。
  • named_parameter。カンマで区切られた param_nameparam_type のペアで構成されます。param_type の値は BigQuery のデータ型です。SQL UDF の場合は、param_type の値を ANY TYPE にすることもできます。
  • [RETURNS data_type]。関数が返すデータ型を指定します。関数が SQL で定義されている場合、RETURNS 句は省略できます。その場合、関数の結果の型は SQL 関数の本文から推測されます。関数が JavaScript で定義されている場合、RETURNS 句は必須です。data_type に指定できる値の詳細については、サポートされている JavaScript UDF データ型をご覧ください。
  • [LANGUAGE language AS javascript_code]。JavaScript 関数の定義を指定します。
  • AS (function_definition)。関数を定義する SQL コードを指定します。function_definition は SQL 式です。
  • [OPTIONS (library = library_array)]。JavaScript UDF の関数定義に含める JavaScript ライブラリの配列を指定します。

SQL UDF の構造

次の構文を使用して、SQL UDF を作成します。

CREATE { FUNCTION | OR REPLACE FUNCTION | FUNCTION IF NOT EXISTS }
  dataset_name.function_name ([named_parameter[, ...]])
  [RETURNS data_type]
  AS (sql_expression)

named_parameter:
  param_name param_type

SQL UDF テンプレート パラメータ

関数呼び出しの際、テンプレート化されたパラメータが複数の引数型と一致する場合があります。関数のシグネチャにテンプレート化されたパラメータが含まれている場合、BigQuery では、関数呼び出しの際に複数の引数型のうちの 1 つを関数に渡すことができます。

SQL ユーザー定義関数のシグネチャには、次のテンプレート化された param_type 値を含めることができます。

  • ANY TYPE。この引数に対し、関数はあらゆる型の入力を受け入れます。ANY TYPE 型のパラメータが複数ある場合、関数の作成時にこれらの引数の間に何の関係も適用されません。ただし、呼び出し時に関数定義に適合しない型の引数を渡すと、エラーになります。

SQL UDF の例

永続的な SQL UDF を作成する例を以下に示します。これは、mydataset という名前のデータセットがアクティブ プロジェクトに存在することを前提とします。この名前のデータセットが存在しない場合は、データセットの作成に関するドキュメントをご覧ください。

CREATE FUNCTION mydataset.multiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
LANGUAGE js AS """
  return x*y;
""";

上記の CREATE FUNCTION ステートメントを実行した後、この新しい永続的なユーザー定義関数を別のクエリで使用できます。クエリエディタの内容を次のように書き換えてクエリを実行します。

WITH numbers AS
  (SELECT 1 AS x, 5 as y
  UNION ALL
  SELECT 2 AS x, 10 as y
  UNION ALL
  SELECT 3 as x, 15 as y)
SELECT x, y, mydataset.multiplyInputs(x, y) as product
FROM numbers;

上記の例では、次の出力が生成されます。

+-----+-----+--------------+
| x   | y   | product      |
+-----+-----+--------------+
| 1   | 5   | 5            |
| 2   | 10  | 20           |
| 3   | 15  | 45           |
+-----+-----+--------------+

次の例は、テンプレート パラメータを使用した永続的な SQL UDF を示します。この関数は、実行時に任意の型を受け入れます。

CREATE FUNCTION mydataset.addFourAndDivideAny(x ANY TYPE, y ANY TYPE) AS (
  (x + 4) / y
);

上記の CREATE FUNCTION ステートメントを実行した後、この新しい永続的なユーザー定義関数を別のクエリで使用できます。

SELECT addFourAndDivideAny(3, 4) AS integer_output,
       addFourAndDivideAny(1.59, 3.14) AS floating_point_output;

このクエリは次の出力を返します。

+----------------+-----------------------+
| integer_output | floating_point_output |
+----------------+-----------------------+
| 1.75           | 1.7802547770700636    |
+----------------+-----------------------+

次は、SQL UDF でテンプレート パラメータを使用して任意の型の配列の最後の要素を返す例を示します。

CREATE FUNCTION mydataset.lastArrayElement(arr ANY TYPE) AS (
  arr[ORDINAL(ARRAY_LENGTH(arr))]
);

上記の CREATE FUNCTION ステートメントを実行した後、この新しい永続的なユーザー定義関数を別のクエリで使用できます。

SELECT
  names[OFFSET(0)] AS first_name,
  lastArrayElement(names) AS last_name
FROM (
  SELECT ['Fred', 'McFeely', 'Rogers'] AS names UNION ALL
  SELECT ['Marie', 'Skłodowska', 'Curie']
);

上記のクエリは次の出力を返します。

+------------+-----------+
| first_name | last_name |
+------------+-----------+
| Fred       | Rogers    |
| Marie      | Curie     |
+------------+-----------+

JavaScript UDF の構造

永続的な JavaScript UDF を作成するには、次の構文を使用します。

CREATE { FUNCTION | OR REPLACE FUNCTION | FUNCTION IF NOT EXISTS }
  dataset_name.function_name ([named_parameter[, ...]])
  RETURNS data_type
  LANGUAGE js
  AS javascript_code

JavaScript UDF の例

CREATE TEMP FUNCTION mydataset.multiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
LANGUAGE js
AS """
  return x*y;
""";

上記の CREATE FUNCTION ステートメントを実行した後、この新しい永続的な JavaScript UDF を別のクエリで使用できます。

WITH numbers AS
  (SELECT 1 AS x, 5 as y
  UNION ALL
  SELECT 2 AS x, 10 as y
  UNION ALL
  SELECT 3 as x, 15 as y)
SELECT x, y, multiplyInputs(x, y) as product
FROM numbers;

上記の例では、次の出力が返されます。

+-----+-----+--------------+
| x   | y   | product      |
+-----+-----+--------------+
| 1   | 5   | 5            |
| 2   | 10  | 20           |
| 3   | 15  | 45           |
+-----+-----+--------------+

UDF の結果を別の UDF への入力として渡すことができます。たとえば、次のクエリで永続 UDF を作成します。

CREATE FUNCTION mydataset.multiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
LANGUAGE js
AS """
  return x*y;
""";

次に、次のクエリを実行して 2 つ目の永続 UDF を作成します。

CREATE FUNCTION mydataset.divideByTwo(x FLOAT64)
RETURNS FLOAT64
LANGUAGE js
AS """
  return x/2;
""";

これで、次のように同じクエリ内で両方の永続 UDF を使用できます。

WITH numbers AS
  (SELECT 1 AS x, 5 as y
  UNION ALL
  SELECT 2 AS x, 10 as y
  UNION ALL
  SELECT 3 as x, 15 as y)
SELECT x,
  y,
  mydataset.multiplyInputs(
    mydataset.divideByTwo(x), mydataset.divideByTwo(y)) as half_product
FROM numbers;

上記の例では、次の出力が返されます。

+-----+-----+--------------+
| x   | y   | half_product |
+-----+-----+--------------+
| 1   | 5   | 1.25         |
| 2   | 10  | 5            |
| 3   | 15  | 11.25        |
+-----+-----+--------------+

次の例では、指定された JSON 文字列内の "foo" という名前のすべてのフィールドの値を合計します。

CREATE FUNCTION mydataset.SumFieldsNamedFoo(json_row STRING)
  RETURNS FLOAT64
  LANGUAGE js
  AS """
  function SumFoo(obj) {
    var sum = 0;
    for (var field in obj) {
      if (obj.hasOwnProperty(field) &amp;&amp; obj[field] != null) {
        if (typeof obj[field] == "object") {
          sum += SumFoo(obj[field]);
        } else if (field == "foo") {
          sum += obj[field];
        }
      }
    }
    return sum;
  }
  var row = JSON.parse(json_row);
  return SumFoo(row);
  """;

上記の CREATE FUNCTION ステートメントを実行した後、この新しい永続的なユーザー定義関数を別のクエリで使用できます。

WITH Input AS (
  SELECT STRUCT(1 AS foo, 2 AS bar, STRUCT('foo' AS x, 3.14 AS foo) AS baz) AS s, 10 AS foo UNION ALL
  SELECT NULL, 4 AS foo UNION ALL
  SELECT STRUCT(NULL, 2 AS bar, STRUCT('fizz' AS x, 1.59 AS foo) AS baz) AS s, NULL AS foo
)
SELECT
  TO_JSON_STRING(t) AS json_row,
  mydataset.SumFieldsNamedFoo(TO_JSON_STRING(t)) AS foo_sum
FROM Input AS t;

上記の例では、次の出力が返されます。

+---------------------------------------------------------------------+---------+
| json_row                                                            | foo_sum |
+---------------------------------------------------------------------+---------+
| {"s":{"foo":1,"bar":2,"baz":{"x":"foo","foo":3.14}},"foo":10}       | 14.14   |
| {"s":null,"foo":4}                                                  | 4       |
| {"s":{"foo":null,"bar":2,"baz":{"x":"fizz","foo":1.59}},"foo":null} | 1.59    |
+---------------------------------------------------------------------+---------+

サポートされている JavaScript UDF データ型

BigQuery の JavaScript UDF では、次のデータ型がサポートされています。

  • ARRAY
  • BOOL
  • BYTES
  • DATE
  • FLOAT64
  • NUMERIC
  • STRING
  • STRUCT
  • TIMESTAMP

JavaScript での SQL 型エンコーディング

SQL 型には JavaScript 型への直接マッピングが用意されているものと、用意されていないものがあります。

JavaScript で 64 ビット整数型はサポートされていないため、INT64 は入力データ型としてサポートされません。代わりに、FLOAT64 を使用して整数値を数値として表すか、STRING を使用して整数値を文字列として表します。

BigQuery では、JavaScript UDF の戻り型として INT64 がサポートされています。この場合、JavaScript 関数の本体で JavaScript の数値や文字列を返すことができます。この際、BigQuery によってこれらいずれかの型が INT64 に変換されます。

BigQuery では、型は次のように表されます。

BigQuery のデータ型 JavaScript のデータ型
ARRAY ARRAY
BOOL BOOLEAN
BYTES Base64 エンコードされた STRING
FLOAT64 NUMBER
NUMERIC NUMERIC の値を IEEE 754 浮動小数点として正確に表現でき、小数部分が含まれていない場合、NUMBER としてエンコードされます。これらの値は、[-253, 253] の範囲になります。それ以外の場合、STRING としてエンコードされます。
STRING STRING
STRUCT 各 STRUCT フィールドが名前付きフィールドである OBJECT
TIMESTAMP タイムスタンプの microsecond 部が含まれるマイクロ秒フィールド付き DATE
DATE DATE

引用符のルール

JavaScript コードを引用符で囲む必要があります。コードが 1 行だけの場合は、標準の引用符付き文字列を使用できます。

CREATE FUNCTION mydataset.plusOne(x FLOAT64)
RETURNS FLOAT64
LANGUAGE js
AS "return x+1;";

スニペットに引用符が含まれている場合、またはスニペットが複数の行で構成されている場合は、三重引用符のブロックを使用します。

CREATE FUNCTION mydataset.customGreeting(a STRING)
RETURNS STRING
LANGUAGE js AS """
  var d = new Date();
  if (d.getHours() &lt; 12) {
    return 'Good Morning, ' + a + '!';
  } else {
    return 'Good Evening, ' + a + '!';
  }
  """;

JavaScript ライブラリを含める

OPTIONS セクションを使用して JavaScript UDF を拡張できます。このセクションでは、UDF の JavaScript コード ライブラリを指定できます。

CREATE FUNCTION mydataset.myFunc(a FLOAT64, b STRING)
  RETURNS STRING
  LANGUAGE js AS
  """
      // Assumes 'doInterestingStuff' is defined in one of the library files.
      return doInterestingStuff(a, b);
  """
OPTIONS (
  library="gs://my-bucket/path/to/lib1.js",
  library=["gs://my-bucket/path/to/lib2.js", "gs://my-bucket/path/to/lib3.js"]
);

SELECT mydataset.myFunc(3.14, 'foo');

上記の例では、lib1.jslib2.jslib3.js のライブラリに含まれているコードを、UDF の javascript_code セクションのどのコードからでも使用できます。ライブラリ ファイルは単一要素または配列の構文で指定できることに注意してください。

UDF とウェブ UI

BigQuery ウェブ UI を使用して、永続的なユーザー定義関数を作成できます。

永続 UDF を作成するクエリの実行

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

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

    クエリの新規作成

  3. [クエリエディタ] テキスト領域に UDF ステートメントを入力します。次に例を示します。

      CREATE FUNCTION mydataset.timesTwo(x FLOAT64)
      RETURNS FLOAT64
        LANGUAGE js AS """
        return x*2;
      """;
    
  4. [実行] をクリックします。

  5. 永続的なユーザー定義関数を作成した後、エディタの内容を、その関数を使用した新しいクエリに書き換えます。

      SELECT mydataset.timesTwo(numbers) as doubles
      FROM UNNEST([1, 2, 3, 4, 5]) AS numbers;
    
  6. [実行] をクリックします。

UDF と bq コマンドライン ツール

Cloud SDK に含まれる bq コマンドライン ツールを使用して、永続 UDF を作成できます。

永続 UDF を作成するクエリを実行するには、次の構文を使用します。

bq query --use_legacy_sql=false '
  CREATE FUNCTION mydataset.AddTwo(x INT64) AS (x + 2);
'

JavaScript UDF のベスト プラクティス

入力を事前に絞り込む

入力を UDF に渡す前に、簡単に絞り込むことができれば、クエリをより高速かつ低コストで実行できます。

永続的な変更可能状態を回避する

UDF 呼び出しで変更可能な状態を保存したり、アクセスしたりしないでください。

メモリを効率的に使用する

JavaScript 処理環境ではクエリごとに使用できるメモリが限られています。ローカル状態が多すぎると、メモリ枯渇のために UDF クエリが失敗する場合があります。

制限事項

一時的および永続的なユーザー定義関数には、次の制限が適用されます。

  • DOM オブジェクトの WindowDocumentNode、およびこれらを必要とする関数はサポート対象外です。
  • ネイティブ コードに依存する JavaScript 関数はサポートされません。
  • JavaScript ユーザー定義関数を呼び出すクエリは非決定的であるため、このようなクエリでキャッシュ内の結果を使用することはできません。
  • UDF でテーブルを参照することはできません。
  • 単一行の処理時に JavaScript UDF が出力するデータの量 - およそ 5 MB 以下。
  • ユーザー定義関数(UDF)を含むレガシー SQL クエリに対する同時実行レート上限 - 6 件の同時クエリ。
  • UDF を含むレガシー SQL クエリに対する同時実行レート上限は、インタラクティブ クエリとバッチクエリの両方が対象になります。UDF を使用したインタラクティブ クエリは、インタラクティブ クエリの同時実行レート上限に対してもカウントされます。この上限は標準 SQL クエリには適用されません。

  • クエリジョブで指定できる JavaScript UDF リソース(インライン コード blob または外部ファイルなど)の上限 - 50 個
  • 各インライン コード blob のサイズの上限 - 32 KB
  • 各外部コードリソースのサイズの上限 - 1 MB

永続的なユーザー定義関数には、次の制限が適用されます。
  • 関数名の最大文字数 - 256 文字
  • 引数の最大数 - 256 個
  • 引数名の最大文字数 - 128 文字
  • ユーザー定義関数参照チェーンの最大深度 - 16
  • STRUCT 型の引数または出力の最大深度 - 15
  • STRUCT 型の引数または出力に含まれるフィールドの UDF あたりの最大数 - 1,024 個
  • 一意の UDF とテーブル参照を合わせたクエリあたりの最大数 - 1,000。完全な展開後に、UDF ごとに一意のテーブルと UDF を合わせて 1,000 個まで参照できます。
  • CREATE FUNCTION ステートメントに含まれる JavaScript ライブラリの最大数 - 50 個
  • 含まれる JavaScript ライブラリパスの最大文字数 - 5,000 文字
  • UDF あたりの最大更新レート - 10 秒あたり 5 回。関数の作成後に、各関数を 10 秒あたり 5 回まで更新できます。
  • 各行コード blob のサイズ上限は 32 KB です。
  • 各 JavaScript コードリソースのサイズ上限は 1 MB です。
  • JavaScript のビット演算は上位 32 ビットに対してのみ行われます。
  • 1 つのデータセット内に、同じ名前を持つ永続 UDF を複数作成することはできません。ただし、UDF の名前を、同じデータセットに含まれるテーブルの名前と同じにすることはできます。
  • ある永続 UDF を別の永続 UDF から参照する場合は、データセット名の修飾子を付ける必要があります。 次に例を示します。
    CREATE FUNCTION mydataset.referringFunction() AS (mydataset.referencedFunction());
  • 永続 UDF を論理ビューから参照する場合は、プロジェクト名とデータセット名で完全修飾する必要があります。 次に例を示します。
    CREATE VIEW mydataset.sample_view AS SELECT my-project.mydataset.referencedFunction();

一時的なユーザー定義関数には、次の制限が適用されます。

  • 一時的な UDF を作成するとき、function_name にピリオドを含めることはできません。
  • 論理ビューから一時 UDF を参照することはできません。

ALTER TABLE SET OPTIONS ステートメント

BigQuery でテーブルのオプションを設定するには、ALTER TABLE SET OPTIONS DDL ステートメントを使用します。

構文

{ALTER TABLE | ALTER TABLE IF EXISTS}
table_name
SET OPTIONS(table_set_options_list)

ここで

{ALTER TABLE | ALTER TABLE IF EXISTS} は、次のステートメントのいずれかです。

  • ALTER TABLE - 既存のテーブルのオプションを変更します。
  • ALTER TABLE IF EXISTS - テーブルのオプションが存在する場合にのみ変更します。

table_name は、変更するテーブルの名前です。

table_set_options_list

オプション リストを使用すると、ラベルや有効期限などのテーブル オプションを設定できます。カンマ区切りのリストを使用して複数のオプションを含めることができます。

テーブル オプション リストは次の形式で指定します。

NAME=VALUE, ...

NAMEVALUE は、次のいずれかの組み合わせである必要があります。

NAME VALUE 詳細
expiration_timestamp TIMESTAMP

例: expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC"

このプロパティは、expirationTime テーブル リソース プロパティと同等です。

partition_expiration_days

FLOAT64

例: partition_expiration_days=7

このプロパティは、timePartitioning.expirationMs テーブル リソース プロパティと同等ですが、単位はミリ秒ではなく日数です。1 日は 86,400,000 ミリ秒または 24 時間に相当します。

このプロパティは、テーブルが分割されている場合にのみ設定できます。

require_partition_filter

BOOL

例: require_partition_filter=true

このプロパティは、timePartitioning.requirePartitionFilter テーブル リソース プロパティと同等です。

このプロパティは、テーブルが分割されている場合にのみ設定できます。

kms_key_name

STRING

例: kms_key_name="projects/project_id/locations/location/keyRings/keyring/cryptoKeys/key"

このプロパティは、encryptionConfiguration.kmsKeyName テーブル リソース プロパティと同等です。

詳細については、Cloud KMS 鍵によるデータの保護をご覧ください。

friendly_name

STRING

例: friendly_name="my_table"

このプロパティは、friendlyName テーブル リソース プロパティと同等です。

description

STRING

例: description="a table that expires in 2020"

このプロパティは、description テーブル リソース プロパティと同等です。

labels

ARRAY<STRUCT<STRING, STRING>>

例: labels=[("org_unit", "development")]

このプロパティは、labels テーブル リソース プロパティと同等です。

VALUE は、リテラル、クエリ パラメータ、スカラー関数のみを含む定数式です。定数式が null と評価された場合、対応するオプション NAME は無視されます。

定数式には以下を含めることはできません

  • テーブルへの参照
  • サブクエリ、または SELECTCREATEUPDATE などの SQL 文
  • ユーザー定義関数、集計関数、または分析関数
  • 以下のスカラー関数
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

VALUE を設定すると、オプションが存在する場合は、テーブルのそのオプションの既存の値が置き換えられます。VALUENULL に設定すると、テーブルのそのオプションの値が消去されます。

テーブルの有効期限タイムスタンプと説明の設定

次の例では、テーブルの有効期限タイムスタンプを ALTER TABLE ステートメントの実行時刻から 7 日後に設定し、説明も設定します。

Console

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

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

    クエリの新規作成

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

     ALTER TABLE mydataset.mytable
     SET OPTIONS (
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY),
       description="Table that expires seven days from now"
     )
     

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

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     ALTER TABLE mydataset.mytable
     SET OPTIONS (
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY),
       description="Table that expires seven days from now"
     )
     

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

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
ALTER TABLE mydataset.mytable
SET OPTIONS (
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY),
  description="Table that expires seven days from now"
)'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

パーティション分割テーブルにパーティション フィルタ必須の属性を設定

次の例では、パーティション分割テーブルtimePartitioning.requirePartitionFilter 属性を設定します。これを true に設定した場合、このテーブルを参照するクエリではパーティショニング列に対するフィルタを使用する必要があります。そうしないとエラーが返されます。このオプションを true に設定すると、意図したよりも多くのデータのクエリを行う際の間違いを防ぐことができます。

Console

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

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

    クエリの新規作成

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

     ALTER TABLE mydataset.mypartitionedtable
     SET OPTIONS (require_partition_filter=true)
     

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

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     ALTER TABLE mydataset.mypartitionedtable
     SET OPTIONS (require_partition_filter=true)
     

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

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
ALTER TABLE mydataset.mypartitionedtable
SET OPTIONS (require_partition_filter=true)'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

テーブルの有効期限タイムスタンプの消去

次の例では、期限切れにならないように、テーブルの有効期限タイムスタンプを消去します。

Console

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

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

    クエリの新規作成

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

     ALTER TABLE mydataset.mytable
     SET OPTIONS (expiration_timestamp=NULL)
     

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

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     ALTER TABLE mydataset.mytable
     SET OPTIONS (expiration_timestamp=NULL)
     

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

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
ALTER TABLE mydataset.mytable
SET OPTIONS (expiration_timestamp=NULL)'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

ALTER VIEW SET OPTIONS ステートメント

BigQuery のビューに対するオプションを設定するには、ALTER VIEW SET OPTIONS DDL ステートメントを使用します。

構文

{ALTER VIEW | ALTER VIEW IF EXISTS}
view_name
SET OPTIONS(view_set_options_list)

ここで

{ALTER VIEW | ALTER VIEW IF EXISTS} は、次のステートメントのいずれかです。

  • ALTER VIEW - 既存のビューのオプションを変更します。
  • ALTER VIEW IF EXISTS - ビューのオプションが存在する場合にのみ変更します。

view_name は、変更するビューの名前です。

view_set_options_list

オプション リストを使用すると、ラベルや有効期限などのビュー オプションを設定できます。カンマ区切りのリストを使用して複数のオプションを含めることができます。

ビュー オプション リストは次の形式で指定します。

NAME=VALUE, ...

NAMEVALUE は、次のいずれかの組み合わせである必要があります。

NAME VALUE 詳細
expiration_timestamp TIMESTAMP

例: expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC"

このプロパティは、expirationTime テーブル リソース プロパティと同等です。

friendly_name

STRING

例: friendly_name="my_view"

このプロパティは、friendlyName テーブル リソース プロパティと同等です。

description

STRING

例: description="a view that expires in 2020"

このプロパティは、description テーブル リソース プロパティと同等です。

labels

ARRAY<STRUCT<STRING, STRING>>

例: labels=[("org_unit", "development")]

このプロパティは、labels テーブル リソース プロパティと同等です。

VALUE は、リテラル、クエリ パラメータ、スカラー関数のみを含む定数式です。定数式が null と評価された場合、対応するオプション NAME は無視されます。

定数式には以下を含めることはできません

  • テーブルへの参照
  • サブクエリ、または SELECTCREATEUPDATE などの SQL 文
  • ユーザー定義関数、集計関数、または分析関数
  • 以下のスカラー関数
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

VALUE を設定すると、オプションが存在する場合は、ビューのそのオプションの既存の値が置き換えられます。VALUENULL に設定すると、ビューのそのオプションの値が消去されます。

ビューの有効期限タイムスタンプと説明の設定

次の例では、ビューの有効期限タイムスタンプを ALTER VIEW ステートメントの実行時刻から 7 日後に設定し、説明も設定します。

Console

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

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

    クエリの新規作成

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

     ALTER VIEW mydataset.myview
     SET OPTIONS (
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY),
       description="View that expires seven days from now"
     )
     

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

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     ALTER VIEW mydataset.myview
     SET OPTIONS (
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY),
       description="View that expires seven days from now"
     )
     

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

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
ALTER VIEW mydataset.myview
SET OPTIONS (
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY),
  description="View that expires seven days from now"
)'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

DROP TABLE ステートメント

BigQuery でテーブルを削除するには、DROP TABLE DDL ステートメントを使用します。

構文

{DROP TABLE | DROP TABLE IF EXISTS}
table_name

ここで

{DROP TABLE | DROP TABLE IF EXISTS} は、次のステートメントのいずれかです。

  • DROP TABLE - 指定したデータセット内のテーブルを削除します。
  • DROP TABLE IF EXISTS - 指定したデータセット内にそのテーブルが存在する場合にのみ削除します。

table_name は、削除するテーブルの名前です。

テーブルの削除

DROP TABLE DDL ステートメントは、指定されたデータセット内のテーブルを削除します。データセット内にそのテーブル名が存在しない場合は、次のエラーが返されます。

Error: Not found: Table myproject:mydataset.mytable

別のプロジェクトのテーブルを削除する場合は、`project_id.dataset.table`(バッククォートを含む)の形式でプロジェクト、データセット、テーブルを指定する必要があります(例: `myproject.mydataset.mytable`)。

DDL を使用してテーブルを削除するには:

Console

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

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

    クエリの新規作成

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

     DROP TABLE mydataset.mytable
     

  4. [実行] をクリックします。クエリが完了すると、テーブルが [リソース] ペインから削除されます。

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     DROP TABLE mydataset.mytable
     

  4. [RUN QUERY] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルから削除されます。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
DROP TABLE mydataset.mytable'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

テーブルが存在する場合にのみテーブルを削除

DROP TABLE IF EXISTS DDL ステートメントは、テーブルが存在する場合にのみ、指定されたデータセット内のテーブルを削除します。テーブル名がデータセットに存在しない場合、エラーは返されず、アクションも実行されません。

別のプロジェクトのテーブルを削除する場合は、`project_id.dataset.table`(バッククォートを含む)の形式でプロジェクト、データセット、テーブルを指定する必要があります(例: `myproject.mydataset.mytable`)。

テーブルが存在する場合にのみ DDL を使用してテーブルを削除するには:

Console

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

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

    クエリの新規作成

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

     DROP TABLE IF EXISTS mydataset.mytable
     

  4. [実行] をクリックします。クエリが完了すると、テーブルが [リソース] ペインから削除されます。

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     DROP TABLE IF EXISTS mydataset.mytable
     

  4. [RUN QUERY] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルから削除されます。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
DROP TABLE IF EXISTS mydataset.mytable'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

DROP VIEW ステートメント

BigQuery でビューを削除するには、DROP VIEW DDL ステートメントを使用します。

構文

{DROP VIEW | DROP VIEW IF EXISTS}
view_name

ここで

{DROP VIEW | DROP VIEW IF EXISTS} は、次のステートメントのいずれかです。

  • DROP VIEW - 指定したデータセット内のビューを削除します。
  • DROP VIEW IF EXISTS - 指定したデータセット内にそのビューが存在する場合にのみビューを削除します。

view_name は、削除するビューの名前です。

ビューの削除

DROP VIEW DDL ステートメントは、指定されたデータセット内のビューを削除します。ビュー名がデータセットに存在しない場合は、次のエラーが返されます。

Error: Not found: Table myproject:mydataset.myview

別のプロジェクトのビューを削除する場合は、`project_id.dataset.table`(バッククォートを含む)の形式でプロジェクト、データセット、ビューを指定する必要があります(例: `myproject.mydataset.myview`)。

DDL を使用してビューを削除するには:

Console

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

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

    クエリの新規作成

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

     DROP VIEW mydataset.myview
     

  4. [実行] をクリックします。クエリが完了すると、ビューが [リソース] ペインから削除されます。

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     DROP VIEW mydataset.myview
     

  4. [RUN QUERY] をクリックします。クエリが完了すると、ビューがナビゲーション パネルから削除されます。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
DROP VIEW mydataset.myview'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

ビューが存在する場合にのみビューを削除

DROP VIEW IF EXISTS DDL ステートメントは、ビューが存在する場合にのみ、指定されたデータセット内のビューを削除します。ビュー名がデータセットに存在しない場合、エラーは返されず、アクションも実行されません。

別のプロジェクトのビューを削除する場合は、`project_id.dataset.table`,(バッククォートを含む)の形式でプロジェクト、データセット、ビューを指定する必要があります(例: `myproject.mydataset.myview`)。

ビューが存在する場合にのみ DDL を使用してビューを削除するには:

Console

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

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

    クエリの新規作成

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

     DROP VIEW IF EXISTS mydataset.myview
     

  4. [実行] をクリックします。クエリが完了すると、ビューが [リソース] ペインから削除されます。

従来の UI

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

    BigQuery ウェブ UI に移動

  2. [Compose query] をクリックします。

  3. [New Query] テキスト領域に DDL ステートメントを入力します。

     #standardSQL
     DROP VIEW IF EXISTS mydataset.myview
     

  4. [RUN QUERY] をクリックします。クエリが完了すると、ビューがナビゲーション パネルから削除されます。

CLI

bq query コマンドを入力し、クエリ パラメータとして DDL ステートメントを指定します。

bq query --use_legacy_sql=false '
DROP VIEW IF EXISTS mydataset.myview'

API

jobs.query メソッドを呼び出し、リクエスト本文の query プロパティで DDL ステートメントを指定します。

DDL 機能により、ジョブリソースによって返される情報が拡張されます。 statistics.query.statementType には、DDL サポート用の次の追加の値が含まれます。

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query には次の 2 つの追加フィールドがあります。

  • ddlOperationPerformed: 実行された DDL オペレーションであり、DDL ターゲットの存在に依存する可能性があります。現在の値は次のとおりです。
    • CREATE: クエリによって DDL ターゲットが作成されました。
    • SKIP: オペレーションなし。例 - CREATE TABLE IF NOT EXISTS が送信されていて、テーブルが存在します。または DROP TABLE IF EXISTS が送信されていて、テーブルは存在しません。
    • REPLACE: クエリによって DDL ターゲットが置き換えられました。例 - CREATE OR REPLACE TABLE が送信されていて、テーブルがすでに存在しています。
    • DROP: クエリによって DDL ターゲットが削除されました。
  • ddlTargetTable: CREATE TABLE/VIEW ステートメントまたは DROP TABLE/VIEW ステートメントを送信すると、次の 3 つのフィールドを持つオブジェクトとしてターゲット テーブルが返されます。
    • "projectId": string
    • "datasetId": string
    • "tableId": string

DROP FUNCTION ステートメント

構文

DROP FUNCTION [ IF EXISTS ] [`project_name`.]dataset_name.function_name

説明

データセット dataset_name の関数 function_name を削除します。

省略可能な句

IF EXISTS: 対象の関数が指定されたデータセットに存在する場合にのみ、関数を削除します。

project_name: 対象の関数を含むプロジェクトを指定します。対象の関数が現在のプロジェクトにない場合、project_name は必須です。

次のステートメントの例では、データセット mydataset に含まれる関数 parseJsonAsStruct を削除します。

DROP FUNCTION mydataset.parseJsonAsStruct;

次のステートメントの例では、プロジェクト other_project 内のデータセット sample_dataset から関数 parseJsonAsStruct を削除します。

DROP FUNCTION `other_project`.sample_dataset.parseJsonAsStruct;
このページは役立ちましたか?評価をお願いいたします。

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

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