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

データ定義言語(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 句が存在し、列リストが存在しない場合、BigQuery は、列の名前と型を 句から判断します。
  • 列リストと as query_statement 句のいずれかで、列名が指定されている必要があります。
  • 列名を重複させることはできません。

table_name

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

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

column_name および column_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 によって xNULLABLE である dataset.newtable という名前のテーブルが作成されます。

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 _PARTITIONDATE: _PARTITIONDATE pseudo column を使用してテーブルを分割します。この構文は、AS query_statement 句がない CREATE TABLE でのみサポートされています。PARTITION BY DATE(_PARTITIONTIME) と同等です。
  • 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ステートメントの中で、TEMP または TEMPORARY キーワードを使用します。

構文

{ CREATE {TEMP|TEMPORARY} TABLE |
  CREATE {TEMP|TEMPORARY} TABLE IF NOT EXISTS |
  CREATE OR REPLACE {TEMP|TEMPORARY} TABLE } ...

TEMPTEMPORARY キーワード以外は、CREATE TABLE の構文と同じです。

一時テーブルが作成されると、現在のスクリプトの存続期間中存在し続けます。一時テーブル名は非修飾である必要があります(つまり、名前にプロジェクトまたはデータセット修飾子が付いていない)。プロシージャ内で作成された一時テーブルは、メインのスクリプトが終了するまで引き続き使用できます。

一時テーブルを作成するには、次の手順を行います。

CREATE TEMP TABLE Example
(
  x INT64,
  y STRING
);

INSERT INTO Example
VALUES (5, 'foo');

INSERT INTO Example
VALUES (6, 'bar');

SELECT *
FROM Example;

このスクリプトは、次の出力を返します。

+-----+---+-----+
| Row | x | y   |
+-----+---|-----+
| 1   | 5 | foo |
| 2   | 6 | bar |
+-----+---|-----+

スクリプトが完了する前に一時テーブルを完全に削除するには、DROP TABLE ステートメントを実行します。

CREATE TEMP TABLE foo(x INT64);
SELECT * FROM foo;  -- Succeeds
DROP TABLE foo;
SELECT * FROM foo;  -- Results in an error

デフォルトのデータセットと一緒に一時テーブルを使用する場合、非修飾テーブル名は次を参照します。

  • 一時テーブル(存在する場合)
  • デフォルトのデータセット内のテーブル(一時テーブルが存在しない場合)

例外は CREATE TABLE ステートメントです。TEMP キーワードや TEMPORARY キーワードは存在する場合のみ、ターゲット テーブルが一時テーブルと見なされます。

たとえば、次のスクリプトについて考えてみます。

-- Create table t1 in the default dataset
CREATE TABLE t1 (x INT64);

-- Create temporary table t1
CREATE TEMP TABLE t1 (x INT64);

-- This statement will select from the temporary table
SELECT * FROM t1;

-- Drop the temporary table
DROP TABLE t1;

-- Now that the temporary table is dropped, this statement will select from
-- the table in the default dataset
SELECT * FROM t1;

一時テーブルを参照していることを明示的に示すには、テーブル名に _SESSION 修飾子を指定します。

-- Create a temp table
CREATE TEMP TABLE t1 (x INT64);

-- Create a temp table using the `_SESSION` qualifier
CREATE TEMP TABLE _SESSION.t2 (x INT64);

-- Select from a temporary table using the `_SESSION` qualifier
SELECT * FROM _SESSION.t1;

存在しない一時テーブルのクエリに _SESSION 修飾子を使用すると、テーブルが存在しないことを示すエラーが返されます。たとえば、t3 という一時テーブルが存在しない場合、デフォルト データセットに t3 が存在する場合でもエラーを受信します。

一時テーブルでないテーブルを作成するために _SESSION を使用することはできません。

CREATE TABLE _SESSION.t4 (x INT64);  -- Fails

CREATE TABLE の例

新しいテーブルの作成

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

Already Exists: project_id:dataset.table

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

PARTITION BY _PARTITIONDATE という partition_expression を使用してテーブルがパーティショニング(分割)されます。この式は、_PARTITIONDATE 擬似列に日付を使用してテーブルを分割します。

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

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

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

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

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

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

Console

  1. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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 _PARTITIONDATE
     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 _PARTITIONDATE
     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 _PARTITIONDATE
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

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

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

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

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

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

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

Console

  1. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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 という名前のテーブルが存在しない場合にのみ、 内に newtable という名前のテーブルを作成します。デフォルト プロジェクトが設定されていない場合は、`project_id.dataset.table`(バッククォートを含む)という形式でデータセット名の前に追加します。たとえば、`myproject.mydataset.newtable` です。

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

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

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

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

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

Console

  1. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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 という名前のテーブルを作成し、 内に newtable が存在する場合はそれを上書きします。デフォルト プロジェクトが設定されていない場合は、`project_id.dataset.table`(バッククォートを含む)という形式でデータセット名の前に追加します。たとえば、`myproject.mydataset.newtable` です。

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

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

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

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

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

Console

  1. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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 列を持つテーブルの作成

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

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

Already Exists: project_id:dataset.table

デフォルト プロジェクトが設定されていない場合は、`project_id.dataset.table`(バッククォートを含む)という形式でデータセット名の前に追加します。たとえば、`myproject.mydataset.newtable` です。

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

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

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

Console

  1. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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`(バッククォートを含む)という形式でデータセット名の前に追加します。たとえば、`myproject.mydataset.newtable` です。

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

  • transaction_id - 整数
  • transaction_date - 日付

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

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

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

Console

  1. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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`(バッククォートを含む)という形式でデータセット名の前に追加します。たとえば、`myproject.mydataset.newtable` です。

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

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

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

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

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

Console

  1. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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`(バッククォートを含む)という形式でデータセット名の前に追加します。たとえば、`myproject.mydataset.myclusteredtable` です。

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

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

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

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

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

Console

  1. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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`(バッククォートを含む)という形式でデータセット名の前に追加します。たとえば、`myproject.mydataset.myclusteredtable` です。

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

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

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

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

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

Console

  1. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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`(バッククォートを含む)という形式でデータセット名の前に追加します。たとえば、`myproject.mydataset.myclusteredtable` です。

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

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

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

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

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

Console

  1. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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

次の例では、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. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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 という名前のビューが存在しない場合にのみ、 内に 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. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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 という名前のビューを作成し、 内に 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. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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 の構文

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

CREATE [OR REPLACE] FUNCTION [IF NOT EXISTS]
    [`project_name`.]dataset_name.function_name
    ([named_parameter[, ...]])
  [RETURNS data_type]
  { sql_function_definition | javascript_function_definition }

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

CREATE [OR REPLACE] {TEMPORARY | TEMP} FUNCTION [IF NOT EXISTS]
    function_name
    ([named_parameter[, ...]])
  [RETURNS data_type]
  { sql_function_definition | javascript_function_definition }

named_parameter:
  param_name param_type

sql_function_definition:
  AS (sql_expression)

javascript_function_definition:
  LANGUAGE js
  [OPTIONS (library = library_array)]
  AS javascript_code

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

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

SQL UDF の構造

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

CREATE [OR REPLACE] [TEMPORARY | TEMP] FUNCTION [IF NOT EXISTS]
    [[`project_name`.]dataset_name.]function_name
    ([named_parameter[, ...]])
  [RETURNS data_type]
  AS (sql_expression)

named_parameter:
  param_name param_type

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

関数が呼び出されるとき、param_type = ANY TYPE のテンプレート パラメータは複数の引数型と一致する場合があります。

  • ANY TYPE 型のパラメータが複数ある場合、BigQuery では、これらの引数間に型の関係が適用されることはありません。
  • 関数の戻り値の型を ANY TYPE に指定することはできません。省略することで sql_expression を基に自動的に決定するようにするか、明示的な型を指定する必要があります。
  • 関数定義に適合しない型の関数引数を渡すと、呼び出し時にエラーになります。

SQL UDF の例

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

CREATE FUNCTION mydataset.multiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
AS (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 [OR REPLACE] [TEMPORARY | TEMP] FUNCTION [IF NOT EXISTS]
    [[`project_name`.]dataset_name.]function_name
    ([named_parameter[, ...]])
  RETURNS data_type
  LANGUAGE js
  [OPTIONS (library = library_array)]
  AS javascript_code

data_type に指定できる値やパラメータ タイプについての詳細は、サポートされている JavaScript UDF データ型をご覧ください。

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 コードを引用符で囲む必要があります。コードが 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
  OPTIONS (
    library=["gs://my-bucket/path/to/lib1.js", "gs://my-bucket/path/to/lib2.js"]
  )
  AS
  """
      // Assumes 'doInterestingStuff' is defined in one of the library files.
      return doInterestingStuff(a, b);
  """;

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

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

UDF とウェブ UI

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

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

  1. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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);
'

CREATE PROCEDURE

構文

CREATE [OR REPLACE] PROCEDURE [IF NOT EXISTS] procedure_name (procedure_argument[, …] )
BEGIN
statement_list
END;

procedure_argument: [procedure_argument_mode] argument_name argument_type

procedure_argument_mode: IN | OUT | INOUT

説明

他のクエリから呼び出すことができるステートメントのブロックであるプロシージャを作成します。

statement_list は、BigQuery のステートメント リストです。ステートメント リストは、それぞれがセミコロンで終わる一連のステートメントです。

argument_type は、任意の有効な BigQuery のタイプです。

procedure_argument_mode は、引数が入力、出力、またはその両方のいずれであるかを指定します。

プロシージャは、それ自体を再帰的に呼び出すことができます。

引数モード

IN は、引数がプロシージャへの入力にすぎないということを示します。IN 引数には、変数または値の式のいずれかを指定できます。

OUT は、引数がプロシージャの出力であることを示します。OUT 引数は、プロシージャが開始するときに NULL に初期化されます。OUT 引数には変数を指定する必要があります。

INOUT は、引数がプロシージャからの入力と出力の両方であることを示します。INOUT 引数には変数を指定する必要があります。INOUT 引数は、プロシージャ本体で変数として参照され、新しい値が割り当てられます。

INOUTINOUT のいずれも指定されていない場合、引数は 引数として扱われます。

変数のスコープ

変数がプロシージャの外部で宣言され、INOUT 引数または OUT 引数としてプロシージャに渡され、プロシージャがその変数に新しい値を割り当てると、新しい値はプロシージャの外部に表示されます。

プロシージャ内で宣言された変数は、プロシージャ外では表示できません。逆に、プロシージャ外で宣言された変数は、プロシージャ内では表示できません。

OUT 引数または INOUT 引数には、SET を使用して値が割り当てられる場合があります。この場合、変更された値はプロシージャの外部に表示されます。プロシージャが正常に終了した場合、OUT 引数または INOUT 引数は INOUT 変数に最後に割り当てられた値になります。

一時テーブルはスクリプトの存続期間中に存在するため、プロシージャが一時テーブルを作成する場合、プロシージャの呼び出し側も一時テーブルを参照できます。

次の例では、入力引数として x を取り、出力として を返しています。delta 引数は、引数モードが指定されていないため入力引数になります。このプロシージャは、1 つのステートメントを含むブロックで構成され、2 つの入力引数の合計を x に割り当てます。

CREATE PROCEDURE mydataset.AddDelta(INOUT x INT64, delta INT64)
BEGIN
  SET x = x + delta;
END;

次の例では、上記の例の AddDelta プロシージャを呼び出しています。2 つの呼び出しの両方で、accumulator 変数を渡しています。ここで、 内の x の変化は の外に表示されるので、これらのプロシージャ呼び出しによって accumulator が合計で 8 加算されます。

DECLARE accumulator INT64 DEFAULT 0;
CALL mydataset.AddDelta(accumulator, 5);
CALL mydataset.AddDelta(accumulator, 3);
SELECT accumulator;

これにより、次の結果が返されます。

+-------------+
| accumulator |
+-------------+
|           8 |
+-------------+

次の例では、target_date を入力引数、rows_added を出力とするプロシージャ SelectFromTablesAndAppend を作成しています。このプロシージャは、クエリから一時テーブル DataForTargetDate を作成し、DataForTargetDate 内の行数を計算した結果を rows_added に代入します。次に、target_date の値を列名の 1 つとして渡して、新しい行が TargetTable に挿入されます。最後に、テーブル DataForTargetDate を削除して rows_added を返します。

CREATE PROCEDURE mydataset.SelectFromTablesAndAppend(
  target_date DATE, OUT rows_added INT64)
BEGIN
  CREATE TEMP TABLE DataForTargetDate AS
  SELECT t1.id, t1.x, t2.y
  FROM dataset.partitioned_table1 AS t1
  JOIN dataset.partitioned_table2 AS t2
  ON t1.id = t2.id
  WHERE t1.date = target_date
    AND t2.date = target_date;

  SET rows_added = (SELECT COUNT(*) FROM DataForTargetDate);

  SELECT id, x, y, target_date  -- note that target_date is a parameter
  FROM DataForTargetDate;

  DROP TABLE DataForTargetDate;
END;

次の例では、変数 rows_added を宣言し、CURRENT_DATE の値とともに上記の例の SelectFromTablesAndAppend プロシージャに引数として渡しています。追加された行数を示すメッセージが返されます。

DECLARE rows_added INT64;
CALL mydataset.SelectFromTablesAndAppend(CURRENT_DATE(), rows_added);
SELECT FORMAT('Added %d rows', rows_added);

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. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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. Cloud Console で BigQuery ウェブ UI を開きます。
    Cloud 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;

DROP PROCEDURE ステートメント

構文

DROP PROCEDURE [IF EXISTS] [`project_name`.]dataset_name.procedure_name

説明

データセット dataset_name 内のプロシージャ procedure_name を削除します。

省略可能な句

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

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

次の例のステートメントは、mydataset データセットに含まれるプロシージャ myprocedure を削除します。

DROP PROCEDURE mydataset.myProcedure;

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

DROP PROCEDURE `other-project`.sample_dataset.myprocedure;