管理分区表数据
本文档介绍了如何在 BigQuery 中管理分区表数据。
分区修饰器
通过分区修饰器,您可以引用表中的分区。例如,您可以使用分区修饰器将数据写入特定分区。
分区修饰器采用 table_name$partition_id
格式,其中 partition_id
部分的格式取决于分区类型:
分区类型 | 格式 | 示例 |
---|---|---|
每小时 | yyyymmddhh |
my_table$2021071205 |
每天 | yyyymmdd |
my_table$20210712 |
每月 | yyyymm |
my_table$202107 |
每年 | yyyy |
my_table$2021 |
整数范围 | range_start |
my_table$40 |
浏览分区中的数据
如需浏览指定分区中的数据,请使用 bq head
命令和分区修饰器。
例如,以下命令会列出 2018-02-24 分区中 my_dataset.my_table
的前 10 行的所有字段:
bq head --max_rows=10 'my_dataset.my_tablee$20180224'
将数据写入特定分区
您可以使用带有分区修饰器的 bq load
命令将数据加载到特定分区。以下示例会将数据写入现有表的 20160501
(2016 年 5 月 1 日)分区中(假设该表已按日期分区):
bq load --source_format=CSV 'my_dataset.my_table$20160501' data.csv
您还可以将查询结果写入特定分区:
bq query \ --use_legacy_sql=false \ --destination_table='my_table$20160501' \ --append_table=true \ 'SELECT * FROM my_dataset.another_table'
通过注入时间分区,您可以使用此方法将较旧的数据加载到与最初创建数据的时间对应的分区中。
您也可以使用此方法来根据时区进行调整。默认情况下,注入时间分区基于世界协调时间 (UTC)。如果您希望分区时间与特定时区匹配,可以使用分区修饰器来抵消 UTC 注入时间。例如,如果您使用的是太平洋标准时间 (PST),则可以使用相应的分区修饰器 $20160501
将太平洋标准时间 2016 年 5 月 1 日生成的所有数据加载到该日期的分区中。
对于时间单位列和整数范围分区表,修饰器中指定的分区 ID 必须与写入的数据匹配。例如,如果表基于 DATE
列进行分区,则修饰器必须与该列中的值匹配。否则将发生错误。但是,如果您事先知道数据位于单个分区中,指定分区修饰器可以提高写入性能。
如需详细了解如何加载数据,请参阅将数据加载到 BigQuery 简介。
将数据流式传输到分区表中
如需了解如何使用 tabledata.insertAll
方法将数据流式插入到分区表,请参阅流式插入到分区表。
导出表数据
从分区表导出全部数据的方法与从非分区表导出数据的方法相同。如需了解详情,请参阅导出表数据。
要导出单个分区中的数据,请将分区修饰器附加到表名称。例如 my_table$20160201
。
您还可以通过将分区名称附加到表名称,导出 __NULL__
和 __UNPARTITIONED__
分区中的数据。例如 my_table$__NULL__
或 my_table$__UNPARTITIONED__
。
分区表安全性
分区表的访问权限控制与标准表的访问权限控制相同。如需了解详情,请参阅表访问权限控制简介。
后续步骤
如需详细了解分区表的操作,请参阅: