BigQuery (BQ) - 删除分区

问题描述 投票:0回答:5

我正在使用 BQ CLI (https://cloud.google.com/bigquery/bq-command-line-tool)。

我没有找到如何删除DAY分区数据。

例如,我有一个 DAY PARTITIONED 表,其中保存日期 2016-09-01 到 2016-09-30 的数据。

我需要完全删除“2016-09-15”分区。

这可以通过 CLI 命令实现吗?

date google-bigquery partition
5个回答
5
投票

如果您确实想删除分区,可以在指定

bq rm
表装饰器时使用
$YYYYMMDD
命令。对于您的情况,命令如下所示:

bq rm -t 'dataset.table$20160915'

请小心包含 single 引号,否则装饰器可能会扩展为空变量,并且您将删除整个表。


4
投票

您可能不必删除它即可重新插入数据。有关如何重新声明日期分区表特定部分中的数据的详细信息,请参阅此链接

基本上,只需将

--replace
标志与
$YYYYMMDD
表装饰器和 bq CLI 工具结合使用即可。


1
投票

我们可以通过 CLI 更新它的简单方法:-

bq update --time_partitioning_expiration (time in second) Dataset.table_name

0
投票

第 1 步:选择数据集(以及表)所在的项目

gcloud config set project <project-name>

注意:您可以使用

gcloud projects list

查看可用项目的完整列表

第二步:删除所需分区

bq rm -t 'dataset.table$partition'

否则,即使在处理单独的项目时,您甚至可以从表中删除分区。但在这种情况下,您必须在命令中指定它:

bq rm -t project_id:dataset.table$partition

0
投票

对于像我这样点击标题 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))
© www.soinside.com 2019 - 2024. All rights reserved.