使用資料定義語言陳述式

資料定義語言 (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 陳述式。
  • 必須提供資料欄清單和/或 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 是資料欄的名稱。資料欄名稱:
    • 必須只包含字母 (a-z、A-Z)、數字 (0-9) 或底線 (_)
    • 必須以字母或底線開頭
    • 最多可以有 128 個字元
  • column_schema資料類型相似,但 column_schemaARRAY 以外的類型支援選用的 NOT NULL 限制,並支援頂層資料欄與 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 NULLcolumn_schema 無效,因為 ARRAY 資料欄有 REPEATED 模式,且可為空白,但不可為 NULL。無論是否指定 NOT NULL 限制,資料表中的陣列元素都絕不可為 NULL。例如,ARRAY<INT64> 就相當於 ARRAY<INT64 NOT NULL>

資料表之 column_schema 的 NOT NULL 屬性不會透過對資料表的查詢來傳播。舉例來說,假設資料表 T 含有宣告為 x INT64 NOT NULL 的資料欄,CREATE TABLE dataset.newtable AS SELECT x FROM T 就會建立名為「dataset.newtable」的資料表,其中 xNULLABLE

您只能在 CREATE TABLE 陳述式的資料欄定義清單中使用 column_schema,而不得在運算式中以類型的形式使用 column_schema。例如 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 是決定資料表分群方式的半形逗號分隔清單。分群資料欄清單最多可包含四個分群資料欄。

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 資料表資源屬性,但單位為「日」而非「毫秒」。一日相當於 86400000 毫秒或 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

常數運算式不得包含:

  • 對資料表的參照
  • 子查詢或 SQL 陳述式,例如 SELECTCREATEUPDATE
  • 使用者定義的函式、匯總函式或分析函式
  • 下列純量函式:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

column_option_list

column_schema 中的 column_option_list 可讓您指定選用的資料欄或欄位選項。資料欄選項的語法和需求與資料表選項相同,但 NAMEVALUE 清單不同。

NAME VALUE 詳細資料
description

STRING

範例:description="a unique id"

這個屬性等同 schema.fields[].description 資料表資源屬性。

query_statement

AS query_statement 子句指定應從中建立資料表的查詢。如要查看 query_statement 的支援形式,請參閱 SQL 語法參考資料

已知的限制:

  • 無法從查詢結果中建立擷取時間分區資料表。請改用 CREATE TABLE DDL 陳述式來建立資料表,並使用 INSERT DML 陳述式在資料表中插入資料。
  • 無法使用 OR REPLACE 修飾符來以不同種類的分區取代資料表。請改為 DROP 資料表,然後使用 CREATE TABLE ... AS SELECT ... 陳述式來重建資料表。

CREATE TABLE 範例

建立新資料表

CREATE TABLE DDL 陳述式會以指定選項建立資料表。如果資料集中存在資料表名稱,會傳回下列錯誤:

Already Exists: project_id:dataset.table

下列範例會在 mydataset 中建立名為 newtable 的分區資料表。如果您未設定預設專案,請以下列格式將它加到資料集名稱前方:`project_id.dataset.table` (包含倒引號);例如 `myproject.mydataset.newtable`

該資料表會使用下列 partition_expression 將資料表分區:PARTITION BY DATE(_PARTITIONTIME)。這個陳述式會在 _PARTITIONTIME 虛擬資料欄中使用以日期為基準的時間戳記,將資料表分區。

資料表結構定義包含 2 個資料欄:

  • x - 整數,隨附「選用 INTEGER 欄位」說明
  • y - STRUCT,含有 2 個資料欄:

    • a - 為字串陣列,隨附「重複的 STRING 欄位」說明
    • b - 為布林值

資料表選項清單指定:

  • 資料表到期時間 - 世界標準時間 2020 年 1 月 1 日 00:00:00
  • 分區有效期限 - 1 天
  • 說明 - 於 2020 年到期的資料表
  • 標籤 — org_unit = 開發

如要使用 DDL 建立新的資料表,請按照下列指示操作:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 DDL 陳述式。例如:

     CREATE TABLE mydataset.newtable
     (
       x INT64 OPTIONS(description="An optional INTEGER field"),
       y STRUCT<
         a ARRAY<STRING> OPTIONS(description="A repeated STRING field"),
         b BOOL
       >
     )
     PARTITION BY DATE(_PARTITIONTIME)
     OPTIONS(
       expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
       partition_expiration_days=1,
       description="a table that expires in 2020, with each partition living for 24 hours",
       labels=[("org_unit", "development")]
     )
     

  4. 按一下 [Run] (執行)。查詢作業完成之後,資料表就會顯示在資源窗格中。

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #standardSQL
     CREATE TABLE mydataset.newtable
     (
       x INT64 OPTIONS(description="An optional INTEGER field"),
       y STRUCT<
         a ARRAY<STRING> OPTIONS(description="A repeated STRING field"),
         b BOOL
       >
     )
     PARTITION BY DATE(_PARTITIONTIME)
     OPTIONS(
       expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
       partition_expiration_days=1,
       description="a table that expires in 2020, with each partition living for 24 hours",
       labels=[("org_unit", "development")]
     )
     

  4. 按一下 [Run query] (執行查詢)。當查詢完成時,資料表會顯示在導覽窗格中。

CLI

輸入 bq query 指令並提供 DDL 陳述式做為查詢參數。

bq query --use_legacy_sql=false '
CREATE TABLE mydataset.newtable
(
  x INT64 OPTIONS(description="An optional INTEGER field"),
  y STRUCT<
    a ARRAY<STRING> OPTIONS(description="A repeated STRING field"),
    b BOOL
  >
)
PARTITION BY DATE(_PARTITIONTIME)
OPTIONS(
  expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
  partition_expiration_days=1,
  description="a table that expires in 2020, with each partition living for 24 hours",
  labels=[("org_unit", "development")]
)'

API

呼叫 jobs.query 方法,並在要求主體的 query 屬性中提供 DDL 陳述式。

DDL 功能會擴充工作資源傳回的資訊。 statistics.query.statementType 含有 DDL 支援的下列其他值:

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query 含有另外 2 個欄位:

  • ddlOperationPerformed:執行的 DDL 作業,可能依賴於 DDL 目標的存在。目前值包括: 
    • CREATE:查詢建立了 DDL 目標。
    • SKIP:免人工管理。範例 - 已提交 CREATE TABLE IF NOT EXISTS,且資料表確實存在。或者,您已提交 DROP TABLE IF EXISTS,但資料表不存在。
    • REPLACE:查詢取代了 DDL 目標。範例 — 已提交 CREATE OR REPLACE TABLE,且資料表已存在。
    • DROP:查詢刪除了 DDL 目標。
  • ddlTargetTable:當您提交  CREATE TABLE/VIEW 陳述式或 DROP TABLE/VIEW 陳述式時,目標資料表會傳回為含有 3 個欄位的物件:
    • "projectId": string
    • "datasetId": string
    • "tableId": string

從現有資料表建立新資料表

CREATE TABLE ... AS SELECT DDL 陳述式會從查詢建立資料表。如果資料集中存在資料表名稱,會傳回下列錯誤:

Already Exists: project_id:dataset.table

下列範例在 mydataset 中建立了名為 top_words 的資料表。如果您未設定預設專案,請以下列格式將它加到資料集名稱前方:`project_id.dataset.table` (包含倒引號);例如 `myproject.mydataset.rainy_days`

資料表結構定義包含 2 個資料欄:

  • corpus - 莎士比亞全集的名稱
  • top_words - STRUCTARRAY,當中包含 2 個欄位:word (STRING) 和 word_count (INT64,提供字數資訊)

資料表選項清單指定:

  • 說明 - 莎士比亞全集的前十大字詞

如要使用 DDL 建立新的資料表,請按照下列指示操作:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 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. 按一下 [Run] (執行)。查詢作業完成之後,資料表就會顯示在資源窗格中。

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

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

  4. 按一下 [Run query] (執行查詢)。當查詢完成時,資料表會顯示在導覽窗格中。

CLI

輸入 bq query 指令並提供 DDL 陳述式做為查詢參數。

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

API

呼叫 jobs.query 方法,並在要求主體的 query 屬性中提供 DDL 陳述式。

DDL 功能會擴充工作資源傳回的資訊。 statistics.query.statementType 含有 DDL 支援的下列其他值:

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query 含有另外 2 個欄位:

  • ddlOperationPerformed:執行的 DDL 作業,可能依賴於 DDL 目標的存在。目前值包括: 
    • CREATE:查詢建立了 DDL 目標。
    • SKIP:免人工管理。範例 - 已提交 CREATE TABLE IF NOT EXISTS,且資料表確實存在。或者,您已提交 DROP TABLE IF EXISTS,但資料表不存在。
    • REPLACE:查詢取代了 DDL 目標。範例 — 已提交 CREATE OR REPLACE TABLE,且資料表已存在。
    • DROP:查詢刪除了 DDL 目標。
  • ddlTargetTable:當您提交  CREATE TABLE/VIEW 陳述式或 DROP TABLE/VIEW 陳述式時,目標資料表會傳回為含有 3 個欄位的物件:
    • "projectId": string
    • "datasetId": string
    • "tableId": string

只有在資料表不存在時才建立資料表

只有在資料表名稱不存在於資料集中時,CREATE TABLE IF NOT EXISTS DDL 陳述式才以指定選項建立資料表。如果資料表名稱存在於資料集中,則不會傳回錯誤,且不會採取任何動作。

下列範例只有在 mydataset 中不存在名為 newtable 的資料表時才會在 mydataset 中建立名為 newtable 的資料表。如果您未設定預設專案,請以下列格式將它加到資料集名稱前方:`project_id.dataset.table` (包含倒引號);例如 `myproject.mydataset.newtable`

資料表結構定義包含 2 個資料欄:

  • x - 整數
  • y - 包含 a (字串的陣列) 與 b (布林值) 的 STRUCT

資料表選項清單指定:

  • 到期時間 - 世界標準時間 2020 年 1 月 1 日 00:00:00
  • 說明 — 於 2020 到期的資料表
  • 標籤 — org_unit = 開發

如要僅在資料表名稱不存在於資料集時使用 DDL 建立新的資料表,請按照下列指示操作:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 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. 按一下 [Run] (執行)。查詢作業完成之後,資料表就會顯示在資源窗格中。

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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 存在於 mydataset 中,它會遭到覆寫。如果您未設定預設專案,請以下列格式將它加到資料集名稱前方:`project_id.dataset.table` (包含倒引號);例如 `myproject.mydataset.newtable`

資料表結構定義包含 2 個資料欄:

  • x - 整數
  • y - 包含 a (字串的陣列) 與 b (布林值) 的 STRUCT

資料表選項清單指定:

  • 到期時間 - 世界標準時間 2020 年 1 月 1 日 00:00:00
  • 說明 — 於 2020 到期的資料表
  • 標籤 — org_unit = 開發

如要使用 DDL 建立新的資料表並覆寫名稱相同的資料表,請按照下列指示操作:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 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. 按一下 [Run] (執行)

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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 模式建立了資料欄或欄位。

下列範例在 mydataset 中建立了名為 newtable 的資料表。如果資料集中存在資料表名稱,會傳回下列錯誤:

Already Exists: project_id:dataset.table

如果您未設定預設專案,請以下列格式將它加到資料集名稱前方:`project_id.dataset.table` (包含倒引號);例如 `myproject.mydataset.newtable`

資料表結構定義中包含 3 個資料欄:

  • x - REQUIRED 模式的整數
  • y - REQUIRED 模式的 STRUCT,當中包含 a (字串陣列)、b (REQUIRED 布林值) 和 c (NULLABLE 浮點)
  • z - NULLABLE 模式的字串

如要使用 DLL 建立含有 REQUIRED 資料欄的新資料表,請按照下列指示操作:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 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. 按一下 [Run] (執行)。查詢作業完成之後,資料表就會顯示在資源窗格中。

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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 資料欄,在 mydataset 中建立名為「newtable」的分區資料表。如果您未設定預設專案,請以下列格式將它加到資料集名稱前方:`project_id.dataset.table` (包含倒引號);例如 `myproject.mydataset.newtable`

資料表結構定義包含 2 個資料欄:

  • transaction_id — 整數
  • transaction_date - 日期

資料表選項清單指定:

  • 分區有效期限 - 三天
  • 說明 - 按 transaction_date 分區的資料表

如要使用 DDL 建立新的資料表,請按照下列指示操作:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 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. 按一下 [Run] (執行)。查詢作業完成之後,資料表就會顯示在資源窗格中。

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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 資料欄,在 mydataset 中建立名為 days_with_rain分區資料表。如果您未設定預設專案,請以下列格式將它加到資料集名稱前方:`project_id.dataset.table` (包含倒引號);例如 `myproject.mydataset.newtable`

資料表結構定義包含 2 個資料欄:

  • date - 資料收集作業的 DATE
  • station_name - 以 STRING 表示的氣象站名稱
  • prcp - 以 FLOAT64 表示的降雨量 (以英寸為單位)

資料表選項清單指定:

  • 分區有效期限 - 一年
  • 說明 — 有降雨量的氣象站,按天分區

如要使用 DDL 建立新的資料表,請按照下列指示操作:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 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. 按一下 [Run] (執行)。查詢作業完成之後,資料表就會顯示在資源窗格中。

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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

下列範例會在 mydataset 中建立名為 myclusteredtable叢集資料表。此為依據 TIMESTAMP 資料欄分區的分區資料表,並以名為 customer_idSTRING 資料欄分群。

如果您未設定預設專案,請以下列格式將它加到資料集名稱前方:`project_id.dataset.table` (包含倒引號);例如 `myproject.mydataset.myclusteredtable`

資料表結構定義中包含 3 個資料欄:

  • timestamp - 以 TIMESTAMP 表示的資料收集時間
  • customer_id - 以 STRING 表示的客戶 ID
  • transaction_amount - 以 NUMERIC 表示的交易金額

資料表選項清單指定:

  • 分區有效期限 - 3 天
  • 說明 -「由 customer_id 分群的資料表」

如要使用 DDL 陳述式建立叢集資料表,請按照下列指示操作:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 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. 按一下 [Run] (執行)。查詢作業完成之後,資料表就會顯示在資源窗格中。

傳統版 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

下列範例會在 mydataset 中建立名為 myclusteredtable叢集資料表。此資料表是擷取時間分區資料表

如果您未設定預設專案,請以下列格式將它加到資料集名稱前方:`project_id.dataset.table` (包含倒引號);例如 `myproject.mydataset.myclusteredtable`

資料表結構定義中包含 3 個資料欄:

  • timestamp - 以 TIMESTAMP 表示的資料收集時間
  • customer_id - 以 STRING 表示的客戶 ID
  • transaction_amount - 以 NUMERIC 表示的交易金額

資料表選項清單指定:

  • 分區有效期限 - 3 天
  • 說明 -「由 customer_id 分群的資料表」

如要使用 DDL 陳述式建立叢集資料表,請按照下列指示操作:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 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] (執行)。查詢作業完成之後,資料表就會顯示在資源窗格中。

