我正在使用 BQ CLI (https://cloud.google.com/bigquery/bq-command-line-tool)。
我没有找到如何删除DAY分区数据。
例如,我有一个 DAY PARTITIONED 表,其中保存日期 2016-09-01 到 2016-09-30 的数据。
我需要完全删除“2016-09-15”分区。
这可以通过 CLI 命令实现吗?
如果您确实想删除分区,可以在指定
bq rm
表装饰器时使用 $YYYYMMDD
命令。对于您的情况,命令如下所示:
bq rm -t 'dataset.table$20160915'
请小心包含 single 引号,否则装饰器可能会扩展为空变量,并且您将删除整个表。
您可能不必删除它即可重新插入数据。有关如何重新声明日期分区表特定部分中的数据的详细信息,请参阅此链接。
基本上,只需将
--replace
标志与 $YYYYMMDD
表装饰器和 bq CLI 工具结合使用即可。
我们可以通过 CLI 更新它的简单方法:-
bq update --time_partitioning_expiration (time in second) Dataset.table_name
第 1 步:选择数据集(以及表)所在的项目
gcloud config set project <project-name>
注意:您可以使用
gcloud projects list
查看可用项目的完整列表
第二步:删除所需分区
bq rm -t 'dataset.table$partition'
否则,即使在处理单独的项目时,您甚至可以从表中删除分区。但在这种情况下,您必须在命令中指定它:
bq rm -t project_id:dataset.table$partition
对于像我这样点击标题 BigQuery (BQ) - Drop Partition 但希望使用 api 来完成此操作的人。
删除分区的方式与删除表相同,只需在末尾添加
${partrition}
,即 my.table.id$20230101
。 (删除表的api文档)
使用 python 的示例:
from google.cloud import bigquery
client.delete_table('my.table.id$20230101')
还有如果其他人想删除每日分区
from google.cloud import bigquery
from datetime import date
def delete_day_partition(table_id: str, day: date):
"""
https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/delete
https://stackoverflow.com/questions/41087763/is-there-a-way-of-deleting-old-partitions-in-a-partitioned-table-using-bigquery
"""
client = bigquery.Client()
day = day.strftime('%Y%m%d') # date() -> 'YYYYMMDD'
partition = f'{table_id}${day}'
client.delete_table(partition)
delete_day_partition('my.table.id', date(2023, 1, 1))