Big Query 在从一个表插入到另一个表时指定 _PARTITIONTIME
Posted
技术标签:
【中文标题】Big Query 在从一个表插入到另一个表时指定 _PARTITIONTIME【英文标题】:Big Query specify _PARTITIONTIME when inserting from one table into another 【发布时间】:2017-12-12 14:30:08 【问题描述】:我有两个 Big Query 表,t1
和 t2
,它们都包含 _PARTITIONTIME
列。
我的目标是将行从t2
插入到t1
中,以保持_PARTITIONTIME
有没有办法将INSERT
_PARTITIONTIME
作为选定变量?
或者有没有办法在插入行后追溯定义_PARTITIONTIME
列?
【问题讨论】:
【参考方案1】:目前您可以使用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
【讨论】:
【参考方案2】:我不知道这是什么时候实现的,但它确实有效!
当您使用 DML 语句将行添加到摄取时间时 分区表,可以指定行所在的分区 应该添加。您使用 _PARTITIONTIME 引用分区 伪列。
INSERT INTO PROJECT_ID.DATASET.t2 (_PARTITIONTIME, field1, field2)
SELECT _PARTITIONTIME, field1, field2
FROM PROJECT_ID.DATASET.t1
https://cloud.google.com/bigquery/docs/using-dml-with-partitioned-tables#inserting_data_into_ingestion-time_partitioned_tables
【讨论】:
以上是关于Big Query 在从一个表插入到另一个表时指定 _PARTITIONTIME的主要内容,如果未能解决你的问题,请参考以下文章
使用 Oracle SQL 从一个表插入到另一个表时如何避免重复行?