傳統版 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

從查詢結果建立分群資料表

下列範例使用查詢結果,在 mydataset 中建立名為 myclusteredtable叢集資料表。此為依據 TIMESTAMP 資料欄分區的分區資料表

如果您未設定預設專案,請以下列格式將它加到資料集名稱前方:`project_id.dataset.table` (包含倒引號);例如 `myproject.mydataset.myclusteredtable`

資料表結構定義中包含 3 個資料欄:

  • timestamp - 以 TIMESTAMP 表示的資料收集時間
  • customer_id - 以 STRING 表示的客戶 ID
  • transaction_amount - 以 NUMERIC 表示的交易金額

資料表選項清單指定:

  • 分區有效期限 - 3 天
  • 說明 -「由 customer_id 分群的資料表」

如要使用 DDL 陳述式建立叢集資料表,請按照下列指示操作:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 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. 按一下 [Run] (執行)。查詢作業完成之後,資料表就會顯示在資源窗格中。

傳統版 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 陳述式。

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

常數運算式不得包含:

  • 對資料表的參照
  • 子查詢或 SQL 陳述式,例如 SELECTCREATEUPDATE
  • 使用者定義的函式、匯總函式或分析函式
  • 下列純量函式:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

範例

建立新檢視表

CREATE VIEW DDL 陳述式會以指定選項建立檢視表。如果資料集內已經有該檢視表名稱,則會傳回下列錯誤:

