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

Google bigquery GoogleBigQuery:复制日期分区表所需的分区规范,google-bigquery,Google Bigquery,注意:这几乎是的重复,区别在于在本例中,源表是日期分区的,而目标表尚不存在。而且,这个问题的公认解决方案在这种情况下不起作用 我试图将一天的数据从一个日期分区表复制到一个新的日期分区表中,而这个日期分区表我还没有创建。我希望BigQuery能够像通常对非日期分区的情况一样,为我创建一个日期分区的目标表 使用BigQuery CLI,下面是我的命令: bq cp mydataset.sourcetable\$20161231 mydataset.desttable\$20161231 下面是该命

注意:这几乎是的重复,区别在于在本例中,源表是日期分区的,而目标表尚不存在。而且,这个问题的公认解决方案在这种情况下不起作用

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

使用BigQuery CLI,下面是我的命令:

bq cp mydataset.sourcetable\$20161231 mydataset.desttable\$20161231
下面是该命令的输出:

cp操作中的BigQuery错误:处理作业时出错 “myproject:bqjob\u bqjobid”:必须提供分区规范 为了创建分区表

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

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


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

您需要首先创建分区目标表():

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

因此,在开始复制之前,只需创建目标分区表。如果您不必费心指定模式,可以创建目标分区表,如下所示:

bq mk --time_partitioning_type=DAY mydataset.temps
然后,使用查询而不是副本写入目标表。架构将与其一起复制:

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

糟糕的是,没有任何选项可以告诉bigquery将日分区添加到目标表中。但我不必指定模式,这很好——这是痛苦的一部分。我只是想知道。假设我想在将一列的值从源复制到目标(其余列的值保持不变)时清空该列的值,我该如何实现呢?只是想补充一点,以防2021年其他人遇到这种情况,如果您运行“bq mk”命令,然后再运行原始的“bq cp”,而不将副本作为查询写入,那么现在似乎就可以了。