如何将分区表复制到 BigQuery 中的另一个分区表

Posted

技术标签:

【中文标题】如何将分区表复制到 BigQuery 中的另一个分区表【英文标题】:How to copy a partitioned table to another partitioned table in BigQuery 【发布时间】:2017-04-28 01:55:16 【问题描述】:

我正在尝试将一个分区表复制到另一个分区表中。根据docs,这应该是可以的。

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

为了测试,我创建了两个具有相同架构的分区表(partition1partition2)。我将 3 条记录推送到 partition1 表上的分区 $20170101

echo '"a":1, "b":2' | bq insert '<removed>.partition1$20170101'
echo '"a":1, "b":2' | bq insert '<removed>.partition1$20170101'
echo '"a":1, "b":2' | bq insert '<removed>.partition1$20170101'

看起来不错:

接下来,我将 2 条记录推送到 partition2 表和同一个分区 ($20170101):

echo '"a":1, "b":2' | bq insert '<removed>.partition2$20170101'
echo '"a":1, "b":2' | bq insert '<removed>.partition2$20170101'

再一次,这看起来不错:

现在,我想将附加 partition2 复制到 partition1。我希望在$20170101 分区下的partition1 中看到5 条记录:

bq cp --append_table <removed>.partition2 <removed>.partition1
Waiting on bqjob_r6d160e17a3b7b733_0000015bb238aa54_1 ... (0s) Current status: DONE   
Tables '<removed>.partition2' successfully copied to '<removed>.partition1'

但是,partition1 中仍然只有 3 条记录。

我做错了什么?

【问题讨论】:

我无法确认这种行为!我只是做了你描述的所有完全相同的步骤(但在 UI 中)并得到了预期的结果 - 5 条记录。您能否仔细检查您是否按照您的描述进行操作? 你是如何在 UI 中复制的?如果表已经存在,则不允许这样做。它必须通过 API 完成... 好点。我没有使用 Google Web UI。我们使用的 UI 都是通过 API 调用实现的——所以从技术上讲,它是通过 API 实现的。但我认为,你提出的问题应该不重要。除非是 bq 命令行工具的问题 我使用了 CLI 工具 - bq cp --append_table &lt;removed&gt;.partition2 &lt;removed&gt;.partition1 - 它肯定不起作用。我检查了三次。 是的,我明白了。我在上一条评论中提到这可能是 bq cli 的问题 【参考方案1】:

这是我安装的gcloud 工具版本中的一个错误。我更新了它,然后它按预期工作了。

运行:

gcloud components update

【讨论】:

【参考方案2】:

我已经从 gcloud 尝试过类似这样的命令,它可以工作 -->

bq cp -a '<source_project>:<source_dataset>.<source_table>$20180605' <destination_project>:<destination_dataset>.<destination_table> 

而且它工作得非常好.... 注意:- 在上面的命令中,不需要提及目标分区值/信息。它会自动从源分区数据/值中获取。

【讨论】:

以上是关于如何将分区表复制到 BigQuery 中的另一个分区表的主要内容,如果未能解决你的问题,请参考以下文章

如果我们在 BigQuery 中使用具有相同分区类型(天)的另一列进行过滤,where 子句中的分区列是不是不是必需的?

如果一个数组包含使用 BigQuery 的另一个数组的所有值,我如何过滤行?

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

如何用 Google Big Query Table 中的另一个分区重写一个分区?

列中的 BigQuery 日期分区

BigQuery 表分区