Already Exists: project_id:dataset.table

下列範例在 mydataset 中建立了名為 newview 的檢視表。當您使用 DDL 陳述式建立檢視表時,必須以下列格式指定專案、資料集與檢視表:`project_id.dataset.table` (包含倒引號);例如 `myproject.mydataset.newview`

檢視表使用下列標準 SQL 查詢定義:

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

檢視表選項清單所指定的項目如下:

  • 到期時間 - 自建立檢視表後 48 小時
  • 簡單易懂的名稱 — newview
  • 說明 — 在 2 天後到期的檢視表
  • 標籤 — org_unit = 開發

如要使用 DLL 建立新的檢視表,請按照下列指示操作:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 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. 按一下 [Run] (執行)。當查詢完成時,檢視表就會顯示在資源窗格中。

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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 陳述式才以指定選項建立檢視表。如果檢視表名稱存在於資料集內,則不會傳回錯誤,且 DDL 陳述式不會採取任何動作。

在以下範例中,只有在 mydataset 中不存在名為 newview 的檢視表時,DDL 陳述式才會在 mydataset 中建立名為 newview 的檢視表。當您使用 DDL 陳述式建立檢視表時,必須以下列格式指定專案、資料集與檢視表:`project_id.dataset.table` (包含倒引號);例如 `myproject.mydataset.newview`

