2017-06-16 56 views
2

注意:这几乎是this question的重复,区别在于在这种情况下,源表是日期分区的,目标表尚不存在。此外,在这种情况下,接受的解决方案并不适用于该问题。Google Bigquery:复制日期分区表所需的分区规范

我试图从一个日期分区表复制一天的数据值到一个新的日期partitoined表,我还没有创建。我希望BigQuery能够像我们通常为非日期分割的情况那样为我创建日期分割的目标表。

使用的BigQuery CLI,这里是我的命令:

bq cp mydataset.sourcetable\$20161231 mydataset.desttable\$20161231 

下面是命令的输出:

BigQuery error in cp operation: Error processing job 'myproject:bqjob_bqjobid': Partitioning specification must be provided in order to create partitioned table

我试着使用Python SDK做类似的东西:上运行SELECT命令一个日期分区表(它仅从一个日期分区中选择数据)并将结果保存到一个新的目标表(我希望它也可以是日期分区)。作业失败,出现相同的错误:显然,我需要添加一个分区规范,但我找不到任何有关如何执行此操作的文档。

回答

2

您需要先(as per the docs)创建分区的目标表:

If you want to copy a partitioned table into another partitioned table, the partition specifications for the source and destination tables must match.

所以,只要创建目标分区表,你开始复印之前。如果你不能打扰指定架构,您可以创建目标分区表所示:

bq mk --time_partitioning_type=DAY mydataset.temps 

然后,使用一个查询,而不是一个副本写入到目标表。该模式将与它一起复制:

bq query --allow_large_results --replace --destination_table 'mydataset.temps$20160101''SELECT * from `source`' 
+1

太糟糕了,没有选择告诉bigquery将日分区添加到目标表。但是,我不必指定模式真是太棒了 - 这是很痛苦的部分。 – conradlee