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 表,t1t2,它们都包含 _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的主要内容,如果未能解决你的问题,请参考以下文章

将多行文本插入 Google Big Query

使用 Oracle SQL 从一个表插入到另一个表时如何避免重复行?

插入行并增加字段中的值

Big Query 中的表未分区

如何通过 Google 表格中的二维数组通过 Apps 脚本插入 Big Query?

Big Query Table Last Modified Timestamp 与上次插入表的时间不对应