檢視表使用下列標準 SQL 查詢定義:

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

檢視表選項清單所指定的項目如下:

  • 到期時間 - 自建立檢視表後 48 小時
  • 簡單易懂的名稱 — newview
  • 說明 — 在 2 天後到期的檢視表
  • 標籤 — org_unit = 開發

如要僅在檢視表名稱不存在於資料集時使用 DDL 建立新的檢視表,請按照下列指示操作:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 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. 按一下 [Run] (執行)。當查詢完成時,檢視表就會顯示在資源窗格中。

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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 存在於 mydataset 中,它會遭到覆寫。當您使用 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 = 開發

如要使用 DDL 建立新的檢視表並覆寫名稱相同的檢視表,請按照下列指示操作:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 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. 按一下 [Run] (執行)。當查詢完成時,檢視表就會顯示在資源窗格中。

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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。如需暫時性 UDF 的相關資訊,請參閱使用者定義函式說明文件

UDF 語法

BigQuery 中的永久使用者定義函式會使用下列語法:

CREATE { FUNCTION | OR REPLACE FUNCTION | FUNCTION IF NOT EXISTS }
    dataset_name.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 }。建立新函式,函式可以含有 0 個以上的 named_parameter。如要取代任何名稱相同的現有函式,請使用 OR REPLACE 關鍵字。如果已有名稱相同的函式,而您希望將查詢視為成功執行且不採取任何動作,請使用 IF NOT EXISTS 子句。
  • named_parameter:由以逗號分隔的 param_nameparam_type 組合構成。param_type 的值是一種 BigQuery 資料類型。如為 SQL UDF,則 param_type 的值也可以是 ANY TYPE
  • [RETURNS data_type]:指定函式傳回的資料類型。
    • 如果函式是透過 SQL 中定義,則 RETURNS 為選用子句。如果省略 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 { FUNCTION | OR REPLACE FUNCTION | FUNCTION IF NOT EXISTS }
  dataset_name.function_name ([named_parameter[, ...]])
  [RETURNS data_type]
  AS (sql_expression)

