使用数据定义语言语句

通过数据定义语言 (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数据类型相似,但对于 ARRAY 以外的类型,支持视需要施加 NOT NULL 限制。column_schema 还支持顶级列与 STRUCT 字段的选项。
column_schema :=
   {simple_type [NOT NULL] |
    STRUCT<field_list> [NOT NULL] |
    ARRAY<array_element_schema>}
   [OPTIONS(column_option_list)]

field_list := field_name column_schema [, ...]

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

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

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

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

ARRAY 类型的列或字段不支持 NOT NULL 修饰符。例如,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

通过选项列表,您可以设置表选项,例如标签和到期时间。您可以使用以逗号分隔的列表包括多个选项。

请按以下格式指定表选项列表:

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_schema 中的 column_option_list,您可以指定可选列或字段选项。列选项与表选项的语法和要求相同,但包含的 NAMEVALUE 列表不同:

NAME VALUE 详情
description

STRING

示例:description="a unique id"

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

query_statement

AS query_statement 子句指定应从其中创建表的查询。如需了解受支持的 query_statement 形式,请参阅 SQL 语法参考

已知限制:

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

CREATE TABLE 示例

创建新表

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

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

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

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

表架构中包含 2 列:

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

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

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

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

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

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击 Compose query

  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 方法并在请求正文的 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 个字段的 STRUCT 组成的 ARRAYword (STRING) 和 word_count(包含单词计数的 INT64

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

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

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

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击 Compose query

  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 方法并在请求正文的 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. 点击 Compose query

  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 方法并在请求正文的 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. 点击 Compose query

  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 方法并在请求正文的 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. 点击 Compose query

  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 方法并在请求正文的 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”:字符串

创建分区表

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

表架构中包含 2 列:

  • transaction_id - 整数
  • transaction_date — 日期

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

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

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

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击 Compose query

  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 方法并在请求正文的 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”:字符串

从查询结果创建分区表

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

表架构中包含 2 列:

  • date - 数据集合的 DATE
  • station_name - STRING 格式的气象站名称
  • prcp - FLOAT64 格式的降雨量(单位为英寸)

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

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

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

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击 Compose query

  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 方法并在请求正文的 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 - STRING 格式的客户 ID
  • transaction_amount - NUMERIC 格式的交易金额

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

  • 分区有效期限 - 三天
  • 说明 -“a table clustered by customer_id”

要使用 DDL 语句创建聚簇表,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击 Compose query

  3. New Query 文本区域中,输入 CREATE TABLE DDL 语句

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

  4. 点击 Show Options

  5. (可选)在 Processing Location 部分,点击 Unspecified,并选择数据的位置

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

命令行

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

bq query --use_legacy_sql=false '
CREATE TABLE mydataset.myclusteredtable
(
  timestamp TIMESTAMP,
  customer_id STRING,
  transaction_amount NUMERIC
)
PARTITION BY DATE(timestamp)
CLUSTER BY customer_id
OPTIONS (
  partition_expiration_days=3,
  description="a table clustered by customer_id"
)'

API

调用 jobs.query 方法并在请求正文的 query 属性中提供 DDL 语句。

DDL 功能会扩展作业资源返回的信息。 statistics.query.statementType 包含 DDL 支持的以下其他值:

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query 有 2 个附加字段:

  • ddlOperationPerformed:执行的 DDL 操作,可能取决于是否存在 DDL 目标。当前值包括:
    • CREATE:查询创建了 DDL 目标。
    • SKIP:无运维。示例 - 已提交 CREATE TABLE IF NOT EXISTS,且存在表。或已提交 DROP TABLE IF EXISTS,且不存在表。
    • REPLACE:查询替换了 DDL 目标。示例 - 已提交 CREATE OR REPLACE TABLE,且已存在表。
    • DROP:查询删除了 DDL 目标。
  • ddlTargetTable:当您提交 CREATE TABLE/VIEW 语句或 DROP TABLE/VIEW 语句时,目标表会返回为包含 3 个字段的对象:
    • “projectId”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

示例 2

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

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

表架构中包含 3 列:

  • timestamp - TIMESTAMP 格式的数据集合时间
  • customer_id - STRING 格式的客户 ID
  • transaction_amount - NUMERIC 格式的交易金额

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

  • 分区有效期限 - 三天
  • 说明 -“a table clustered by customer_id”

要使用 DDL 语句创建聚簇表,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击 Compose query

  3. New Query 文本区域中,输入 CREATE TABLE DDL 语句

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

  4. 点击 Show Options

  5. (可选)在 Processing Location 部分,点击 Unspecified,并选择数据的位置

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

命令行

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

bq query --use_legacy_sql=false '
CREATE TABLE mydataset.myclusteredtable
(
  timestamp TIMESTAMP,
  customer_id STRING,
  transaction_amount NUMERIC
)
PARTITION BY DATE(_PARTITIONTIME)
CLUSTER BY
  customer_id
OPTIONS (
  partition_expiration_days=3,
  description="a table clustered by customer_id"
)'

API

调用 jobs.query 方法并在请求正文的 query 属性中提供 DDL 语句。

DDL 功能会扩展作业资源返回的信息。 statistics.query.statementType 包含 DDL 支持的以下其他值:

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query 有 2 个附加字段:

  • ddlOperationPerformed:执行的 DDL 操作,可能取决于是否存在 DDL 目标。当前值包括:
    • CREATE:查询创建了 DDL 目标。
    • SKIP:无运维。示例 - 已提交 CREATE TABLE IF NOT EXISTS,且存在表。或已提交 DROP TABLE IF EXISTS,且不存在表。
    • REPLACE:查询替换了 DDL 目标。示例 - 已提交 CREATE OR REPLACE TABLE,且已存在表。
    • DROP:查询删除了 DDL 目标。
  • ddlTargetTable:当您提交 CREATE TABLE/VIEW 语句或 DROP TABLE/VIEW 语句时,目标表会返回为包含 3 个字段的对象:
    • “projectId”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

从查询结果创建聚簇表

以下示例在 mydataset 中使用查询结果创建名为 myclusteredtable聚簇表。该表为按 TIMESTAMP 列分区的分区表

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

表架构中包含 3 列:

  • timestamp - TIMESTAMP 格式的数据集合时间
  • customer_id - STRING 格式的客户 ID
  • transaction_amount - NUMERIC 格式的交易金额

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

  • 分区有效期限 - 三天
  • 说明 -“a table clustered by customer_id”

要使用 DDL 语句创建聚簇表,请执行以下操作:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击 Compose query

  3. New Query 文本区域中,输入 CREATE TABLE DDL 语句

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

  4. 点击 Show Options

  5. (可选)在 Processing Location 部分,点击 Unspecified,并选择数据的位置

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

命令行

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

bq query --use_legacy_sql=false '
CREATE TABLE mydataset.myclusteredtable
  (
    timestamp TIMESTAMP,
    customer_id STRING,
    transaction_amount NUMERIC
  )
PARTITION BY DATE(timestamp)
CLUSTER BY
  customer_id
OPTIONS (
  partition_expiration_days=3,
  description="a table clustered by customer_id"
)
AS SELECT * FROM mydataset.myothertable'

API

调用 jobs.query 方法并在请求正文的 query 属性中提供 DDL 语句。

DDL 功能会扩展作业资源返回的信息。 statistics.query.statementType 包含 DDL 支持的以下其他值:

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query 有 2 个附加字段:

  • ddlOperationPerformed:执行的 DDL 操作,可能取决于是否存在 DDL 目标。当前值包括:
    • CREATE:查询创建了 DDL 目标。
    • SKIP:无运维。示例 - 已提交 CREATE TABLE IF NOT EXISTS,且存在表。或已提交 DROP TABLE IF EXISTS,且不存在表。
    • REPLACE:查询替换了 DDL 目标。示例 - 已提交 CREATE OR REPLACE TABLE,且已存在表。
    • DROP:查询删除了 DDL 目标。
  • ddlTargetTable:当您提交 CREATE TABLE/VIEW 语句或 DROP TABLE/VIEW 语句时,目标表会返回为包含 3 个字段的对象:
    • “projectId”:字符串
    • “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

通过选项列表,您可以设置视图选项,例如标签和到期时间。您可以使用以逗号分隔的列表包括多个选项。

请按以下格式指定视图选项列表:

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. 点击 Compose query

  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 方法并在请求正文的 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. 点击 Compose query

  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 方法并在请求正文的 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. 点击 Compose query

  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 方法并在请求正文的 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”:字符串

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 表资源属性,但使用天而非毫秒。一天相当于 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

设置 VALUE 会替换表(如果有)的该选项的现有值。将 VALUE 设置为 NULL 会清除表中该选项的值。

示例

设置表上的到期时间戳和说明

以下示例将表上的到期时间戳设置为执行 ALTER TABLE 语句后七天,还设置了说明:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击 Compose query

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

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

  4. 点击 Run query。查询完成后,即会在表上设置该属性。

命令行

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

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

API

调用 jobs.query 方法并在请求正文的 query 属性中提供 DDL 语句。

DDL 功能会扩展作业资源返回的信息。 statistics.query.statementType 包含 DDL 支持的以下其他值:

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query 有 2 个附加字段:

  • ddlOperationPerformed:执行的 DDL 操作,可能取决于是否存在 DDL 目标。当前值包括:
    • CREATE:查询创建了 DDL 目标。
    • SKIP:无运维。示例 - 已提交 CREATE TABLE IF NOT EXISTS,且存在表。或已提交 DROP TABLE IF EXISTS,且不存在表。
    • REPLACE:查询替换了 DDL 目标。示例 - 已提交 CREATE OR REPLACE TABLE,且已存在表。
    • DROP:查询删除了 DDL 目标。
  • ddlTargetTable:当您提交 CREATE TABLE/VIEW 语句或 DROP TABLE/VIEW 语句时,目标表会返回为包含 3 个字段的对象:
    • “projectId”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

在分区表中设置 require partition filter 属性

以下示例在分区表中设置 timePartitioning.requirePartitionFilter 属性。该属性设置为 true 时,引用此表的查询必须在分区列上使用过滤条件,否则 BigQuery 会返回错误。将此选项设置为 true 有助于避免查询超过预期的数据量:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击 Compose query

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

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

  4. 点击 Run query。查询完成后,即会在表上设置该属性。

命令行

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

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

API

调用 jobs.query 方法并在请求正文的 query 属性中提供 DDL 语句。

DDL 功能会扩展作业资源返回的信息。 statistics.query.statementType 包含 DDL 支持的以下其他值:

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query 有 2 个附加字段:

  • ddlOperationPerformed:执行的 DDL 操作,可能取决于是否存在 DDL 目标。当前值包括:
    • CREATE:查询创建了 DDL 目标。
    • SKIP:无运维。示例 - 已提交 CREATE TABLE IF NOT EXISTS,且存在表。或已提交 DROP TABLE IF EXISTS,且不存在表。
    • REPLACE:查询替换了 DDL 目标。示例 - 已提交 CREATE OR REPLACE TABLE,且已存在表。
    • DROP:查询删除了 DDL 目标。
  • ddlTargetTable:当您提交 CREATE TABLE/VIEW 语句或 DROP TABLE/VIEW 语句时,目标表会返回为包含 3 个字段的对象:
    • “projectId”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

清除表上的到期时间戳

以下示例清除表上的到期时间戳,使其不会过期:

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击 Compose query

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

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

  4. 点击 Run query。查询完成后,表不再具有到期时间。

命令行

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

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

API

调用 jobs.query 方法并在请求正文的 query 属性中提供 DDL 语句。

DDL 功能会扩展作业资源返回的信息。 statistics.query.statementType 包含 DDL 支持的以下其他值:

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query 有 2 个附加字段:

  • ddlOperationPerformed:执行的 DDL 操作,可能取决于是否存在 DDL 目标。当前值包括:
    • CREATE:查询创建了 DDL 目标。
    • SKIP:无运维。示例 - 已提交 CREATE TABLE IF NOT EXISTS,且存在表。或已提交 DROP TABLE IF EXISTS,且不存在表。
    • REPLACE:查询替换了 DDL 目标。示例 - 已提交 CREATE OR REPLACE TABLE,且已存在表。
    • DROP:查询删除了 DDL 目标。
  • ddlTargetTable:当您提交 CREATE TABLE/VIEW 语句或 DROP TABLE/VIEW 语句时,目标表会返回为包含 3 个字段的对象:
    • “projectId”:字符串
    • “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. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击 Compose query

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

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

  4. 点击 Run query。查询完成后,即会在视图上设置该属性。

命令行

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

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

API

调用 jobs.query 方法并在请求正文的 query 属性中提供 DDL 语句。

DDL 功能会扩展作业资源返回的信息。 statistics.query.statementType 包含 DDL 支持的以下其他值:

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query 有 2 个附加字段:

  • ddlOperationPerformed:执行的 DDL 操作,可能取决于是否存在 DDL 目标。当前值包括:
    • CREATE:查询创建了 DDL 目标。
    • SKIP:无运维。示例 - 已提交 CREATE TABLE IF NOT EXISTS,且存在表。或已提交 DROP TABLE IF EXISTS,且不存在表。
    • REPLACE:查询替换了 DDL 目标。示例 - 已提交 CREATE OR REPLACE TABLE,且已存在表。
    • DROP:查询删除了 DDL 目标。
  • ddlTargetTable:当您提交 CREATE TABLE/VIEW 语句或 DROP TABLE/VIEW 语句时,目标表会返回为包含 3 个字段的对象:
    • “projectId”:字符串
    • “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. 点击 Compose query

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

     #standardSQL
     DROP TABLE mydataset.mytable
     

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

命令行

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

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

API

调用 jobs.query 方法并在请求正文的 query 属性中提供 DDL 语句。

DDL 功能会扩展作业资源返回的信息。 statistics.query.statementType 包含 DDL 支持的以下其他值:

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query 有 2 个附加字段:

  • ddlOperationPerformed:执行的 DDL 操作,可能取决于是否存在 DDL 目标。当前值包括:
    • CREATE:查询创建了 DDL 目标。
    • SKIP:无运维。示例 - 已提交 CREATE TABLE IF NOT EXISTS,且存在表。或已提交 DROP TABLE IF EXISTS,且不存在表。
    • REPLACE:查询替换了 DDL 目标。示例 - 已提交 CREATE OR REPLACE TABLE,且已存在表。
    • DROP:查询删除了 DDL 目标。
  • ddlTargetTable:当您提交 CREATE TABLE/VIEW 语句或 DROP TABLE/VIEW 语句时,目标表会返回为包含 3 个字段的对象:
    • “projectId”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

仅当表存在时才删除表

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

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

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

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击 Compose query

  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 方法并在请求正文的 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. 点击 Compose query

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

     #standardSQL
     DROP VIEW mydataset.myview
     

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

命令行

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

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

API

调用 jobs.query 方法并在请求正文的 query 属性中提供 DDL 语句。

DDL 功能会扩展作业资源返回的信息。 statistics.query.statementType 包含 DDL 支持的以下其他值:

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query 有 2 个附加字段:

  • ddlOperationPerformed:执行的 DDL 操作,可能取决于是否存在 DDL 目标。当前值包括:
    • CREATE:查询创建了 DDL 目标。
    • SKIP:无运维。示例 - 已提交 CREATE TABLE IF NOT EXISTS,且存在表。或已提交 DROP TABLE IF EXISTS,且不存在表。
    • REPLACE:查询替换了 DDL 目标。示例 - 已提交 CREATE OR REPLACE TABLE,且已存在表。
    • DROP:查询删除了 DDL 目标。
  • ddlTargetTable:当您提交 CREATE TABLE/VIEW 语句或 DROP TABLE/VIEW 语句时,目标表会返回为包含 3 个字段的对象:
    • “projectId”:字符串
    • “datasetId”:字符串
    • “tableId”:字符串

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

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

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

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

网页界面

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击 Compose query

  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 方法并在请求正文的 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”:字符串
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

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