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
我在 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