named_parameter:
  param_name param_type

範本 SQL UDF 參數

範本參數可以在函式呼叫時比對多個引數類型。如果函式簽名包含範本參數,BigQuery 會允許函式呼叫將其中一個引數類型傳送至函式。

SQL 使用者定義的函式簽名可以包含下列範本 param_type 值:

  • ANY TYPE:函式會接受任何類型的輸入內容來當做這項引數的值。如有多項參數的類型均為 ANY TYPE,則 BigQuery 不會在函式建立時強制在這些引數之間建立任何關係。不過,如果您傳送的函式引數類型與函式定義不相容,系統會在呼叫時產生錯誤。

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 { FUNCTION | OR REPLACE FUNCTION | FUNCTION IF NOT EXISTS }
  dataset_name.function_name ([named_parameter[, ...]])
  [RETURNS data_type]
  LANGUAGE js
  [OPTIONS (library = library_array)]
  AS javascript_code

JavaScript UDF 範例

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

執行 CREATE FUNCTION 陳述式後,您可以在個別查詢中使用新的永久 JavaScript UDF:

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

上方範例會傳回以下輸出內容:

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

您可以將 UDF 的結果當做輸入值傳送至其他 UDF。例如,使用下列查詢建立永久 UDF:

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

然後執行另一個查詢以建立第二個永久 UDF:

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

