Google Bigquery:复制日期分区表所需的分区规范

时间:2017-06-16 10:06:59

标签: google-bigquery

注意:这几乎与this question重复,区别在于,在这种情况下,源表是分区日期,目标表尚不存在。此外,该问题的公认解决方案在这种情况下不起作用。

我正在尝试将一天的分区表中的一天数据复制到我尚未创建的新日期分区表中。我希望BigQuery只是为我创建一个日期分区的目标表,就像它通常用于非日期分区的情况一样。

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

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

以下是该命令的输出:

  

cp操作中的BigQuery错误:处理作业时出错   'myproject:bqjob_bqjobid':必须提供分区规范   为了创建分区表

我尝试使用python SDK做类似的事情:在日期分区表上运行select命令(仅从一个日期分区中选择数据)并将结果保存到新的目标表中(我希望也是日期分区)。作业失败并出现相同的错误:

  

{u'message':必须提供u'Partitioning规范才能   创建分区表',u'reason':u'invalid'}

显然我需要添加一个分区规范,但是我找不到任何关于如何操作的文档。

1 个答案:

答案 0 :(得分:7)

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

  

如果要将分区表复制到另一个分区表中   表,源和目标的分区规范   表必须匹配。

因此,只需在开始复制之前创建目标分区表。如果您无法指定架构,可以像这样创建目标分区表:

bq mk --time_partitioning_type=DAY mydataset.temps

然后,使用查询而不是副本来写入目标表。架构将随之复制:

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