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

データ定義言語(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 列に REPEATED モードがあり、空にすることはできますが、NULL にすることはできないため、ARRAY<INT64> NOT NULLcolumn_schema は無効です。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 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]:[DATASET].[TABLE]

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

partition_expression 式(PARTITION BY DATE(_PARTITIONTIME))を使用してテーブルを分割します。この式は、_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 を開きます。
    BigQuery ウェブ UI に移動

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

    クエリの新規作成

  3. [クエリエディタ] テキスト領域に 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. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

コマンドライン

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]:[DATASET].[TABLE]

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

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

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

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

  • 説明 - シェイクスピア全集で使用されている上位 10 単語

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

Console

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

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

    クエリの新規作成

  3. [クエリエディタ] テキスト領域に 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. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

コマンドライン

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].[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. GCP Console で BigQuery ウェブ UI を開きます。
    BigQuery ウェブ UI に移動

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

    クエリの新規作成

  3. [クエリエディタ] テキスト領域に 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. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

コマンドライン

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].[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. GCP Console で BigQuery ウェブ UI を開きます。
    BigQuery ウェブ UI に移動

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

    クエリの新規作成

  3. [クエリエディタ] テキスト領域に 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. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

コマンドライン

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]:[DATASET].[TABLE]

デフォルト プロジェクトを構成していない場合は、`[PROJECT].[DATASET].[TABLE]`(バッククォートを含む)の形式でデータセット名の前に追加します(例: `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 を開きます。
    BigQuery ウェブ UI に移動

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

    クエリの新規作成

  3. [クエリエディタ] テキスト領域に 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. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

コマンドライン

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 列を使用して mydataset 内に newtable という名前のパーティション分割テーブルを作成します。デフォルト プロジェクトを構成していない場合は、`[PROJECT].[DATASET].[TABLE]`(バッククォートを含む)の形式でデータセット名の前に追加します(例: `myproject.mydataset.newtable`)。

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

  • transaction_id - 整数
  • transaction_date - 日付

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

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

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

Console

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

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

    クエリの新規作成

  3. [クエリエディタ] テキスト領域に 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. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

コマンドライン

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 列を使用して mydataset 内に days_with_rain という名前のパーティション分割テーブルを作成します。デフォルト プロジェクトを構成していない場合は、`[PROJECT].[DATASET].[TABLE]`(バッククォートを含む)の形式でデータセット名の前に追加します(例: `myproject.mydataset.newtable`)。

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

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

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

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

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

Console

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

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

    クエリの新規作成

  3. [クエリエディタ] テキスト領域に 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. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

コマンドライン

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

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

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

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

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

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

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

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

Console

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

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

    クエリの新規作成

  3. [クエリエディタ] テキスト領域に 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. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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. [Show Options] をクリックします。

  5. (省略可)[Processing Location] で [Unspecified] をクリックし、データのロケーションを選択します。

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

コマンドライン

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

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

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

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

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

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

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

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

Console

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

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

    クエリの新規作成

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

     #standardSQL
     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. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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(_PARTITIONTIME)
     CLUSTER BY
       customer_id
     OPTIONS (
       partition_expiration_days=3,
       description="a table clustered by customer_id"
     )

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

  5. (省略可)[Processing Location] で [Unspecified] をクリックし、データのロケーションを選択します。

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

コマンドライン

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

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

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

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

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

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

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

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

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

Console

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

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

    クエリの新規作成

  3. [クエリエディタ] テキスト領域に 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. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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. [Show Options] をクリックします。

  5. (省略可)[Processing Location] で [Unspecified] をクリックし、データのロケーションを選択します。

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

コマンドライン

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]:[DATASET].[VIEW]

次の例は、mydataset 内に newview という名前のビューを作成します。DDL ステートメントを使用してビューを作成する場合、プロジェクト、データセット、ビューを `[PROJECT].[DATASET].[VIEW]`(バッククォートを含む)の形式で指定する必要があります(例: `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 を開きます。
    BigQuery ウェブ UI に移動

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

    クエリの新規作成

  3. [クエリエディタ] テキスト領域に 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. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

コマンドライン

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].[DATASET].[VIEW]`(バッククォートを含む)の形式で指定する必要があります(例: `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 を開きます。
    BigQuery ウェブ UI に移動

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

    クエリの新規作成

  3. [クエリエディタ] テキスト領域に 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. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

コマンドライン

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].[DATASET].[VIEW]`(バッククォートを含む)の形式で指定する必要があります(例: `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 を開きます。
    BigQuery ウェブ UI に移動

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

    クエリの新規作成

  3. [クエリエディタ] テキスト領域に 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. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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] をクリックします。クエリが完了すると、テーブルがナビゲーション パネルに表示されます。

