本文档介绍如何创建和使用按整数列分区的表。如需了解其他类型的分区表,请参阅创建和使用日期/时间戳分区表或创建和使用提取时间分区表。
如需详细了解整数范围分区,请参阅整数范围分区表。
创建整数范围分区表后,您可以执行以下操作:
- 控制对表数据的访问
- 获取有关分区表的信息
- 列出数据集中的分区表
- 使用元表获取分区表元数据
如需详细了解如何管理分区表(包括更新分区表属性、复制分区表和删除分区表),请参阅管理分区表。
限制
整数范围分区表存在如下限制:
- 分区列必须为
INTEGER
列。虽然列模式可以是REQUIRED
或NULLABLE
,但不能是REPEATED
(基于数组)。 - 此外,分区列必须是顶级字段。不能将
RECORD
(STRUCT
) 中的叶字段用作分区列。 - 不能使用旧版 SQL 查询分区表,也不能将查询结果写入分区表中。
创建分区表
您可以通过以下任一方法在 BigQuery 中创建整数范围分区表:
- 使用 Cloud Console
- 使用 DDL
CREATE TABLE
语句并附加一个包含partition expression
的PARTITION BY RANGE_BUCKET
子句 - 使用
bq
命令行工具的bq mk
命令 - 调用
tables.insert
API 方法以编程方式创建 - 使用查询结果
- 在加载数据时
表命名
在 BigQuery 中创建表时,数据集中每个表的名称都必须具有唯一性。表名称可:
- 包含最多 1024 个字符。
- 包含类别 L(字母)、M(符号)、N(数字)、Pc(连接符,包括下划线)、Pd(短划线)、Zs(空格)中的 Unicode 字符。如需了解详情,请参阅常规类别。
例如,以下都是有效的表名称:table-01
、ग्राहक
、00_お客様
、étudiant
。
某些表名称和表名称前缀已被预留。如果您收到错误,表示您的表名称或前缀已被预留,请选择其他名称并重试。
所需权限
如需创建表,您至少必须具有以下权限:
bigquery.tables.create
:创建表的权限bigquery.tables.updateData
:使用加载作业、查询作业或复制作业向表中写入数据bigquery.jobs.create
:用于运行向表中写入数据的查询作业、加载作业或复制作业
如需访问向表中写入的数据,可能还需要其他权限,例如 bigquery.tables.getData
。
以下预定义的 IAM 角色同时包含 bigquery.tables.create
和 bigquery.tables.updateData
权限:
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
以下预定义的 IAM 角色包含 bigquery.jobs.create
权限:
bigquery.user
bigquery.jobUser
bigquery.admin
此外,如果用户具有 bigquery.datasets.create
权限,则当该用户创建数据集时,系统会为其授予该数据集的 bigquery.dataOwner
访问权限。借助 bigquery.dataOwner
访问权限,用户可以在数据集内创建和更新表。
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
创建含架构定义的空分区表
您无法创建不含架构定义的空分区表。必须使用架构,才能确定用于创建分区的列。
创建含架构定义的空分区表时,您可以执行下列操作:
- 使用
bq
命令行工具以内嵌方式提供架构 - 使用
bq
命令行工具指定 JSON 架构文件 - 调用 API 的
tables.insert
方法时,在表资源中提供架构
如需详细了解如何指定表架构,请参阅指定架构。
创建分区表后,您可以执行下列操作:
- 向其中加载数据
- 向其中写入查询结果
- 向其中复制数据
如需创建带架构定义的空分区表,请执行下列操作:
控制台
在 Cloud Console 中打开 BigQuery 页面。
在探索器面板中,展开您的项目并选择数据集。
在详细信息面板中,点击创建表。
在创建表面板的来源部分,执行以下操作:
- 在基于以下数据创建表部分,选择空表。
在目标部分中执行如下设置:
- 对于数据集名称,选择相应的数据集,然后在表名称字段中输入要创建的表的名称。
- 确认表类型设置为原生表。
在 Schema 部分中,输入架构定义。通过执行以下操作之一,手动输入架构信息:
点击以文字形式修改,并以 JSON 数组格式输入表架构:
点击添加字段,然后输入架构信息。
在分区和集群设置下,从分区下拉列表中选择一个类型为
INTEGER
的列。为 start(起始值)、end(终止值)和 interval(间隔值)提供值。
- start 是范围分区的起始值(含边界值)
- end 是范围分区的终止值(不含边界值)
- interval 是分区中每个范围的宽度
(可选)在分区过滤条件中,点击需要分区过滤条件框,以要求用户添加
WHERE
子句来指定要查询的分区。要求分区过滤条件有可能减少费用并提高性能。如需了解详情,请参阅查询分区表。(可选)点击高级选项,然后在加密部分点击客户管理的密钥以使用 Cloud Key Management Service 密钥。如果保留 Google 管理的密钥设置,BigQuery 将对静态数据进行加密。
点击创建表。
SQL
借助数据定义语言 (DDL) 语句,您可以使用标准 SQL 查询语法创建和修改表和视图。
详细了解如何使用数据定义语言语句。
要在 Cloud Console 中使用 DDL 语句创建分区表,请执行以下操作:
在 Cloud Console 中打开 BigQuery 页面。
点击编写新查询。
在查询编辑器文本区域中,输入您的
CREATE TABLE
DDL 语句。以下查询会创建一个名为
newtable
的表,该表在 customer_id 列具有一个整数范围分区,其中起始值为 0,终止值为 100,间隔值为 10。CREATE TABLE mydataset.newtable PARTITION BY RANGE_BUCKET(customer_id, GENERATE_ARRAY(0, 100, 10)) AS SELECT 1 AS customer_id, DATE "2019-10-01" AS date1
点击运行。查询完成后,该表将显示在该数据集表列表中。
bq
使用带有 --range_partitioning
标志的 mk
命令:
bq mk \ --range_partitioning=column_name,start,end,interval \ project_id:dataset.table \ "column_name:integer,value:integer"
其中:
- column_name 是用于创建整数范围分区的列。
- start 是范围分区的起始值(含边界值)
- end 是范围分区的终止值(不含边界值)
- interval 是分区中每个范围的宽度
- project_id 是项目 ID。
- dataset 是您的项目中的数据集。
- table 是您正在创建的分区表的名称。
示例:
输入以下命令,在默认项目的 mydataset
中创建名为 mypartitionedtable
的整数范围分区表。分区基于起始值 0、终止值 100 和间隔值 10。
--require_partition_filter
标志用于要求用户添加 WHERE
子句来指定要查询的分区。要求分区过滤条件有可能减少费用并提高性能。如需了解详情,请参阅查询分区表。
bq mk \
--require_partition_filter \
--range_partitioning=customer_id,0,100,10 \
mydataset.mypartitionedtable \
"customer_id:integer,value:integer"
API
使用指定了 rangePartitioning
属性和 schema
属性的已定义表资源调用 tables.insert
方法。
Java
试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
Node.js
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Node.js 设置说明进行操作。如需了解详情,请参阅 BigQuery Node.js API 参考文档。
Python
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
要验证是否已按整数列对表进行分区,请检查架构。例如,运行以下命令:
bq show --format=prettyjson mydataset.mytable
如果整数列已进行了分区,则 bq show
的输出将包含 rangePartitioning
数据:
...
"rangePartitioning": {
"field": "customer_id",
"range": {
"end": "100",
"interval": "10",
"start": "0"
}
},
...
写入整数范围分区表
写入整数范围分区表的数据会自动进行分区。写入表的方式包括加载作业、查询和流式传输。
对于流式传输,流式缓冲区中的数据位于 UNPARTITIONED 分区。提取数据时,数据最初会保留在 UNPARTITIONED 分区中。当未分区数据累积到足够多时,系统会将其重新分区到特定分区。
以下示例演示了如何将查询结果保存到整数范围分区表:
bq query --nouse_legacy_sql \
--destination_table=mydataset.mytable \
'SELECT value AS customer_id, value+1 AS value FROM UNNEST(GENERATE_ARRAY(-5, 110, 5)) AS value'
查询整数范围分区表
整数范围分区表只能通过标准 SQL 进行查询。在查询整数范围分区表时,如果整数分区列有过滤条件,则这些过滤条件将用于删减分区和降低查询费用。
以下查询将扫描起始值为 30、40 和 50 的 3 个分区。
bq query --nouse_legacy_sql \
'SELECT * FROM mydataset.mytable WHERE customer_id BETWEEN 30 AND 50'
下面是 bq query
命令的示例输出结果:
Waiting on bqjob_r4fce65fa3381528e_000001670994aeb6_1 ... (0s) Current status: DONE
+---------+-------+
| customer_id | value |
+---------+-------+
| 40 | 41 |
| 45 | 46 |
| 30 | 31 |
| 35 | 36 |
| 50 | 51 |
+---------+-------+
在本示例中,每个分区有 2 行,每行有 2 个整数列,因此查询应扫描 3 * 2 * 2 * 8 = 96 个字节。您可以检查作业信息:
bq show -j bqjob_r4fce65fa3381528e_000001670994aeb6_1
下面是 bq show
命令的示例输出结果:
Job myproject:bqjob_r4fce65fa3381528e_000001670994aeb6_1
Job Type State Start Time Duration User Email Bytes Processed Bytes Billed Billing Tier Labels
---------- --------- ----------------- ---------- --------------------- ----------------- -------------- -------------- --------
query SUCCESS 24 Sep 12:19:58 0:00:01 joe@google.com 96 10485760 1
支持 DML 语句。例如:
bq query --nouse_legacy_sql \
'DELETE FROM mydataset.mytable WHERE customer_id = 30'
目前,整数范围分区列上的函数不支持分区删减。例如,以下查询将扫描整个表。
bq query --nouse_legacy_sql \
'SELECT * FROM mydataset.mytable WHERE customer_id+1 BETWEEN 30 AND 50'
整数范围分区表上的表修饰器
与日期/时间戳分区类似,表修饰器可用于处理整数范围分区表中的分区。处理范围分区的关键是范围的起始值。
以下示例查询起始值为 0 的范围分区。该分区有 2 个值,分别为 0 和 5。
bq query 'SELECT * FROM mydataset.mytable$0'
+---------+-------+
| customer_id | value |
+---------+-------+
| 0 | 1 |
| 5 | 6 |
+---------+-------+
整数范围分区搭配聚簇
您可以将整数范围分区与聚簇操作搭配使用。数据首先按整数范围分区列进行分区,然后每个分区中的数据按聚簇列进行聚簇。
例如,以下命令会创建一个包含整数范围列和聚簇的表。
bq mk \
--range_partitioning=customer_id,0,100,10 \
--clustering_fields=value \
mydataset.mytable_2 \
"customer_id:integer,value:integer"
当您检索表的格式时,会发现范围分区和聚簇均已生效:
...
"clustering": {
"fields": [
"value"
]
},
...
"rangePartitioning": {
"field": "customer_id",
"range": {
"end": "100",
"interval": "10",
"start": "0"
}
},
...
基于查询结果创建分区表
如需基于查询结果创建分区表,请执行以下操作:
控制台
使用 Cloud Console 查询数据时,您无法为目标表指定分区选项。
bq
输入 bq query
命令,指定 --destination_table
标志可基于查询结果创建一个永久表,指定 --range_partitioning
标志可创建分区目标表。
指定 use_legacy_sql=false
标志可使用标准 SQL 语法。要将查询结果写入非默认项目中的某个表,请按以下格式将相应项目 ID 添加到数据集名称:project_id:dataset
。
(可选)提供 --location
标志并将其值设置为您的位置。
输入以下命令可基于查询结果创建一个新的分区目标表:
bq --location=location query \ --destination_table project_id:dataset.table \ --range_partitioning column,start,end,interval \ --use_legacy_sql=false \ 'query'
其中:
- location 是位置的名称。
--location
是可选标志。例如,如果您在东京使用 BigQuery,请将该标志的值设置为asia-northeast1
。您可以使用 .bigqueryrc 文件设置默认位置值。 - project_id 是项目 ID。
- dataset 是将包含新分区表的数据集的名称。
- table 是您基于查询结果创建的分区表的名称。
- column 是用于分区的 INTEGER 列。
- start 是范围分区的起始值(含边界值)
- end 是范围分区的终止值(不含边界值)
- interval 是分区中每个范围的宽度
- query 是使用标准 SQL 语法的查询。目前,无法使用旧版 SQL 查询分区表,也无法将查询结果写入分区表中。
示例:
输入以下命令可将查询结果写入 mydataset
中名为 mypartitionedtable
的目标表。mydataset
属于默认项目。此查询从非分区表(医疗保险公共数据集)中检索数据。该表的 provider_id
INTEGER
列用于创建分区。
bq query \ --destination_table mydataset.mypartitionedtable \ --use_legacy_sql=false \ --range_partitioning provider_id,10000,700000,10000 \ 'SELECT provider_id, total_discharges, average_covered_charges FROM `bigquery-public-data`.medicare.inpatient_charges_2011 LIMIT 300'
API
要将查询结果保存到永久分区表中,请调用 jobs.insert
方法,配置一个 query
作业,并为 destinationTable
和 rangePartitioning
属性添加值。
在作业资源 jobReference
部分的 location
属性中指定您的位置。
在加载数据时创建分区表
在将数据加载到新表的过程中,可以通过指定分区选项来创建分区表。无需创建空的分区表即可加载数据。可以同时创建分区表和加载数据。
在将数据加载到 BigQuery 中时,可以提供表架构,或者对于支持的数据格式,可以使用架构自动检测。
通过分区装饰器,您可以将数据加载到特定分区。例如,假设某个表按 customer_id 列进行整数范围分区,其中起始值为 0,终止值为 100,间隔值为 10。要为 0 至 9 范围内的客户 ID 加载所有数据,请使用以下 $0
分区装饰器:
table_name$0
使用分区装饰器将数据加载到特定分区时,加载到分区的数据必须与相应表的分区架构相符。所有写入到分区的行均应包含相应分区日期内的值。
如需详细了解如何加载数据,请参阅将数据加载到 BigQuery 简介。
控制对分区表的访问权限
如需配置对表和视图的访问权限,您可以在以下级层为实体授予 IAM 角色,这些级层按照允许的资源范围从大到小依次排列:
- Google Cloud 资源层次结构中的较高级层,例如项目、文件夹或组织级层
- 数据集级层
- 表/视图级层
对受 IAM 保护的任何资源的访问权限具有附加性。例如,如果某个实体没有项目等较高级层的访问权限,您可以在数据集级层向该实体授予访问权限,然后该实体便将有权访问该数据集中的表和视图。同样,如果实体没有较高级层或数据集级层的访问权限,您可以在表或视图级层向该实体授予访问权限。
在 Google Cloud 资源层次结构中授予更高级层(例如项目、文件夹或组织级层)的 IAM 角色,使实体可访问一组广泛的资源。例如,在项目级为实体授予角色会为该实体提供整个项目中所有数据集的访问权限。
在数据集级层授予角色可指定允许实体对该特定数据集中的表和视图执行的操作,即使实体没有更高级层的访问权限也可执行这些操作。如需详细了解如何配置数据集级层的访问权限控制,请参阅控制对数据集的访问权限。
在表或视图级层授予角色可指定允许实体对特定表和视图执行的操作,即使实体没有更高级层的访问权限也可执行这些操作。如需了解如何配置表级层的访问权限控制,请参阅控制对表和视图的访问权限。
您还可以创建 IAM 自定义角色。如果创建自定义角色,则您授予的权限取决于您希望实体能够执行的具体操作。
您无法对受 IAM 保护的任何资源设置“拒绝”权限。
如需详细了解角色和权限,请参阅:
- IAM 文档中的了解角色
- BigQuery 预定义的角色和权限
- 控制对数据集的访问
- 控制对表和视图的访问权限
- 通过 BigQuery 列级层安全性限制访问权限
使用分区表
获取有关分区表的信息
您可以通过以下方式来获取有关表的信息:
- 使用 Cloud Console
- 在
bq
命令行工具中使用bq show
命令 - 调用
tables.get
API 方法 - 使用客户端库
所需权限
如需获取有关表的信息,您至少必须获得 bigquery.tables.get
权限。以下预定义的 IAM 角色包含 bigquery.tables.get
权限:
bigquery.metadataViewer
bigquery.dataViewer
bigquery.dataOwner
bigquery.dataEditor
bigquery.admin
此外,如果用户具有 bigquery.datasets.create
权限,则当该用户创建数据集时,系统会为其授予该数据集的 bigquery.dataOwner
访问权限。借助 bigquery.dataOwner
访问权限,用户可以检索表元数据。
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅访问权限控制。
获取分区表信息
如需查看有关分区表的信息,请执行以下操作:
控制台
在 Cloud Console 中打开 BigQuery 页面。
在探索器面板中,展开您的项目和数据集,然后选择表。
在详细信息面板中,点击详细信息。此标签页会显示表说明和表信息。
点击 Schema 标签页,查看表的架构定义。
bq
发出 bq show
命令可显示所有表信息。使用 --schema
标志可仅显示表的架构信息。--format
标志可用于控制输出。
如果您要获取非默认项目中的表信息,请按以下格式将相应项目 ID 添加到数据集:project_id:dataset
。
bq show --schema --format=prettyjson project_id:dataset.table
其中:
- project_id 是项目 ID。
- dataset 是数据集的名称。
- table 是表的名称。
示例:
输入以下命令可显示 mydataset
中有关 mytable
的所有信息。mydataset
属于默认项目。
bq show --format=prettyjson mydataset.mytable
输入以下命令可显示 mydataset
中有关 mytable
的所有信息。mydataset
属于 myotherproject
,而非默认项目。
bq show --format=prettyjson myotherproject:mydataset.mytable
输出应如下所示:
{ "creationTime": "1569429717657", "etag": "AcSEmWFQdbYEGT0auTE9NA==", "id": "myproject:mydataset.newtable", "kind": "bigquery#table", "lastModifiedTime": "1569429717657", "location": "US", "numBytes": "16", "numLongTermBytes": "0", "numRows": "1", "rangePartitioning": { "field": "customer_id", "range": { "end": "100", "interval": "10", "start": "0" } }, "schema": { "fields": [ { "name": "customer_id", "type": "INTEGER" }, { "name": "date1", "type": "DATE" } ] }, "selfLink": "https://bigquery.googleapis.com/bigquery/v2/projects/myproject/datasets/mydataset/tables/newtable", "tableReference": { "datasetId": "mydataset, "projectId": "myproject", "tableId": "newtable" }, "type": "TABLE" }
API
调用 tables.get
方法并提供所有相关参数。
列出某个数据集内的分区表
您可以通过以下方式列出数据集中的表(包括分区表):
- 使用 Cloud Console
- 在
bq
命令行工具中使用bq ls
命令 - 调用
tables.list
API 方法 - 使用客户端库
所需权限
如需列出数据集中的表,您至少必须具有 bigquery.tables.list
权限。以下预定义 IAM 角色包含 bigquery.tables.list
权限:
bigquery.user
bigquery.metadataViewer
bigquery.dataViewer
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅访问权限控制。
列出分区表
如需列出数据集中的表(包括分区表),请执行以下操作:
控制台
在 Cloud Console 中打开 BigQuery 页面。
在探索器面板中,展开您的项目并选择数据集。
滚动列表,查看数据集中的表。表、分区表、模型和视图由不同的图标进行标识。
API
如需使用 API 列出表,请调用 tables.list
方法。
列出分区表中的分区
如需列出分区表中的分区,您可以使用旧版 SQL 查询 __PARTITIONS_SUMMARY__
元表。
如需运行查询,您可以使用 Cloud Console 或 bq
命令行工具中的 bq query
命令,也可以调用 jobs.insert
方法并配置 query
作业。
所需权限
如需运行使用 __PARTITIONS_SUMMARY__
元表的查询作业,您至少必须具有 bigquery.jobs.create
权限。以下预定义的 IAM 角色包含 bigquery.jobs.create
权限:
bigquery.user
bigquery.jobUser
bigquery.admin
您还必须具有 bigquery.tables.getData
权限。以下预定义的 IAM 角色包含 bigquery.tables.getData
权限:
bigquery.dataViewer
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
要详细了解 BigQuery 中的 IAM 角色,请参阅访问权限控制。
列出某个分区表中的分区
您可以使用旧版 SQL 来列出某个分区表中的分区。如需列出分区表中的分区,请按如下所述操作:
控制台
在 Cloud Console 中打开 BigQuery 页面。
点击编写新查询按钮。
在查询编辑器框中输入以下文本,以查询
__PARTITIONS_SUMMARY__
元表:#legacySQL SELECT partition_id FROM [dataset.table$__PARTITIONS_SUMMARY__]
其中:
- dataset 是包含表的数据集。
- table 是表的名称。
点击运行。
bq
使用 bq query
命令输入以下查询:
bq --location=location query \ --use_legacy_sql=true \ 'SELECT partition_id FROM [dataset.table$__PARTITIONS_SUMMARY__]'
其中:
- location 是位置的名称。
--location
是可选标志。例如,如果您在东京使用 BigQuery,请将该标志的值设置为asia-northeast1
。您可以使用 .bigqueryrc 文件设置默认位置值。 - dataset 是包含表的数据集。
- table 是表的名称。
API
调用 jobs.insert
方法,并配置一个用于查询表的 __PARTITIONS_SUMMARY__
元表的 query
作业。
使用元表获取分区表元数据
您可以通过使用称为元表的特殊表来获取有关分区表的信息:元表包含元数据,例如数据集中的表和视图列表。元表为只读表。
目前,您无法使用 INFORMATION_SCHEMA
服务来获取分区表元数据。
使用元表获取分区元数据
__PARTITIONS_SUMMARY__
元表是一个特殊的表,其内容表示时间分区表中关于分区的元数据。__PARTITIONS_SUMMARY__
元表为只读表。
如需访问时间分区表中有关分区的元数据,请在查询的 SELECT
语句中使用 __PARTITIONS_SUMMARY__
元表。您可以通过以下方式运行查询:
- 使用 Cloud Console
- 使用
bq
命令行工具的bq query
命令 - 调用
jobs.insert
API 方法并配置query
作业 - 使用客户端库
目前,标准 SQL 不支持分区修饰器分隔符 ($
),因此,您不能使用标准 SQL 来查询 __PARTITIONS_SUMMARY__
。使用 __PARTITIONS_SUMMARY__
元表的旧版 SQL 查询如下所示:
#legacySQL SELECT column FROM [dataset.table$__PARTITIONS_SUMMARY__]
其中:
- dataset 是您的数据集的名称。
- table 是时间分区表的名称。
- column 是以下值之一:
值 | 说明 |
---|---|
project_id |
项目名称。 |
dataset_id |
数据集名称。 |
table_id |
时间分区表的名称。 |
partition_id |
分区的名称(日期)。 |
creation_time |
创建分区的时间,以从 UTC 1970 年 1 月 1 日起计算的毫秒数表示。 |
last_modified_time |
上次修改分区的时间,以从 UTC 1970 年 1 月 1 日起计算的毫秒数表示。 |
分区元表权限
如需运行使用 __PARTITIONS_SUMMARY__
元表的查询作业,您至少必须具有 bigquery.jobs.create
权限。以下预定义的 IAM 角色包含 bigquery.jobs.create
权限:
bigquery.user
bigquery.jobUser
bigquery.admin
您还必须具有 bigquery.tables.getData
权限。以下预定义的 IAM 角色包含 bigquery.tables.getData
权限:
bigquery.dataViewer
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
要详细了解 BigQuery 中的 IAM 角色,请参阅访问权限控制。
分区元表示例
以下查询会检索名为 mydataset.mytable
的范围分区表的所有分区元数据。
控制台
#legacySQL SELECT * FROM [mydataset.mytable$__PARTITIONS_SUMMARY__]
bq
bq query --use_legacy_sql=true ' SELECT * FROM [mydataset.mytable$__PARTITIONS_SUMMARY__]'
输出如下所示:
+----------------+------------+----------------+--------------+---------------+--------------------+ | project_id | dataset_id | table_id | partition_id | creation_time | last_modified_time | +----------------+------------+----------------+--------------+---------------+--------------------+ | myproject | mydataset | mytable | 10000 | 1517190224120 | 1517190224997 | | myproject | mydataset | mytable | 20000 | 1517190224120 | 1517190224997 | +----------------+------------+----------------+--------------+---------------+--------------------+
以下查询会列出上次修改 mydataset.mytable
中的分区的时间。
控制台
#legacySQL SELECT partition_id, last_modified_time FROM [mydataset.mytable$__PARTITIONS_SUMMARY__]
bq
bq query --use_legacy_sql=true ' SELECT partition_id, last_modified_time FROM [mydataset.mytable$__PARTITIONS_SUMMARY__]'
输出如下所示:
+--------------+--------------------+ | partition_id | last_modified_time | +--------------+--------------------+ | 100000 | 1471632556179 | | 20000 | 1471632538142 | | 30000 | 1471632570463 | +--------------+--------------------+
为了以便于阅读的格式显示 last_modified_time
字段,请使用 FORMAT_UTC_USEC
函数。例如:
控制台
#legacySQL SELECT partition_id, FORMAT_UTC_USEC(last_modified_time*1000) AS last_modified FROM [mydataset.table1$__PARTITIONS_SUMMARY__]
bq
bq query --use_legacy_sql=true ' SELECT partition_id, FORMAT_UTC_USEC(last_modified_time*1000) AS last_modified FROM [mydataset.mytable$__PARTITIONS_SUMMARY__]'
输出如下所示:
+--------------+----------------------------+ | partition_id | last_modified | +--------------+----------------------------+ | 10000 | 2016-08-19 18:49:30.463000 | | 20000 | 2016-08-19 18:49:16.179000 | | 30000 | 2016-08-19 18:48:58.142000 | +--------------+----------------------------+
后续步骤
- 如需大致了解 BigQuery 中的分区表支持,请参阅分区表简介。
- 要了解如何创建和使用日期/时间戳分区表,请参阅创建和使用日期/时间戳分区表。
- 要了解如何创建和使用提取时间分区表,请参阅创建和使用提取时间分区表。
- 如需了解如何管理和更新分区表,请参阅管理分区表。
- 如需了解如何查询分区表,请参阅查询分区表。