現在,請執行下列查詢,在同一個查詢中同時使用這兩個永久 UDF:

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

上方範例會傳回以下輸出內容:

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

下方範例會將指定 JSON 字串中名為「foo」的所有欄位值相加。

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

執行 CREATE FUNCTION 陳述式後,您可以在個別查詢中使用新的永久使用者定義函式:

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

上方範例會傳回以下輸出內容:

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

支援的 JavaScript UDF 資料類型

BigQuery 支援下列 JavaScript UDF 資料類型:

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

JavaScript 中的 SQL 類型編碼

有些 SQL 類型可以直接對應至 JavaScript 類型,其他則不能。

因為 JavaScript 不支援 64 位元整數類型,因此 JavaScript UDF 也不支援使用 INT64 的輸入類型。請改用 FLOAT64 將整數值以數字表示,或用 STRING 將整數值以字串表示。

BigQuery 不支援 INT64 做為 JavaScript UDF 中的傳回類型。在這種情況下,JavaScript 函式主體可以傳回 JavaScript 數字或字串。然後,BigQuery 會將任一種類型轉換成 INT64

BigQuery 會以下列方式表示類型:

BigQuery 資料類型 JavaScript 資料類型
ARRAY ARRAY
BOOL BOOLEAN
BYTES base64 編碼的 STRING
FLOAT64 NUMBER
NUMERIC 如果 NUMERIC 值能夠以 IEEE 754 浮點值準確表示,且沒有任何小數部分,則可以當成數字加以編碼。這些值的範圍必須是 [-253, 253]。否則,就會當成字串加以編碼。
STRING STRING
STRUCT OBJECT,其中每個 STRUCT 欄位都是已命名欄位
TIMESTAMP DATE ,其微秒欄位包含時間戳記的 microsecond 部分
DATE DATE

引號規則

您必須使用引號包覆 JavaScript 程式碼。對於簡單的單行程式碼片段,您可以使用標準的加引號字串:

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. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 UDF 陳述式。例如:

      CREATE FUNCTION mydataset.timesTwo(x FLOAT64)
      RETURNS FLOAT64
        LANGUAGE js AS """
        return x*2;
      """;
    
  4. 按一下 [Run] (執行)

  5. 建立永久使用者定義函式後,請將編輯器內容替換成使用該函式的新查詢:

      SELECT mydataset.timesTwo(numbers) as doubles
      FROM UNNEST([1, 2, 3, 4, 5]) AS numbers;
    
  6. 按一下 [Run] (執行)

UDF 和 bq 指令列工具

您可以使用 Cloud SDK 中的 bq 指令列工具來建立永久 UDF。

