创建分区表
本页面介绍如何在 BigQuery 中创建分区表。如需分区表的概览,请参阅分区表简介。
准备工作
授予为用户提供执行本文档中的每个任务所需权限的 Identity and Access Management (IAM) 角色。
所需权限
所需的角色
如需获得创建表所需的权限,请让管理员向您授予以下 IAM 角色:
-
针对项目的 BigQuery Job User (
roles/bigquery.jobUser)(如果您要通过加载数据或将查询结果保存到表来创建表)。 -
针对要在其中创建表的数据集的 BigQuery Data Editor (
roles/bigquery.dataEditor)。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含创建表所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
您需要具备以下权限才能创建表:
-
针对要在其中创建表的数据集的
bigquery.tables.create。 -
针对查询引用的所有表和视图的
bigquery.tables.getData(如果您要将查询结果保存为表)。 -
针对项目的
bigquery.jobs.create(如果您要通过加载数据或将查询结果保存到表中来创建表)。 -
针对表的
bigquery.tables.updateData(如果您要使用查询结果附加到表或覆盖表)。
创建空分区表
在 BigQuery 中创建分区表的步骤与创建标准表类似,不同之处在于您需要指定分区选项以及任何其他表选项。
创建时间单位列分区表
如需创建具有架构定义的空时间单位列分区表,请执行以下操作:
控制台
在 Google Cloud 控制台中,前往 BigQuery 页面。
- 在左侧窗格中,点击 Explorer。
- 在探索器窗格中,展开您的项目,点击数据集,然后选择一个数据集。
- 在数据集信息部分中,点击 创建表。
- 在创建表窗格中,指定以下详细信息:
- 在来源部分,在基于以下数据源创建表列表中选择空表。
- 在目标部分,指定以下详细信息:
- 在数据集部分,选择您要在其中创建表的数据集。
- 在表字段中,输入您要创建的表的名称。
- 确认表类型字段是否设置为原生表。
- 在架构部分,输入架构定义。
架构必须包含有
DATE、TIMESTAMP或DATETIME列用于分区列。如需了解详情,请参阅指定架构。 您可以使用以下任一方法手动输入架构信息:- 选项 1:点击以文本形式修改,并以 JSON 数组的形式粘贴架构。使用 JSON 数组时,您要使用与创建 JSON 架构文件相同的流程生成架构。您可以输入以下命令,以 JSON 格式查看现有表的架构:
bq show --format=prettyjson dataset.table
- 选项 2:点击 添加字段,然后输入表架构。指定每个字段的名称、类型和模式。
- 选项 1:点击以文本形式修改,并以 JSON 数组的形式粘贴架构。使用 JSON 数组时,您要使用与创建 JSON 架构文件相同的流程生成架构。您可以输入以下命令,以 JSON 格式查看现有表的架构:
- 在分区和聚簇设置部分的分区列表中,选择按字段分区,然后选择分区列。只有当架构包含
DATE、TIMESTAMP或DATETIME列时,此选项才可用。 - 可选:如需要求对此表的所有查询使用分区过滤条件,请选中要求使用分区过滤条件复选框。使用分区过滤条件可以减少费用并提高性能。如需了解详情,请参阅设置分区过滤条件要求。
- 选择分区类型。仅支持按天。
- 可选:如果要使用客户管理的加密密钥,在高级选项部分,选择使用客户管理的加密密钥 (CMEK) 选项。默认情况下,BigQuery 会使用 Google-owned and Google-managed encryption key对以静态方式存储的客户内容进行加密。
- 点击创建表。
SQL
如需创建时间单位列分区表,请将 CREATE TABLE DDL 语句与 PARTITION BY 子句搭配使用。
以下示例会基于 transaction_date 列创建一个包含每日分区的表:
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY transaction_date OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
使用
OPTIONS子句设置表选项,例如分区过期时间和分区过滤条件要求。点击 运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
DATE 列的默认分区类型是每日分区。如需指定其他分区类型,请在 PARTITION BY 子句中添加 DATE_TRUNC 函数。例如,以下查询会创建一个包含每月分区的表:
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY DATE_TRUNC(transaction_date, MONTH) OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
您还可以指定 TIMESTAMP 或 DATETIME 列作为分区列。在这种情况中,请在 PARTITION BY 子句中添加 TIMESTAMP_TRUNC 或 DATETIME_TRUNC 函数来指定分区类型。例如,以下语句会基于 TIMESTAMP 列创建一个包含每日分区的表:
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_ts TIMESTAMP) PARTITION BY TIMESTAMP_TRUNC(transaction_ts, DAY) OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
将
bq mk命令与--table标志(或-t快捷方式)结合使用:bq mk \ --table \ --schema SCHEMA \ --time_partitioning_field COLUMN \ --time_partitioning_type UNIT_TIME \ --time_partitioning_expiration EXPIRATION_TIME \ --require_partition_filter=BOOLEAN PROJECT_ID:DATASET.TABLE
请替换以下内容:
- SCHEMA:采用
column:data_type,column:data_type格式的架构定义或本地机器上的 JSON 架构文件的路径。如需了解详情,请参阅指定架构。 - COLUMN:分区列的名称。在表架构中,此列必须为
TIMESTAMP、DATETIME或DATE类型。 - UNIT_TIME:分区类型。支持的值包括
DAY、HOUR、MONTH或YEAR。 - EXPIRATION_TIME:表分区的到期时间(以秒为单位)。
--time_partitioning_expiration是可选标志。如需了解详情,请参阅设置分区过期时间。 - BOOLEAN:如果为
true,则对该表的查询必须包含分区过滤条件。--require_partition_filter是可选标志。 如需了解详情,请参阅设置分区过滤条件。 - PROJECT_ID:项目 ID。 如果省略,则系统会使用默认项目。
- DATASET:项目中的数据集的名称。
- TABLE:要创建的表的名称。
如需了解其他命令行选项,请参阅
bq mk。以下示例会创建一个名为
mytable的表,该表基于ts列使用每小时分区进行分区。分区到期时间为 259200 秒(3 天)。bq mk \ -t \ --schema 'ts:TIMESTAMP,qtr:STRING,sales:FLOAT' \ --time_partitioning_field ts \ --time_partitioning_type HOUR \ --time_partitioning_expiration 259200 \ mydataset.mytable
- SCHEMA:采用
- 启动 Cloud Shell。
-
设置要应用 Terraform 配置的默认 Google Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
-
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有
.tf扩展名,例如main.tf。在本教程中,该文件称为main.tf。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的
main.tf中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
-
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加
-upgrade选项:terraform init -upgrade
-
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
-
通过运行以下命令并在提示符处输入
yes来应用 Terraform 配置:terraform apply
等待 Terraform 显示“应用完成!”消息。
- 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
Terraform
使用 google_bigquery_table 资源。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为客户端库设置身份验证。
以下示例会创建一个名为 mytable 的表,该表按天分区:
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
应用更改
API
使用指定了 timePartitioning 属性和 schema 属性的已定义表资源调用 tables.insert 方法。
Go
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Go 设置说明进行操作。 如需了解详情,请参阅 BigQuery Go API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
Node.js
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Node.js 设置说明进行操作。 如需了解详情,请参阅 BigQuery Node.js API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
创建注入时间分区表
如需创建具有架构定义的空提取时间分区表,请执行以下操作:
控制台
SQL
如需创建提取时间分区表,请将 CREATE TABLE 语句与基于 _PARTITIONDATE 分区的 PARTITION BY 子句结合使用。
以下示例会创建一个包含每日分区的表:
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
CREATE TABLE mydataset.newtable (transaction_id INT64) PARTITION BY _PARTITIONDATE OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
使用
OPTIONS子句设置表选项,例如分区过期时间和分区过滤条件要求。点击 运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
注入时间分区的默认分区类型是每日分区。如需指定其他分区类型,请在 PARTITION BY 子句中添加 DATE_TRUNC 函数。例如,以下查询会创建一个包含每月分区的表:
CREATE TABLE mydataset.newtable (transaction_id INT64) PARTITION BY DATE_TRUNC(_PARTITIONTIME, MONTH) OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
将
bq mk命令与--table标志(或-t快捷方式)结合使用:bq mk \ --table \ --schema SCHEMA \ --time_partitioning_type UNIT_TIME \ --time_partitioning_expiration EXPIRATION_TIME \ --require_partition_filter=BOOLEAN \ PROJECT_ID:DATASET.TABLE
请替换以下内容:
- SCHEMA:采用
column:data_type,column:data_type格式的定义或本地机器上的 JSON 架构文件的路径。如需了解详情,请参阅指定架构。 - UNIT_TIME:分区类型。支持的值包括
DAY、HOUR、MONTH或YEAR。 - EXPIRATION_TIME:表分区的到期时间(以秒为单位)。
--time_partitioning_expiration是可选标志。如需了解详情,请参阅设置分区过期时间。 - BOOLEAN:如果为
true,则对该表的查询必须包含分区过滤条件。--require_partition_filter是可选标志。 如需了解详情,请参阅设置分区过滤条件。 - PROJECT_ID:项目 ID。 如果省略,则系统会使用默认项目。
- DATASET:项目中的数据集的名称。
- TABLE:要创建的表的名称。
如需了解其他命令行选项,请参阅
bq mk。以下示例会创建一个名为
mytable的注入时间分区表。该表包含每日分区,分区有效期为 259200 秒(3 天)。bq mk \ -t \ --schema qtr:STRING,sales:FLOAT,year:STRING \ --time_partitioning_type DAY \ --time_partitioning_expiration 259200 \ mydataset.mytable
- SCHEMA:采用
- 启动 Cloud Shell。
-
设置要应用 Terraform 配置的默认 Google Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
-
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有
.tf扩展名,例如main.tf。在本教程中,该文件称为main.tf。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的
main.tf中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
-
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加
-upgrade选项:terraform init -upgrade
-
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
-
通过运行以下命令并在提示符处输入
yes来应用 Terraform 配置:terraform apply
等待 Terraform 显示“应用完成!”消息。
- 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
Terraform
使用 google_bigquery_table 资源。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为客户端库设置身份验证。
以下示例会创建一个名为 mytable 的表,该表按注入时间分区:
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
应用更改
API
使用指定了 timePartitioning 属性和 schema 属性的已定义表资源调用 tables.insert 方法。
创建整数范围分区表
如需创建具有架构定义的空整数范围分区表,请执行以下操作:
控制台
在 Google Cloud 控制台中打开 BigQuery 页面。
在浏览器面板中,展开您的项目并选择数据集。
展开 操作选项,然后点击打开。
在详情面板中,点击创建表 。
在创建表页面的来源部分,选择空白表。
在目标部分中执行如下设置:
- 在数据集名称部分,选择相应数据集。
- 在表名称字段中,输入表的名称。
- 确认表类型设置为原生表。
在架构部分,输入架构定义。确保架构包含
INTEGER列作为分区列。如需了解详情,请参阅指定架构。在分区和聚簇设置部分的分区下拉列表中,选择按字段分区,然后选择分区列。只有在架构包含
INTEGER列时,此选项才可用。为起始值、终止值和间隔值提供值。
- 起始值是第一个分区范围(含)的起始值。
- 终止值是最后一个分区范围(不含)的结尾。
- 间隔值是每个分区范围的宽度。
超出这些范围的值会归入特殊的
__UNPARTITIONED__分区。(可选)如需对此表的所有查询使用分区过滤条件,请选中需要分区过滤条件复选框。要求使用分区过滤条件可以减少费用并提高性能。如需了解详情,请参阅设置分区过滤条件。
点击创建表。
SQL
如需创建整数范围分区表,请将 CREATE TABLE DDL 语句与 PARTITION BY 子句搭配使用。
以下示例会创建一个按 customer_id 列分区的表,该列的起始值为 0,终止值为 100,间隔值为 10:
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
CREATE TABLE mydataset.newtable (customer_id INT64, date1 DATE) PARTITION BY RANGE_BUCKET(customer_id, GENERATE_ARRAY(0, 100, 10)) OPTIONS ( require_partition_filter = TRUE);
使用
OPTIONS子句设置表选项,例如分区过滤条件要求。点击 运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
将
bq mk命令与--table标志(或-t快捷方式)结合使用:bq mk \ --schema schema \ --range_partitioning=COLUMN_NAME,START,END,INTERVAL \ --require_partition_filter=BOOLEAN \ PROJECT_ID:DATASET.TABLE
请替换以下内容:
- SCHEMA:采用
column:data_type,column:data_type格式的内嵌架构定义或本地机器上 JSON 架构文件的路径。如需了解详情,请参阅指定架构。 - COLUMN_NAME:分区列的名称。在表架构中,此列必须是
INTEGER类型。 - START:第一个分区范围的起始值(含边界值)。
- END:最后一个分区范围的终止值(不含边界值)。
- INTERVAL:每个分区范围的宽度。
- BOOLEAN:如果为
true,则对该表的查询必须包含分区过滤条件。--require_partition_filter是可选标志。 如需了解详情,请参阅设置分区过滤条件。 - PROJECT_ID:项目 ID。 如果省略,则系统会使用默认项目。
- DATASET:项目中的数据集的名称。
- TABLE:要创建的表的名称。
超出分区范围的值会归入特殊的
__UNPARTITIONED__分区。如需了解其他命令行选项,请参阅
bq mk。以下示例会创建一个基于
customer_id列分区的名为mytable的表。bq mk \ -t \ --schema 'customer_id:INTEGER,qtr:STRING,sales:FLOAT' \ --range_partitioning=customer_id,0,100,10 \ mydataset.mytable
- SCHEMA:采用
- 启动 Cloud Shell。
-
设置要应用 Terraform 配置的默认 Google Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
-
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有
.tf扩展名,例如main.tf。在本教程中,该文件称为main.tf。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的
main.tf中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
-
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加
-upgrade选项:terraform init -upgrade
-
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
-
通过运行以下命令并在提示符处输入
yes来应用 Terraform 配置:terraform apply
等待 Terraform 显示“应用完成!”消息。
- 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
Terraform
使用 google_bigquery_table 资源。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为客户端库设置身份验证。
以下示例会创建一个名为 mytable 的表,该表按整数范围分区:
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
应用更改
API
使用指定了 rangePartitioning 属性和 schema 属性的已定义表资源调用 tables.insert 方法。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
Node.js
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Node.js 设置说明进行操作。 如需了解详情,请参阅 BigQuery Node.js API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
基于查询结果创建分区表
您可以通过以下方式基于查询结果创建分区表:
- 在 SQL 中,使用
CREATE TABLE ... AS SELECT语句。您可以使用此方法创建按时间单位列或整数范围分区的表,但不能创建按注入时间分区的表。 - 使用 bp 命令行工具或 BigQuery API 为查询设置目标表。查询运行时,BigQuery 会将结果写入目标表。您可以对任何分区类型使用此方法。
调用
jobs.insertAPI 方法并在timePartitioning属性或rangePartitioning属性中指定分区。
SQL
使用 CREATE TABLE 语句。添加 PARTITION BY 子句以配置分区。
以下示例会创建一个基于 transaction_date 列分区的表:
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY transaction_date AS ( SELECT transaction_id, transaction_date FROM mydataset.mytable );
使用
OPTIONS子句设置表选项,例如分区过滤条件要求。点击 运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
如需通过查询创建分区表,请将
bq query命令与--destination_table标志和--time_partitioning_type标志结合使用。时间单位列分区:
bq query \ --use_legacy_sql=false \ --destination_table TABLE_NAME \ --time_partitioning_field COLUMN \ --time_partitioning_type UNIT_TIME \ 'QUERY_STATEMENT'
注入时间分区:
bq query \ --use_legacy_sql=false \ --destination_table TABLE_NAME \ --time_partitioning_type UNIT_TIME \ 'QUERY_STATEMENT'
整数范围分区:
bq query \ --use_legacy_sql=false \ --destination_table PROJECT_ID:DATASET.TABLE \ --range_partitioning COLUMN,START,END,INTERVAL \ 'QUERY_STATEMENT'
请替换以下内容:
- PROJECT_ID:项目 ID。 如果省略,则系统会使用默认项目。
- DATASET:项目中的数据集的名称。
- TABLE:要创建的表的名称。
- COLUMN:分区列的名称。
- UNIT_TIME:分区类型。支持的值包括
DAY、HOUR、MONTH或YEAR。 - START:范围分区的起始值(含边界值)。
- END:范围分区的终止值(不含边界值)。
- INTERVAL:分区中每个范围的宽度。
- QUERY_STATEMENT:用于填充表的查询。
以下示例会创建一个基于
transaction_date列使用每月分区进行分区的表。bq query \ --use_legacy_sql=false \ --destination_table mydataset.newtable \ --time_partitioning_field transaction_date \ --time_partitioning_type MONTH \ 'SELECT transaction_id, transaction_date FROM mydataset.mytable'
以下示例会创建一个基于
customer_id列使用整数范围分区进行分区的表。bq query \ --use_legacy_sql=false \ --destination_table mydataset.newtable \ --range_partitioning customer_id,0,100,10 \ 'SELECT * FROM mydataset.ponies'
对于提取时间分区表,您还可以使用分区修饰器将数据加载到特定分区中。以下示例会创建一个新的提取时间分区表,并将数据加载到
20180201(2018 年 2 月 1 日)分区中:bq query \ --use_legacy_sql=false \ --time_partitioning_type=DAY \ --destination_table='newtable$20180201' \ 'SELECT * FROM mydataset.mytable'
API
如需将查询结果保存到分区表中,请调用 jobs.insert 方法。配置 query 作业。在 destinationTable 中指定目标表。在 timePartitioning 属性或 rangePartitioning 属性中指定分区。
将日期分片表转换为提取时间分区表
如果以前创建了带日期分割的表,则可以使用 bp 命令行工具中的 partition 命令将整个相关表集转换为单个提取时间分区表。
bq --location=LOCATION partition \ --time_partitioning_type=PARTITION_TYPE \ --time_partitioning_expiration INTEGER \ PROJECT_ID:SOURCE_DATASET.SOURCE_TABLE \ PROJECT_ID:DESTINATION_DATASET.DESTINATION_TABLE
请替换以下内容:
- LOCATION:您所在位置的名称。
--location是可选标志。 - PARTITION_TYPE:分区类型。可能的值包括
DAY、HOUR、MONTH或YEAR。 - INTEGER:分区到期时间(以秒为单位)。它没有最小值。到期时间以分区的世界协调时间 (UTC) 日期加上这个整数值为准。
time_partitioning_expiration是可选标志。 - PROJECT_ID:您的项目 ID。
- SOURCE_DATASET:包含日期分片表的数据集。
- SOURCE_TABLE:日期分片表的前缀。
- DESTINATION_DATASET:新分区表的数据集。
- DESTINATION_TABLE:需要创建的分区表的名称。
partition 命令不支持 --label、--expiration --add_tags 或 --description 标志。在创建表后,您可以为其添加标签、表过期时间、标记和说明。
运行 partition 命令时,BigQuery 会创建一个根据分片表生成分区的复制作业。
以下示例会通过一组以 sourcetable_ 为前缀的日期分片表创建一个名为 mytable_partitioned 的提取时间分区表。新表每天进行分区,分区到期时间为 259200 秒(3 天)。
bq partition \
--time_partitioning_type=DAY \
--time_partitioning_expiration 259200 \
mydataset.sourcetable_ \
mydataset.mytable_partitioned
如果日期分片表为 sourcetable_20180126 和 sourcetable_20180127,则此命令将创建以下分区:mydataset.mytable_partitioned$20180126 和 mydataset.mytable_partitioned$20180127。
分区表安全性
分区表的访问权限控制与标准表的访问权限控制相同。如需了解详情,请参阅表访问权限控制简介。