管理分区表数据

本文档介绍了如何在 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__

分区表安全性

分区表的访问权限控制与标准表的访问权限控制相同。如需了解详情,请参阅表访问权限控制简介

后续步骤

如需详细了解分区表的操作,请参阅: