google-bigquery - BigQuery 命令在 xx 个月后自动删除数据

我有一个每天积累数据的 table 。我希望自动删除超过 xx 个月的数据。如何使用 BQ 命令进行设置。 ( table 未分区)。

回答1

当 table 不是问题中所问的分区时,使用 BQ 命令执行此操作的方法:

无分区:

bq query --nouse_legacy_sql \
'delete 
 FROM
   `{PROJECT}`.{DATASET}.{TABLE}' where DATE({YOUR_DATETIME_OR_TIMESTAMP_COL}) <  DATE_SUB(CURRENT_DATE(), INTERVAL {NUMBER_OF_MONTHS} MONTH)

您将不得不在某种包装脚本中使用它来每天执行它。

或者可能是安排它的最佳方式:使用 potens.io 的 Magnus (https://potens.io/products/#magnus)

新的自动删除方式:你只需要知道分区tables:https://cloud.google.com/bigquery/docs/partitioned-tables

下面是一个示例,便于理解:

CREATE TABLE tmp.gbq_partition_table_sample
(col_1 string, col_ts timestamp, col_2 INT64, col_3 INT64
)
PARTITION BY DATE(col_ts)
OPTIONS(
partition_expiration_days=30,
description="partitioned by date"
)

在这里,我将 col_ts 作为存储数据时间戳的列。同一列也在 DATE(col_ts) 上进行了分区,并将分区到期时间添加为 30 天。

此 table 将每天继续累积数据,并“自动”继续删除超过 30 天的数据。

这是您无需编写任何自定义作业来清理数据的方式。

另一种方法是,如果您有完整的 table 需要在某些天后删除,您可以随时更改 table 本身的到期 date。

相似文章

最新文章