コマンドライン

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 ステートメント

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

レガシー SQL のユーザー定義関数については、レガシー SQL のユーザー定義関数をご覧ください。

UDF は一時的でも永続的でもかまいません。一時的な UDF は、現在のクエリまたはコマンドライン セッションでのみ使用できます。

一般的な UDF 構文

Google BigQuery のユーザー定義関数は、次の一般的な構文を使用します。

CREATE { [TEMPORARY | TEMP] FUNCTION | OR REPLACE [TEMPORARY | TEMP] FUNCTION |
    [TEMPORARY | TEMP] FUNCTION IF NOT EXISTS }
    function_name ([named_parameter[, ...]])
  [RETURNS data_type]
  { [LANGUAGE language AS """body"""] | [AS (function_definition)] }
[OPTIONS (library = library_array)];

named_parameter:
  param_name param_type

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

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

SQL UDF の構造

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

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

named_parameter:
  param_name param_type

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

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

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

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

SQL UDF の例

次の例では、UDF を作成します。

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

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

TEMP または TEMPORARY キーワードを使用すると、この関数を一時的に作成できます。

次の例は、SQL 関数を使用する UDF を示しています。

CREATE TEMP FUNCTION addFourAndDivide(x INT64, y INT64) AS ((x + 4) / y);

WITH numbers AS
  (SELECT 1 as val
  UNION ALL
  SELECT 3 as val
  UNION ALL
  SELECT 4 as val
  UNION ALL
  SELECT 5 as val)
SELECT val, addFourAndDivide(val, 2) AS result
FROM numbers;

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

+-----+--------+
| val | result |
+-----+--------+
| 1   | 2.5    |
| 3   | 3.5    |
| 4   | 4      |
| 5   | 4.5    |
+-----+--------+

次に示すのはテンプレート パラメータを使用した SQL UDF の例です。関数の実行時にさまざまな型の引数を受け入れています。

CREATE TEMP FUNCTION addFourAndDivideAny(x ANY TYPE, y ANY TYPE) AS (
  (x + 4) / y
);
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 TEMP FUNCTION lastArrayElement(arr ANY TYPE) AS (
  arr[ORDINAL(ARRAY_LENGTH(arr))]
);
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 { [TEMPORARY | TEMP] FUNCTION | OR REPLACE [TEMPORARY | TEMP] FUNCTION |
    [TEMPORARY | TEMP] FUNCTION IF NOT EXISTS } function_name ([named_parameter[, ...]])
  [RETURNS data_type]
  LANGUAGE js
  AS javascript_code

JavaScript UDF の例

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

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 を作成できます。次に例を示します。

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

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

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,
  divideByTwo(x) as half_x,
  divideByTwo(y) as half_y
FROM numbers;

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

+-----+-----+--------------+--------+--------+
| x   | y   | product      | half_x | half_y |
+-----+-----+--------------+--------+--------+
| 1   | 5   | 5            | 0.5    | 2.5    |
| 2   | 10  | 20           | 1      | 5      |
| 3   | 15  | 45           | 1.5    | 7.5    |
+-----+-----+--------------+--------+--------+

UDF の結果を別の UDF への入力として渡すことができます。次に例を示します。

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

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

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(divideByTwo(x), 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 TEMP FUNCTION 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);
  """;

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,
  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 データ型

JavaScript UDF では、BigQuery は次のデータ型をサポートします。

  • 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 TEMP FUNCTION plusOne(x FLOAT64)
RETURNS FLOAT64
LANGUAGE js
AS "return x+1;";

SELECT val, plusOne(val) AS result
FROM UNNEST([1, 2, 3, 4, 5]) AS val;

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

+-----------+-----------+
| val       | result    |
+-----------+-----------+
| 1         | 2         |
| 2         | 3         |
| 3         | 4         |
| 4         | 5         |
| 5         | 6         |
+-----------+-----------+

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

CREATE TEMP FUNCTION 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 + '!';
  }
  """;
SELECT customGreeting(names) as everyone
FROM UNNEST(["Hannah", "Max", "Jakob"]) AS names;

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

+-----------------------+
| everyone              |
+-----------------------+
| Good Morning, Hannah! |
| Good Morning, Max!    |
| Good Morning, Jakob!  |
+-----------------------+

JavaScript ライブラリを含める

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

CREATE TEMP FUNCTION 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 myFunc(3.14, 'foo');</code></pre>

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

UDF とウェブ UI

1 つ以上の UDF を使用してクエリを実行するには BigQuery ウェブ UI を使用できます。

