使用数据定义语言语句

通过数据定义语言 (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 是您要创建的表的名称。每个数据集的表名称必须唯一。表名称可:

  • 最多包含 1024 个字符
  • 包含字母(大写或小写)、数字和下划线

column_namecolumn_schema

(column_name column_schema[, ...]) 以逗号分隔列表形式提供表的架构信息

  • column_name 为列的名称。列名称要求:
    • 只能包含字母(a-z、A-Z)、数字 (0-9) 或下划线 (_)
    • 必须以字母或下划线开头
    • 最多包含 128 个字符
  • column_schema数据类型相似,但支持非 NOT NULL 类型的可选 ARRAY 限制。column_schema 还支持顶级列与 STRUCT 字段的选项。
column_schema :=
   {simple_type [NOT NULL] |
    STRUCT<field_list> [NOT NULL] |
    ARRAY<array_element_schema>}
   [OPTIONS(column_option_list)]

field_list := field_name column_schema [, ...]

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

simple_type 是除 STRUCTARRAY 外的任何支持的数据类型

field_name 是结构字段的名称。结构字段具有与列名称相同的限制。

当列或字段存在 NOT NULL 限制时,会以 REQUIRED 模式创建列或字段。相反,当不存在 NOT NULL 限制时,会以 NULLABLE 模式创建列或字段。

ARRAY 类型的列或字段不支持 NOT NULL 修饰符。例如,column_schemaARRAY<INT64> NOT NULL 无效,因为 ARRAY 列有 REPEATED 模式,且可为空,但不可为 NULL。无论是否指定 NOT NULL 限制,表中的数组元素都不能为 NULL。例如,ARRAY<INT64> 等效于 ARRAY<INT64 NOT NULL>

表的 NOT NULLcolumn_schema 属性不会通过对表的查询来传播。例如,如果表 T 包含声明为 x INT64 NOT NULL 的列,CREATE TABLE dataset.newtable AS SELECT x FROM T 会创建名为 dataset.newtable 的表,其中 xNULLABLE

column_schema 只能在 CREATE TABLE 语句的列定义列表中使用。它不能在表达式中作为类型使用。例如,CAST(1 AS INT64 NOT NULL) 是无效的。

partition_expression

PARTITION BY 是控制表分区的可选子句。 partition_expression 表达式用于确定如何对表进行分区。分区表达式可包含以下值:

  • PARTITION BY DATE(_PARTITIONTIME) — 在 _PARTITIONTIME pseudo column 中使用基于日期的时间戳对表进行分区。该语法只支持没有 AS query_statement 子句的 CREATE TABLE
  • PARTITION BY DATE(<timestamp_column>) — 使用 TIMESTAMP 列的日期对表进行分区
  • PARTITION BY <date_column> - 使用 DATE对表进行分区

clustering_column_list

CLUSTER BY 是控制表集群的可选子句。 clustering_column_list 为逗号分隔的列表,用于确定如何为该表划分集群。集群列列表可以包含最多四个群集列的列表。

table_option_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 表资源属性,但使用天而非毫秒。一天相当于 8640 万毫秒或 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_option_list 中的 column_schema,您可以指定可选列或字段选项。列选项与表选项的语法和要求相同,但包含的 NAMEVALUE 列表不同:

NAME VALUE 详情
description

STRING

示例:description="a unique id"

此属性相当于 schema.fields[].description 表资源属性。

query_statement

AS query_statement 子句指定应从其中创建表的查询。要了解 query_statement 的支持形式,请参阅 query_statement

已知限制:

  • 无法从查询结果中创建提取时间分区表。请改为使用 CREATE TABLE DDL 语句来创建表,然后使用 INSERT DML 语句将数据插入其中。
  • 无法使用 OR REPLACE 修饰符将表替换为不同种类的分区。请改为对表使用 DROP,然后使用 CREATE TABLE ... AS SELECT ... 语句来重新创建。

CREATE TABLE 示例

创建新表

CREATE TABLE DDL 语句会用指定选项创建表。如果数据集中存在表名称,会返回以下错误:

Already Exists: [PROJECT]:[DATASET].[TABLE]

以下示例在 mydataset 中创建名为 newtable 的分区表。如果您未配置默认项目,请采用以下格式将它添加到数据集名称之前:`[PROJECT].[DATASET].[TABLE]`(包括反引号);例如:`myproject.mydataset.newtable`。

该表利用以下 partition_expression 对表进行分区:PARTITION BY DATE(_PARTITIONTIME)。此表达式在 _PARTITIONTIME 伪列中使用基于日期的时间戳对表进行分区。

表架构中包含 2 列:

  • x — 整数,带有“可选 INTEGER 字段”描述
  • y - 包含 2 列的 STRUCT:

    • a - 一组字符串,带有“重复的 STRING 字段”描述
    • b - 布尔值

表选项列表指定了以下内容:

  • 表到期时间 - 世界协调时间 (UTC) 2020 年 1 月 1 日 00:00:00
  • 分区到期时间 - 1 天
  • 说明 - 于 2020 年到期的表
  • 标签 - org_unit = development

要使用 DDL 创建新表,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中键入 DDL 语句。

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

  4. 点击运行查询。完成查询后,相应分区表将显示在导航窗格中。

命令行

输入 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 方法并在请求正文的查询属性中提供 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”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

从现有表创建新表

CREATE TABLE ... AS SELECT DDL 语句会从查询中创建表。如果数据集中存在表名称,会返回以下错误:

Already Exists: [PROJECT]:[DATASET].[TABLE]

以下示例在 top_words 中创建了名为 mydataset 的表。如果您未配置默认项目,请采用以下格式将它添加到数据集名称之前:`[PROJECT].[DATASET].[TABLE]`(包括反引号);例如,`myproject.mydataset.rainy_days`。

表架构中包含 2 列:

  • corpus - 莎士比亚全集的名称
  • top_words - 包含 2 个字段的 ARRAYSTRUCTword(一个 STRING)和 word_count(包含字数的 INT64

表选项列表指定了以下内容:

  • 说明 - 莎士比亚全集中出现次数最多的十个词

要使用 DDL 创建新表,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中键入 DDL 语句。

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

  4. 点击运行查询。完成查询后,相应分区表将显示在导航窗格中。

命令行

输入 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 方法并在请求正文的查询属性中提供 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”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

仅当表不存在时才创建表

仅当数据集中不存在表名称时,CREATE TABLE IF NOT EXISTS DDL 语句才使用指定选项创建表。如果数据集中存在表名称,则不会返回任何错误,也不会执行任何操作。

以下示例只有在 mydataset 中不存在名为 newtable 的表时才会在 mydataset 中创建名为 newtable 的表。如果您未配置默认项目,请采用以下格式将它添加到数据集名称之前:`[PROJECT].[DATASET].[TABLE]`(包括反引号);例如,`myproject.mydataset.newtable`。

表架构中包含 2 列:

  • x - 整数
  • y - 包含 a(字符串数组)和 b(布尔值)的 STRUCT

表选项列表指定了以下内容:

  • 到期时间 - 世界协调时间 (UTC) 2020 年 1 月 1 日 00:00:00
  • 说明 - 于 2020 年到期的表
  • 标签 - org_unit = development

要只在数据集中不存在表名称时使用 DDL 创建新表,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中键入 DDL 语句。

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

  4. 点击运行查询。完成查询后,相应分区表将显示在导航窗格中。

命令行

输入 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 方法并在请求正文的查询属性中提供 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”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

创建或替换表

CREATE OR REPLACE TABLE DDL 语句会用指定选项创建表。如果数据集中存在表名称,会用空表覆盖该表。

以下示例会在 mydataset 中创建名为 newtable 的表,如果 mydataset 中存在 newtable,则会覆盖该表。如果您未配置默认项目,请采用以下格式将它添加到数据集名称之前:`[PROJECT].[DATASET].[TABLE]`(包括反引号);例如,`myproject.mydataset.newtable`。

表架构中包含 2 列:

  • x - 整数
  • y - 包含 a(字符串数组)和 b(布尔值)的 STRUCT

表选项列表指定了以下内容:

  • 到期时间 - 世界协调时间 (UTC) 2020 年 1 月 1 日 00:00:00
  • 说明 - 于 2020 年到期的表
  • 标签 - org_unit = development

要使用 DDL 创建新表并覆盖具有相同名称的表,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中键入 DDL 语句。

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

  4. 点击运行查询。完成查询后,相应分区表将显示在导航窗格中。

命令行

输入 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 方法并在请求正文的查询属性中提供 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”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

使用 REQUIRED 列创建表

NOT NULL 语句的列定义列表中的 CREATE TABLE 修饰符指定以 REQUIRED 模式创建列或字段。

以下示例在 mydataset 中创建名为 newtable 的表。如果数据集中存在表名称,会返回以下错误:

Already Exists: [PROJECT]:[DATASET].[TABLE]

如果您未配置默认项目,请采用以下格式将它添加到数据集名称之前:`[PROJECT].[DATASET].[TABLE]`(包括反引号);例如,`myproject.mydataset.newtable`。

表架构中包含 3 列:

  • x - REQUIRED 整数
  • y - 包含 a(字符串数组)、b(REQUIRED 布尔值)和 c(NULLABLE 浮点)的 REQUIRED STRUCT
  • z - NULLABLE 字符串

要使用 DDL 创建包含 REQUIRED 列的新表,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中键入 DDL 语句。

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

  4. 点击运行查询。完成查询后,相应分区表将显示在导航窗格中。

命令行

输入 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 方法并在请求正文的查询属性中提供 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”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

创建分区表

以下示例在 mydataset 中使用 DATE 列创建名为 newtable分区表。如果您未配置默认项目,请采用以下格式将它添加到数据集名称之前:`[PROJECT].[DATASET].[TABLE]`(包括反引号);例如,`myproject.mydataset.newtable`。

表架构中包含 2 列:

  • transaction_id - 整数
  • transaction_date — 日期

表选项列表指定了以下内容:

  • 分区有效期限 - 三天
  • 说明 - 由 transaction_date 分区的表

要使用 DDL 创建新表,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中键入 DDL 语句。

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

  4. 点击运行查询。完成查询后,相应分区表将显示在导航窗格中。

命令行

输入 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 方法并在请求正文的查询属性中提供 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”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

从查询结果创建分区表

以下示例在 mydataset 中使用 DATE 列创建名为 days_with_rain分区表。如果您未配置默认项目,请采用以下格式将它添加到数据集名称之前:`[PROJECT].[DATASET].[TABLE]`(包括反引号);例如,`myproject.mydataset.newtable`。

表架构中包含 2 列:

  • date - 收集数据的 DATE
  • station_name - 以 STRING 表示的气象站名称
  • prcp - 以 FLOAT64 表示的降雨量(单位为英寸)

表选项列表指定了以下内容:

  • 分区有效期限 - 一年
  • 说明 - 有降雨量的气象站,按天分区

要使用 DDL 创建新表,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中键入 DDL 语句。

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

  4. 点击运行查询。完成查询后,相应分区表将显示在导航窗格中。

命令行

输入 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 方法并在请求正文的查询属性中提供 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”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

创建集群表

示例 1

以下示例在 mydataset 中创建名为 myclusteredtable集群表。该表为分区表,按 TIMESTAMP 列分区,并按名为 customer_idSTRING 列划分集群。

如果您未配置默认项目,请采用以下格式将它添加到数据集名称之前:`[PROJECT].[DATASET].[TABLE]`(包括反引号);例如,`myproject.mydataset.myclusteredtable`。

表架构中包含 3 列:

  • timestamp — 收集数据的时间为 TIMESTAMP
  • customer_id — 客户 ID 为 STRING
  • transaction_amount — 交易金额为 NUMERIC

表选项列表指定了以下内容:

  • 分区有效期限 - 三天
  • 说明 — “按 customer_id 划分集群的表”

利用 DDL 语句创建集群表:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中输入您的 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. 点击显示选项

  5. 对于处理位置,点击未指定并选择数据的位置。如果数据位于 USEU 多区域位置,则可以将处理位置设置为“未指定”。当您的数据位于 USEU 中时,系统会自动检测处理位置。

  6. 点击运行查询。完成查询后,相应分区表将显示在导航窗格中。

命令行

输入 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 方法并在请求正文的查询属性中提供 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”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

示例 2

以下示例在 mydataset 中创建名为 myclusteredtable集群表。该表为提取时间分区表

如果您未配置默认项目,请采用以下格式将它添加到数据集名称之前:`[PROJECT].[DATASET].[TABLE]`(包括反引号);例如,`myproject.mydataset.myclusteredtable`。

表架构中包含 3 列:

  • timestamp — 收集数据的时间为 TIMESTAMP
  • customer_id — 客户 ID 为 STRING
  • transaction_amount — 交易金额为 NUMERIC

表选项列表指定了以下内容:

  • 分区有效期限 - 三天
  • 说明 — “按 customer_id 划分集群的表”

利用 DDL 语句创建集群表:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中输入您的 CREATE TABLE DDL 语句

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

  4. 点击显示选项

  5. 对于处理位置,点击未指定并选择数据的位置。如果数据位于 USEU 多区域位置,则可以将处理位置设置为“未指定”。当您的数据位于 USEU 中时,系统会自动检测处理位置。

  6. 点击运行查询。完成查询后,相应分区表将显示在导航窗格中。

命令行

输入 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 方法并在请求正文的查询属性中提供 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”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

从查询结果创建集群表

以下示例在 mydataset 中使用查询结果创建名为 myclusteredtable集群表。该表为分区表(按 TIMESTAMP 列分区)。

如果您未配置默认项目,请采用以下格式将它添加到数据集名称之前:`[PROJECT].[DATASET].[TABLE]`(包括反引号);例如,`myproject.mydataset.myclusteredtable`。

表架构中包含 3 列:

  • timestamp — 收集数据的时间为 TIMESTAMP
  • customer_id — 客户 ID 为 STRING
  • transaction_amount — 交易金额为 NUMERIC

表选项列表指定了以下内容:

  • 分区有效期限 - 三天
  • 说明 — “按 customer_id 划分集群的表”

利用 DDL 语句创建集群表:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中输入您的 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. 点击显示选项

  5. 对于处理位置,点击未指定并选择数据的位置。如果数据位于 USEU 多区域位置,则可以将处理位置设置为“未指定”。当您的数据位于 USEU 中时,系统会自动检测处理位置。

  6. 点击运行查询。完成查询后,相应分区表将显示在导航窗格中。

命令行

输入 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 方法并在请求正文的查询属性中提供 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”:字符串
    • “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 是您要创建的视图的名称。每个数据集的视图名称必须是唯一的。视图名称要求:

  • 最多包含 1024 个字符
  • 包含字母(大写或小写)、数字和下划线

通过 view_option_list,您可以指定其他视图创建选项,例如标签和到期时间。

CREATE VIEW 语句必须符合以下规则:

  • 只允许一个 CREATE 语句。

query_expression 是用于定义视图的标准 SQL 查询表达式。

view_option_list

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

以下示例在 mydataset 中创建名为 newview 的视图。使用 DDL 语句创建视图时,须按以下格式指定项目、数据集和视图:`[PROJECT].[DATASET].[VIEW]`(包括反引号);例如,`myproject.mydataset.newview`。

视图使用以下标准 SQL 查询进行定义:

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

视图选项列表指定了以下内容:

  • 到期时间 - 自创建视图后 48 小时
  • 易记名称 - 新视图
  • 说明 - 在两天后到期的视图
  • 标签 - org_unit = development

要使用 DDL 创建新视图,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中键入 DDL 语句。

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

  4. 点击运行查询。完成查询后,相应分区表将显示在导航窗格中。

命令行

输入 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 方法并在请求正文的查询属性中提供 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”:字符串
    • “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 语句才使用指定选项创建视图。如果数据集中存在视图名称,则不会返回任何错误,也不会执行任何操作。

以下示例只有在 mydataset 中不存在名为 newview 的视图时才会在 mydataset 中创建名为 newview 的视图。使用 DDL 语句创建视图时,须按以下格式指定项目、数据集和视图:`[PROJECT].[DATASET].[VIEW]`(包括反引号);例如,`myproject.mydataset.newview`。

视图使用以下标准 SQL 查询进行定义:

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

视图选项列表指定了以下内容:

  • 到期时间 - 自创建视图后 48 小时
  • 易记名称 - 新视图
  • 说明 - 在两天后到期的视图
  • 标签 - org_unit = development

要只在数据集中不存在视图名称时使用 DDL 创建新视图,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中键入 DDL 语句。

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

  4. 点击运行查询。完成查询后,相应分区表将显示在导航窗格中。

命令行

输入 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 方法并在请求正文的查询属性中提供 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”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

创建或替换视图

CREATE OR REPLACE VIEW DDL 语句会用指定选项创建视图。如果数据集中存在视图名称,会使用指定的查询表达式覆盖该视图。

以下示例会在 newview 中创建名为 mydataset 的视图,如果 newview 中存在 mydataset,则会覆盖该视图。使用 DDL 语句创建视图时,须按以下格式指定项目、数据集和视图:`[PROJECT].[DATASET].[VIEW]`(包括反引号);例如,`myproject.mydataset.newview`。

视图使用以下标准 SQL 查询进行定义:

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

视图选项列表指定了以下内容:

  • 到期时间 - 自创建视图后 48 小时
  • 易记名称 - 新视图
  • 说明 - 在两天后到期的视图
  • 标签 - org_unit = development

若要使用 DDL 创建新视图并覆盖含相同名称的视图,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中键入 DDL 语句。

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

  4. 点击运行查询。完成查询后,相应分区表将显示在导航窗格中。

命令行

输入 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 方法并在请求正文的查询属性中提供 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”:字符串
    • “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].[DATASET].[TABLE]`(包括反引号);例如:`myproject.mydataset.mytable`。

要使用 DDL 删除表,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中键入 DDL 语句。

     #standardSQL
     DROP TABLE mydataset.mytable
     

  4. 点击运行查询。完成查询后,将从导航窗格中删除该表。

命令行

输入 bq query 命令并提供 DDL 语句作为查询参数。

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

API

调用 jobs.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”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

仅当表存在时才删除表

DROP TABLE IF EXISTS DDL 语句仅在表存在时删除指定数据集中的表。如果数据集中不存在表名称,则不会返回任何错误,也不会执行任何操作。

如果要删除另一个项目中的表,须按以下格式指定项目、数据集和表:`[PROJECT].[DATASET].[TABLE]`(包括反引号);例如:`myproject.mydataset.mytable`。

要只在表存在时使用 DDL 删除表,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中键入 DDL 语句。

     #standardSQL
     DROP TABLE IF EXISTS mydataset.mytable
     

  4. 点击运行查询。完成查询后,将从导航窗格中删除该表。

命令行

输入 bq query 命令并提供 DDL 语句作为查询参数。

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

API

调用 jobs.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”:字符串
    • “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].[DATASET].[VIEW]`(包括反引号);例如,`myproject.mydataset.myview`。

要使用 DDL 删除视图,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中键入 DDL 语句。

     #standardSQL
     DROP VIEW mydataset.myview
     

  4. 点击运行查询。完成查询后,将从导航窗格中删除该视图。

命令行

输入 bq query 命令并提供 DDL 语句作为查询参数。

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

API

调用 jobs.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”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

仅当视图存在时才删除视图

DROP VIEW IF EXISTS DDL 语句仅在视图存在时删除指定数据集中的视图。如果数据集中不存在视图名称,则不会返回任何错误,也不会执行任何操作。

如果要删除另一个项目中的视图,须按以下格式指定项目、数据集和视图:`[PROJECT].[DATASET].[VIEW]`(包括反引号);例如,`myproject.mydataset.myview`。

要只在视图存在时使用 DDL 删除视图,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击编写查询

  3. 新查询文本区域中键入 DDL 语句。

     #standardSQL
     DROP VIEW IF EXISTS mydataset.myview
     

  4. 点击运行查询。完成查询后,将从导航窗格中删除该表。

命令行

输入 bq query 命令并提供 DDL 语句作为查询参数。

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

API

调用 jobs.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”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

开发中的功能

以下功能正在开发中,测试版中尚未提供:

  • 使用 DROP TABLE DDL 语句后,在 BigQuery 网页界面中自动更新表列表
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面