使用下列語法執行查詢以建立永久 UDF:

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

JavaScript UDF 的最佳做法

預先篩選您的輸入內容

如果可以在將您的輸入內容傳送至 JavaScript UDF 之前先輕鬆地進行篩選,您的查詢可能就會更快、更便宜。

避免永久的可變動狀態

不要在 JavaScript UDF 呼叫中儲存或存取可變動的狀態。

有效率地使用記憶體

JavaScript 處理環境限制了每個查詢可用的記憶體。如果 JavaScript UDF 查詢累積過多本機狀態,可能會因記憶體耗盡而失敗。

限制

臨時與永久的使用者定義函式皆適用以下限制。

  • 系統不支援 WindowDocumentNode 等 DOM 物件,以及要使用這些物件的函式。
  • 依賴原生程式碼的 JavaScript 函式不受支援。
  • 叫用 JavaScript 使用者定義函式的查詢具有非確定性本質,因此無法使用快取結果。
  • 您無法在 UDF 中參照資料表。
  • 您在處理單一資料列時,JavaScript UDF 輸出的資料量約在 5 MB 內。
  • 舊版 SQL 查詢包含使用者定義函式 (UDF) 時的並行頻率限制 - 6 個並行查詢
  • 就包含使用者定義函式的舊版 SQL 查詢而言,並行頻率限制同時適用於互動式查詢及批次查詢,包含使用者定義函式的互動式查詢也會計入互動式查詢的並行頻率限制。這項限制不適用於標準 SQL 查詢。

  • 查詢工作中內嵌程式碼 blob 或外部檔案等 JavaScript UDF 資源的數量上限 - 50 項。
  • 每個內嵌程式碼 blob 的大小上限 - 32 KB。
  • 每項外部程式碼資源的大小上限 - 1 MB。

以下限制適用於永久使用者定義函式
  • 函式名稱的長度上限 - 256 個字元
  • 引數的數量上限 - 256 項
  • 引數名稱的長度上限 - 128 個字元
  • 使用者定義函式參考資料鍊深度上限 - 16 層
  • 引數或 STRUCT 類型輸出內容的深度上限 - 15 層
  • 引數或各個 UDF STRUCT 類型輸出內容中的欄位數量上限 - 1,024 個
  • 不重複 UDF 加上每項查詢的資料表參考資料數量上限 - 1,000 項 完全展開之後,每個 UDF 最多可以參照 1,000 個經過合併的不重複資料表和 UDF。
  • CREATE FUNCTION 陳述式中的 JavaScript 資料庫數量上限 - 50 個
  • 加入的 JavaScript 資料庫路徑長度上限 - 5,000 個字元
  • 每個 UDF 的更新頻率上限 - 每 10 秒 5 次 函式建立完成之後,您可以更新每個函式,頻率上限為每 10 秒 5 次。
  • 每個內嵌程式碼 blob 的大小上限為 32 KB。
  • 每項 JavaScript 程式碼資源的大小上限為 1 MB。
  • JavaScript 中的位元作業僅處理最重要的 32 位元。
  • 每個資料集只能含有一個使用相同名稱的永久 UDF。不過,您可以建立與相同資料集中的資料表同名的 UDF。
  • 從其他永久 UDF 參照某個永久 UDF 時,您必須使用資料集來限定名稱。 例如:
    CREATE FUNCTION mydataset.referringFunction() AS (mydataset.referencedFunction());
  • 從邏輯檢視表參照永久 UDF 時,您必須使用專案和資料集來完全限定名稱。 例如:
    CREATE VIEW mydataset.sample_view AS SELECT my-project.mydataset.referencedFunction();

以下限制適用於臨時使用者定義函式。

  • 當您建立臨時 UDF 時,function_name 不得使用句號。
  • 邏輯檢視表不得參照臨時 UDF。

ALTER TABLE SET OPTIONS 陳述式

如要在 BigQuery 中設定資料表選項,請使用 ALTER TABLE SET OPTIONS DDL 陳述式。

語法

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

在上述指令中:

