BigQuery 中的 UPDATE 语句将 _PARTITIONDATE 设置为 table 中的特定日期字段

UPDATE statement in BigQuery that sets _PARTITIONDATE equal particular date field in your table

我在 BigQuery 中有一个 table,其中有一个名为 dt 的日期列,其中所有日期的所有数据当前都在分区 DATE(_PARTITIONTIME)="2022-01-20" 中。我想 运行 一个 UPDATE 语句,使所有分区成为 dt=DATE(_PARTITIONTIME)。例如,DATE(_PARTITIONTIME)="2022-01-19" 将只有数据 where dt="2022-01-19",其中 DATE(_PARTITIONTIME)="2022-01-18" 将只有数据其中 dt="2022-01-18" 等等。

这是我过去做过的事情,所以我知道这是可能的,我只是不记得具体是什么声明了。

正在创建分区 table

由于您不需要 table 摄取时间分区,您可以使用自己的日期字段作为分区字段来创建 table。您可以通过在创建 table 时添加“PARTITON BY”语句来实现,就像这样

CREATE TABLE `project_id.mydataset.mytable` (
  field1 STRING,
  dt TIMESTAMP
)
PARTITION BY DATE(dt)

CREATE TABLE `project_id.mydataset.mytable`
PARTITION BY DATE(dt)
AS (
  SELECT * FROM `project_id.mydataset.othertable`
)

正在更新 _PARTITIONTIME

针对您的原始问题,如果需要,您还可以更新 _PARTITIONTIME 字段。要将所有 _PARTITIONTIME 字段设置为等于您的 dt 列,您可以执行以下操作:

UPDATE
  project_id.dataset.mytable
SET
  _PARTITIONTIME = dt
WHERE
  1=1

如果 dt 的粒度与 _PARTITIONTIME 不同(例如,_PARTITIONTIME 的粒度是天,dt 是小时),那么您可以执行 TIMESTAMP_TRUNC

UPDATE
  project_id.dataset.mytable
SET
  _PARTITIONTIME = TIMESTAMP_TRUNCT(dt, DAY)
WHERE
  1=1