【发布时间】:2017-12-12 14:30:08
【问题描述】:
我有两个 Big Query 表,t1 和 t2,它们都包含 _PARTITIONTIME 列。
我的目标是将行从t2 插入到t1 中,以保持_PARTITIONTIME
有没有办法将INSERT_PARTITIONTIME 作为选定变量?
或者有没有办法在插入行后追溯定义_PARTITIONTIME 列?
【问题讨论】:
标签: google-bigquery
我有两个 Big Query 表,t1 和 t2,它们都包含 _PARTITIONTIME 列。
我的目标是将行从t2 插入到t1 中,以保持_PARTITIONTIME
有没有办法将INSERT_PARTITIONTIME 作为选定变量?
或者有没有办法在插入行后追溯定义_PARTITIONTIME 列?
【问题讨论】:
标签: google-bigquery
目前您可以使用partition decorators 写入分区
[TABLE_NAME]$20160501
但是有一个高请求功能正在进行中,这将允许您选择一个列并将其用作分区日。
为了写入 20 个不同的分区,您需要创建至少 20 个不同的查询和写入,如 here 所述
bq query --allow_large_results --replace --noflatten_results \
--destination_table 'mydataset.temps$20160101' \
'SELECT stn,temp from [bigquery-public-data:noaa_gsod.gsod2016] WHERE mo="01" AND da="01" limit 100'
bq query --allow_large_results --replace --noflatten_results \
--destination_table 'mydataset.temps$20160102' \
'SELECT stn,temp from [bigquery-public-data:noaa_gsod.gsod2016] WHERE mo="01" AND da="02" limit 100'
更多解决方案在这里解决: Migrating from non-partitioned to Partitioned tables
【讨论】:
我不知道这是什么时候实现的,但它确实有效!
当您使用 DML 语句将行添加到摄取时间时 分区表,可以指定行所在的分区 应该添加。您使用 _PARTITIONTIME 引用分区 伪列。
INSERT INTO PROJECT_ID.DATASET.t2 (_PARTITIONTIME, field1, field2)
SELECT _PARTITIONTIME, field1, field2
FROM PROJECT_ID.DATASET.t1
【讨论】: