我有一个每天积累数据的 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。