{ALTER TABLE | ALTER TABLE IF EXISTS} 是下列其中一個陳述式:

  • ALTER TABLE - 修改現有資料表的選項。
  • ALTER TABLE IF EXISTS - 只在資料表存在時才修改資料表的選項。

table_name 是您要修改的資料表名稱。

table_set_options_list

選項清單可讓您設定資料表選項,例如標籤和到期時間。您可以加入多個選項,中間以半形逗號隔開。

以下列格式指定資料表選項清單:

NAME=VALUE, ...

NAMEVALUE 須為以下其中一種組合:

NAME VALUE 詳細資料
expiration_timestamp TIMESTAMP

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

這項屬性相當於 expirationTime 資料表資源屬性。

partition_expiration_days

FLOAT64

範例:partition_expiration_days=7

這項屬性相當於 timePartitioning.expirationMs 資料表資源屬性,但單位為「日」而非「毫秒」。一日相當於 86400000 毫秒或 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

常數運算式不得包含:

  • 對資料表的參照
  • 子查詢或 SQL 陳述式,例如 SELECTCREATEUPDATE
  • 使用者定義的函式、匯總函式或分析函式
  • 下列純量函式:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

設定 VALUE 會取代該資料表選項的現有值 (如果有的話),將 VALUE 設定為 NULL 則會清除該資料表選項的值。

範例

設定資料表的到期時間戳記和說明

下列範例會將資料表的到期時間戳記設為七日 (自 ALTER TABLE 陳述式的執行時間起算),並設定資料表的說明內容:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 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. 按一下 [Run] (執行)

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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 屬性。如果這個選項設為 TURE,參照這個資料表的查詢就必須對分區資料欄套用篩選器,否則 BigQuery 會傳回錯誤。將這個選項設為 TRUE 可協助避免您查詢的資料量超出預期:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 DDL 陳述式。例如:

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

  4. 按一下 [Run] (執行)

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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

清除資料表的到期時間戳記

下方範例顯示了如何清除資料表的到期時間戳記,以免資料表過期:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 DDL 陳述式。例如:

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

  4. 按一下 [Run] (執行)

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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

常數運算式不得包含:

  • 對資料表的參照
  • 子查詢或 SQL 陳述式,例如 SELECTCREATEUPDATE
  • 使用者定義的函式、匯總函式或分析函式
  • 下列純量函式:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

設定 VALUE 會取代該檢視表選項的現有值 (如果有的話),將 VALUE 設定為 NULL 則會清除該檢視表選項的值。

範例

設定檢視表的到期時間戳記和說明

下列範例會將檢視表的到期時間戳記設為七日 (自 ALTER VIEW 陳述式的執行時間起算),並設定檢視表的說明內容:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 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. 按一下 [Run] (執行)

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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 刪除資料表,請按照下列指示操作:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 DDL 陳述式。例如:

     DROP TABLE mydataset.mytable
     

  4. 按一下 [Run] (執行)。當查詢完成時,就會從資源窗格中移除資料表。

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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 刪除資料表:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 DDL 陳述式。例如:

     DROP TABLE IF EXISTS mydataset.mytable
     

  4. 按一下 [Run] (執行)。當查詢完成時,就會從資源窗格中移除資料表。

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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 刪除檢視表,請按照下列指示操作:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 DDL 陳述式。例如:

     DROP VIEW mydataset.myview
     

  4. 按一下 [Run] (執行)。當查詢完成時,就會從資源窗格中移除檢視表。

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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 刪除檢視表,請按照下列指示操作:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 按一下 [Compose new query] (撰寫新查詢)

    撰寫新查詢

  3. 在「Query editor」(查詢編輯器) 的文字區域中輸入 DDL 陳述式。例如:

     DROP VIEW IF EXISTS mydataset.myview
     

  4. 按一下 [Run] (執行)。當查詢完成時,就會從導覽窗格中移除檢視表。

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 按一下 [Compose query] (撰寫查詢)

  3. 將您的 DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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;
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
需要協助嗎?請前往我們的支援網頁