UDF によるクエリの実行

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

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

    クエリの新規作成

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

      CREATE TEMPORARY FUNCTION timesTwo(x FLOAT64)
      RETURNS FLOAT64
        LANGUAGE js AS """
        return x*2;
      """;
    
  4. UDF ステートメントの下にクエリを入力します。次に例を示します。

      SELECT timesTwo(numbers) as doubles
      FROM UNNEST([1, 2, 3, 4, 5]) AS numbers;
    
  5. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

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

Google Cloud SDKbq コマンドライン ツールを使用して、1 つ以上の UDF を含むクエリを実行できます。

UDF でクエリを実行するには次の構文を使用します。

bq query <statement_with_udf_and_query>

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

入力を事前に絞り込む

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

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

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

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

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

制限事項

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

  • DOM オブジェクトの WindowDocumentNode、およびこれらを必要とする関数はサポート対象外です。
  • ネイティブ コードに依存する JavaScript 関数はサポートされません。
  • JavaScript ユーザー定義関数を呼び出すクエリは非確定的な性質であるため、このようなクエリでキャッシュ内の結果を使用することはできません。
  • UDF のテーブルは参照できません。
  • ビューは 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 ビットのみ処理します。
  • 各プロジェクトには、同じ function_name の永続的な UDF を 1 つだけ含めることができます。また、function_name が現在のプロジェクトのテーブルの名前と同じである UDF を作成できます。
  • 別の永続的な UDF または論理ビューから永続的な UDF を参照する場合、参照をプロジェクト名で修飾する必要があります。 次に例を示します。
    CREATE FUNCTION mydataset.referringFunction() AS (myproject.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 を開きます。
    BigQuery ウェブ UI に移動

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

    クエリの新規作成

  3. [クエリエディタ] テキスト領域に 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. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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] をクリックします。クエリが完了すると、テーブルにプロパティが設定されています。

コマンドライン

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 に設定した場合、このテーブルを参照するクエリでは、パーティショニング列でフィルタを使用する必要があります。そうしない場合、BigQuery によってエラーが返されます。このオプションを true に設定すると、意図したよりも多くのデータのクエリを行う際の間違いを防ぐことができます。

Console

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

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

    クエリの新規作成

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

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

  4. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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] をクリックします。クエリが完了すると、テーブルにプロパティが設定されています。

コマンドライン

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 を開きます。
    BigQuery ウェブ UI に移動

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

    クエリの新規作成

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

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

  4. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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] をクリックします。クエリが完了すると、テーブルの有効期限はなくなります。

コマンドライン

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 を開きます。
    BigQuery ウェブ UI に移動

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

    クエリの新規作成

  3. [クエリエディタ] テキスト領域に 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. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の 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] をクリックします。クエリが完了すると、ビューにプロパティが設定されています。

コマンドライン

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].[DATASET].[TABLE]`(バッククォートを含む)の形式で指定する必要があります(例: `myproject.mydataset.mytable`)。

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

Console

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

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

    クエリの新規作成

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

     #standardSQL
     DROP TABLE mydataset.mytable
     

  4. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の UI

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

    BigQuery ウェブ UI に移動

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

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

     #standardSQL
     DROP TABLE mydataset.mytable
     

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

コマンドライン

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].[DATASET].[TABLE]`(バッククォートを含む)の形式で指定する必要があります(例: `myproject.mydataset.mytable`)。

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

Console

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

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

    クエリの新規作成

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

     #standardSQL
     DROP TABLE IF EXISTS mydataset.mytable
     

  4. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の UI

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

    BigQuery ウェブ UI に移動

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

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

     #standardSQL
     DROP TABLE IF EXISTS mydataset.mytable
     

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

コマンドライン

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].[DATASET].[VIEW]`(バッククォートを含む)の形式で指定する必要があります(例: `myproject.mydataset.myview`)。

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

Console

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

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

    クエリの新規作成

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

     #standardSQL
     DROP VIEW mydataset.myview
     

  4. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の UI

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

    BigQuery ウェブ UI に移動

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

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

     #standardSQL
     DROP VIEW mydataset.myview
     

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

コマンドライン

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].[DATASET].[VIEW]`(バッククォートを含む)の形式で指定する必要があります(例: `myproject.mydataset.myview`)。

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

Console

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

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

    クエリの新規作成

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

     #standardSQL
     DROP VIEW IF EXISTS mydataset.myview
     

  4. (省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。

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

従来の UI

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

    BigQuery ウェブ UI に移動

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

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

     #standardSQL
     DROP VIEW IF EXISTS mydataset.myview
     

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

コマンドライン

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 のサポートページをご覧ください。