使用資料定義語言陳述式

資料定義語言 (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 子句存在而資料欄清單不存在,BigQuery 會依據 子句判斷資料欄名稱與類型。
  • 資料欄名稱必須透過資料欄清單或 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資料類型相似,但為 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 是 struct 欄位的名稱。Struct 欄位名稱與資料欄名稱具有相同的限制。

資料欄或欄位有 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_schemaNOT NULL 屬性不會透過資料表上執行的查詢進行傳播。舉例來說,假設資料表 T 含有宣告為 x INT64 NOT NULL 的資料欄,CREATE TABLE dataset.newtable AS SELECT x FROM T 就會建立名為 dataset.newtable 的資料表,其中xNULLABLE

您只能在 CREATE TABLE 陳述式的資料欄定義清單中使用 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 _PARTITIONDATE:使用 _PARTITIONDATE pseudo column 將資料表分區。這個語法只有未使用 AS query_statement 子句的 CREATE TABLE 支援,且相當於使用 PARTITION BY DATE(_PARTITIONTIME)
  • PARTITION BY DATE(<timestamp_column>):使用 TIMESTAMP 資料欄的日期將資料表分區。
  • PARTITION BY <date_column>:使用 DATE 資料欄將資料表分區

clustering_column_list

CLUSTER BY 是控制資料表叢集處理的選用子句。clustering_column_list 是決定資料表叢集處理方式的逗號分隔的清單。叢集處理資料欄清單最多可包含四個叢集處理資料欄。

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 資料表資源屬性。

進一步瞭解如何使用 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 陳述式時搭配 TEMPTEMPORARY 關鍵字。

語法

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

除了使用 TEMPTEMPORARY 以外,語法與 CREATE TABLE 語法完全相同。

建立臨時資料表後,資料表在目前指令碼的整個生命週期期間都會存在。臨時資料表的名稱必須是非限定名稱,也就是說,名稱不含專案或資料集限定詞。在程序中建立的臨時資料表在程序呼叫傳回時仍可使用,且可使用到主要指令碼完成為止。

如要建立臨時資料表:

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

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

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

SELECT *
FROM Example;

這個指令碼會傳回下列輸出內容:

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

您可以執行 DROP TABLE 陳述式,在指令碼完成前明確刪除臨時資料表:

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

當臨時資料表與預設資料集一起使用時,非限定的資料表名稱指的是:

  • 臨時資料表 (如果有的話)
  • 否則則指預設資料集中的資料表

例外情況是 CREATE TABLE 陳述式,在這種陳述式中,只有在 TEMPTEMPORARY 關鍵字存在時,系統才會將目標資料表視為臨時資料表。

讓我們以下列指令碼為例:

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

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

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

-- Drop the temporary table
DROP TABLE t1;

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

您可以使用 _SESSION 來限定資料表名稱,藉此明確指出您所指的臨時資料表:

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

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

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

如果使用 _SESSION 限定詞的查詢其臨時資料表不存在,您將會收到錯誤訊息,指出該資料表不存在。舉例來說,如果沒有名為 t3 的臨時資料表,即使預設資料集中有名為 t3 的資料表存在,您也會收到錯誤訊息。

您不能使用 _SESSION 來建立非臨時的資料表:

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

CREATE TABLE 範例

建立新資料表

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

Already Exists: project_id:dataset.table

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

該資料表會使用下列 partition_expression 將資料表分區:PARTITION BY _PARTITIONDATE。這個運算式會使用 _PARTITIONDATE 虛擬資料欄中的日期來將資料表分區。

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

  • x:整數,具有說明:「An optional INTEGER」(選用 INTEGER 欄位)
  • y:STRUCT,含有兩個資料欄:

    • a:為字串陣列,具有說明:「A repeated STRING field」(重複的 STRING 欄位)
    • b:為布林值

資料表選項清單指定的項目如下:

  • 資料表到期時間:世界標準時間 2020 年 1 月 1 日 00:00:00
  • 分區到期時間:1 天
  • 說明:於 2020 年到期的資料表
  • 標籤:org_unit = development (開發)

如要使用 DDL 建立新資料表:

主控台

  1. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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 _PARTITIONDATE
     OPTIONS(
       expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
       partition_expiration_days=1,
       description="a table that expires in 2020, with each partition living for 24 hours",
       labels=[("org_unit", "development")]
     )
     

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

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

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

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

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

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

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

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

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:一個 ARRAY STRUCT ,當中包含 2 個欄位:word (為 STRING) 和 word_count (INT64,提供字數資訊)

資料表選項清單指定的項目如下:

  • 說明:莎士比亞語料庫的最常出現的前十個字詞

如要使用 DDL 建立新資料表:

主控台

  1. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

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

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

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

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

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

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

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

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

資料表選項清單指定的項目如下:

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

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

主控台

  1. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

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

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

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

建立或取代資料表

CREATE OR REPLACE TABLE DDL 陳述式會以指定的選項建立資料表。如果資料表名稱存在於資料集中,系統會以空資料表覆寫該資料表。

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

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

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

資料表選項清單指定的項目如下:

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

如要使用 DDL 建立新資料表,並覆寫具有相同名稱的資料表:

主控台

  1. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

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

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

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

建立具有 REQUIRED 資料欄的資料表

CREATE TABLE 陳述式的資料欄定義清單中,NOT NULL 修飾符指定資料欄或欄位要以 REQUIRED 模式建立。

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

Already Exists: project_id:dataset.table

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

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

  • xREQUIRED 的整數
  • yREQUIRED 的 STRUCT,當中包含 a (字串陣列)、b (REQUIRED 布林值) 和 c (NULLABLE 浮點)
  • zNULLABLE 的字串

如要使用 DLL 建立包含 REQUIRED 資料欄的新資料表:

主控台

  1. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

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

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

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

建立分區資料表

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

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

  • transaction_id:整數
  • transaction_date:日期

資料表選項清單指定的項目如下:

  • 分區到期時間:三天
  • 說明:依據 transaction_date 分區的資料表

如要使用 DDL 建立新資料表:

主控台

  1. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

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

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

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

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

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

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

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

資料表選項清單指定的項目如下:

  • 分區到期時間:一年
  • 說明:氣象站,提供降水量且依「日」分區

如要使用 DDL 建立新資料表:

主控台

  1. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

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

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

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

建立叢集資料表

範例 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. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 將您的 CREATE TABLE DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

範例 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. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 將您的 CREATE TABLE DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     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 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

從查詢結果建立叢集資料表

下列範例使用查詢結果,在 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. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 將您的 CREATE TABLE DDL 陳述式輸入到「New Query」(新查詢) 文字區域中。

     #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 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

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 = development (開發)

如要使用 DLL 建立新檢視表:

主控台

  1. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

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

  4. 按一下 [Run query] (執行查詢)。查詢作業完成時,檢視表就會顯示在導覽窗格中。

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

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

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

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

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

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

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

主控台

  1. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

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

  4. 按一下 [Run query] (執行查詢)。查詢作業完成時,檢視表就會顯示在導覽窗格中。

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

建立或取代檢視表

CREATE OR REPLACE VIEW DDL 陳述式會以指定的選項建立檢視表。如果檢視表名稱存在於資料集中,系統會以指定的查詢運算式覆寫檢視表。

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

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

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

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

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

如要使用 DDL 建立新的檢視表,並覆寫具有相同名稱的檢視表:

主控台

  1. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

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

  4. 按一下 [Run query] (執行查詢)。查詢作業完成時,檢視表就會顯示在導覽窗格中。

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

CREATE FUNCTION 陳述式

BigQuery 支援使用者定義的函式 (UDF),UDF 可讓您使用 SQL 運算式或 JavaScript 建立函式。這些函式會接受輸入資料欄並執行各項動作,再以值形式傳回這些動作的結果。

UDF 可為永久性或暫時性。您可以在多個查詢中重複使用永久性 UDF,但是暫時性 UDF 只能在單一查詢中使用。如要進一步瞭解 UDF,請參閱使用者定義函式的相關說明。

UDF 語法

如要建立永久性 UDF,請使用下列語法:

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

如要建立暫時性 UDF,請使用下列語法:

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

named_parameter:
  param_name param_type

sql_function_definition:
  AS (sql_expression)

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

這個語法由下列元件組成:

  • CREATE { FUNCTION | OR REPLACE FUNCTION | FUNCTION IF NOT EXISTS }:建立或更新函式。如要取代任何名稱相同的現有函式,請使用 OR REPLACE 關鍵字。如果已有名稱相同的函式,而您希望將查詢視為成功執行且不採取任何動作,請使用 IF NOT EXISTS 子句。
  • named_parameter:由以逗號分隔的 param_nameparam_type 組合構成。param_type 值是一種 BigQuery 資料類型。如為 SQL UDF,則 param_type 的值也可以是 ANY TYPE
  • [RETURNS data_type]:指定函式傳回的資料類型。
    • 如果函式是以 SQL 定義,則 RETURNS 子句為選用。如果省略 RETURNS 子句,則當查詢呼叫函式時,BigQuery 會以 SQL 函式主體推測函式的結果類型。
    • 如果函式是以 JavaScript 定義,則 RETURNS 子句為必要。如要進一步瞭解 data_type 接受的值,請參閱支援的 JavaScript UDF 資料類型一節。
  • AS (sql_expression):指定定義函式的 SQL 運算式。
  • [OPTIONS (library = library_array)]:如為 JavaScript UDF,請指定要加入函式定義的 JavaScript 程式庫陣列。
  • AS javascript_code:指定 JavaScript 函式的定義,javascript_code 為字串常值。

SQL UDF 結構

使用下列語法建立 SQL UDF:

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

named_parameter:
  param_name param_type

範本 SQL UDF 參數

param_type = ANY TYPE 的範本參數可以在呼叫函式時比對多個引數類型。

  • 如有多項參數的類型均為 ANY TYPE,則 BigQuery 不會強制在這些引數之間建立任何類型的關係。
  • 函式傳回類型不得為 ANY TYPE。您必須省略傳回類型,也就是由系統依據 sql_expression 自動決定類型,或指定明確的類型。
  • 不過,如果您傳送的函式引數類型與函式定義不相容,進行呼叫時會產生錯誤。

SQL UDF 範例

下列範例會建立永久性 SQL UDF。範例假設使用中的專案中已有名為 mydataset 的資料集存在。如果沒有具有此名稱的資料集,請參閱建立資料集說明文件

CREATE FUNCTION mydataset.multiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
AS (x * y);

執行 CREATE FUNCTION 陳述式後,您可以在別的查詢中使用新的永久性使用者定義函式。使用以下內容取代查詢編輯器的內容,然後執行查詢:

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

上方範例會產生以下輸出內容:

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

下列範例顯示使用範本參數的永久性 SQL UDF。這個範例產生的函式會接受不同類型的引數。

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

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

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

這個查詢會傳回以下輸出內容:

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

下方範例中顯示的 SQL UDF 會使用範本參數傳回任意類型陣列中的最後一項元素。

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

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

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

以上查詢傳回下列輸出內容:

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

JavaScript UDF 結構

請使用下列語法建立永久性 JavaScript UDF。

CREATE [OR REPLACE] [TEMPORARY | TEMP] FUNCTION [IF NOT EXISTS]
    [[`project_name`.]dataset_name.]function_name
    ([named_parameter[, ...]])
  RETURNS data_type
  LANGUAGE js
  [OPTIONS (library = library_array)]
  AS javascript_code

如要進一步瞭解 data_type 接受的值和參數類型,請參閱支援的 JavaScript UDF 資料類型一節。

JavaScript UDF 範例

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

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

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

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

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

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

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

然後執行另一個查詢以建立第二個永久性 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 程式碼。對於簡單的單行程式碼片段,您可以使用標準的加引號字串:

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

如果程式碼片段包含引號,或者由多行組成,請使用加三引號的區塊:

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

加入 JavaScript 資料庫

您可以使用 OPTIONS 部分來擴充 JavaScript UDF,這個區段可讓您為 UDF 指定 JavaScript 程式碼資料庫。

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

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

在前例中,lib1.jslib2.js 中的程式碼均可供 UDF javascript_code 區段的任何程式碼使用。請注意,您可以使用單一元素或陣列語法來指定資料庫檔案。

UDF 與網頁版 UI

您可以使用 BigQuery 網頁版 UI 來建立永久性使用者定義函式。

執行查詢以建立永久性 UDF

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

  2. 按一下 [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);
'

CREATE PROCEDURE

語法

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

procedure_argument: [procedure_argument_mode] argument_name argument_type

procedure_argument_mode: IN | OUT | INOUT

說明

建立一個程序,該程序是一個可從其他查詢呼叫的陳述式區塊

statement_list 是 BigQuery 陳述式清單。陳述式清單是一系列陳述式,每個陳述式的結尾都是分號。

argument_type 是任何有效的 BigQuery 類型

procedure_argument_mode 指定引數是輸入還是輸出,或兩者皆是。

程序能以遞迴方式呼叫自己本身。

引數模式

IN 代表引數只是程序的輸入,您可以為 IN 引數指定變數或值運算式。

OUT 代表引數是程序的輸出。OUT 引數會在程序開始時,初始化為 NULL。您必須為 OUT 引數指定變數。

INOUT 代表引數既是程序的輸入,也是程序的輸出。您必須為 INOUT 引數指定變數。INOUT 引數可以在程序的主體中以變數形式加以參照,並指派新的值。

如果 INOUTINOUT 皆未指定,系統會將引數視為 引數處理。

變數範圍

如果變數是在程序之外宣告,並以 INOUT 或 OUT 引數的形式傳送至程序,且程序將新的值指派給該變數,那麼這個新值會在程序外部顯示。

程序中宣告的變數不會在程序外部顯示,反之亦然。

您可以使用 SETOUTINOUT 引數指派一個值,如此一來,修改後的值就會在程序外部顯示。如果程序順利結束,OUTINOUT 引數的值就是指派給該 INOUT 變數的最終值。

臨時資料表會在指令碼持續期間內存在,因此如果程序建立臨時資料表,程序的呼叫者也可以參照臨時資料表。

範例

以下範例建立的程序會使用 x 當做輸入引數,並傳回 做為輸出,因為引數 delta 沒有引數模式,所以被視為輸入引數。此程序由一個包含單一陳述式的區塊所組成,該陳述式將兩個輸入引數的總和指派給 x

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

以下範例會呼叫上例中的 AddDelta 程序,兩次都傳送變數 accumulator 至該程序。因為 中 x 變更會顯示在 之外,因此這些程序呼叫總共會讓 accumulator 的值增加到 8。

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

這會傳回以下內容:

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

以下範例建立的 SelectFromTablesAndAppend 程序使用 target_date 做為輸入引數,並傳回 rows_added 做為輸出。此程序會從查詢建立臨時資料表 DataForTargetDate,接著計算 DataForTargetDate 中的資料列數,並將結果指派給 rows_added。接下來,它會在 TargetTable 中插入新資料列,並傳送 target_date 的值做為其中一個資料欄名稱。最後,它會刪除 DataForTargetDate 資料表並傳回 rows_added

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

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

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

  DROP TABLE DataForTargetDate;
END;

下列範例宣告 rows_added 變數,然後將其做為引數,並連同 CURRENT_DATE 的值一起傳送至上例中的 SelectFromTablesAndAppend 程序,接著範例會傳回訊息,指出新增了多少資料列。

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

ALTER TABLE SET OPTIONS 陳述式

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

語法

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

其中:

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

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

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

table_set_options_list

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

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

NAME=VALUE, ...

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

NAME VALUE 詳細說明
expiration_timestamp TIMESTAMP

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

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

partition_expiration_days

FLOAT64

範例:partition_expiration_days=7

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

進一步瞭解如何使用 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. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

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

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

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

為分區資料表設定 require 分區篩選器屬性

下列範例會在分區資料表上設定 timePartitioning.requirePartitionFilter 屬性。如果設為 true,參照這個資料表的查詢就必須對分區資料欄套用篩選器,否則 BigQuery 會傳回錯誤。將此選項設為 true 有助於避免查詢的資料量超出預期:

主控台

  1. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

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

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

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

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

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

主控台

  1. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

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

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

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

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. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

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

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

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

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. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

     #standardSQL
     DROP TABLE mydataset.mytable
     

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

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

只有在資料表存在時才刪除資料表

只有在資料表存在於指定資料集內時,DROP TABLE IF EXISTS DDL 陳述式才會刪除資料表。如果資料表名稱不存在於資料集中,則不會傳回錯誤,且不會採取任何動作。

如要刪除其他專案中的資料表,必須以下列格式指定專案、資料集與資料表:`project_id.dataset.table` (需包含倒引號);例如 `myproject.mydataset.mytable`

如要只在資料表存在時才使用 DDL 刪除資料表:

主控台

  1. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

     #standardSQL
     DROP TABLE IF EXISTS mydataset.mytable
     

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

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

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. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

     #standardSQL
     DROP VIEW mydataset.myview
     

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

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

只有在檢視表存在時才刪除檢視表

只有在檢視表存在於指定資料集內時,DROP VIEW IF EXISTS DDL 陳述式才會將刪除檢視表。如果檢視表名稱不存在於資料集中,則不會傳回錯誤,且不會採取任何動作。

如要刪除其他專案中的檢視表,必須以下列格式指定專案、資料集與檢視表:`project_id.dataset.table`, (需包含倒引號);例如 `myproject.mydataset.myview`

如要僅在檢視表存在時使用 DDL 刪除檢視表,請按照下列指示操作:

主控台

  1. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。
    前往 Cloud 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. 在「New Query」(新查詢) 文字區域中輸入您的 DDL 陳述式。

     #standardSQL
     DROP VIEW IF EXISTS mydataset.myview
     

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

CLI

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

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

API

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

DDL 功能會擴充 Jobs 資源傳回的資訊。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":字串
    • "datasetId":字串
    • "tableId":字串

DROP FUNCTION 陳述式

語法

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

說明

刪除資料集 dataset_name 中的函式 function_name

選用子句

IF EXISTS:只有在函式存在於指定資料集中時才刪除函式。

project_name.:指定含有該函式的專案。如果該函式並非位在目前專案中,則 project_name 必須存在。

範例

下列陳述式範例會刪除資料集 mydataset 中的函式 parseJsonAsStruct

DROP FUNCTION mydataset.parseJsonAsStruct;

下列陳述式範例會從專案 other_project 的資料集 sample_dataset 中刪除函式 parseJsonAsStruct

DROP FUNCTION `other_project`.sample_dataset.parseJsonAsStruct;

DROP PROCEDURE 陳述式

語法

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

說明

刪除資料集 dataset_name 中的程序 procedure_name

選用子句

IF EXISTS:只有在程序存在於指定資料集時才刪除程序。

project_name. 指定含有該程序的專案。如果該程序並非位在目前專案中,則 project_name 必須存在。

範例

下列陳述式範例會刪除資料集 mydataset 中的程序 myprocedure

DROP PROCEDURE mydataset.myProcedure;

下列陳述式範例會從專案 other_project 的資料集 sample_dataset 中刪除程序 myProcedure

DROP PROCEDURE `other-project`.sample_dataset.myprocedure;
本頁內容對您是否有任何幫助?請提供意見:

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

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