注意:这几乎是这个问题的重复,区别在于,在这种情况下,源表是分区日期,目标表尚不存在.此外,该问题的公认解决方案在这种情况下不起作用.
我正在尝试将一天的分区表中的一天数据复制到我尚未创建的新日期分区表中.我希望BigQuery只是为我创建一个日期分区的目标表,就像它通常用于非日期分区的情况一样.
使用BigQuery CLI,这是我的命令:
bq cp mydataset.sourcetable\$20161231 mydataset.desttable\$20161231
Run Code Online (Sandbox Code Playgroud)
这是该命令的输出:
cp操作中的BigQuery错误:处理作业'myproject:bqjob_bqjobid'时出错:必须提供分区规范才能创建分区表
我尝试使用python SDK做类似的事情:在日期分区表上运行select命令(仅从一个日期分区中选择数据)并将结果保存到新的目标表中(我希望也可以将日期分区) .作业失败并出现相同的错误:
{u'message':必须提供u'Partitioning规范才能创建分区表',u'reason':u'invalid'}
显然我需要添加一个分区规范,但我找不到任何关于如何操作的文档.
您需要首先创建分区目标表(根据文档):
如果要将分区表复制到另一个分区表,则源表和目标表的分区规范必须匹配.
因此,只需在开始复制之前创建目标分区表.如果您不能打扰指定架构,则可以像这样创建目标分区表:
bq mk --time_partitioning_type=DAY mydataset.temps
Run Code Online (Sandbox Code Playgroud)
然后,使用查询而不是副本写入目标表.架构将随之复制:
bq query --allow_large_results --replace --destination_table 'mydataset.temps$20160101''SELECT * from `source`'
Run Code Online (Sandbox Code Playgroud)