是否可以覆盖 BigQuery 中的分区?

Posted

技术标签:

【中文标题】是否可以覆盖 BigQuery 中的分区?【英文标题】:Is it possible to overwrite a partition in BigQuery? 【发布时间】:2019-09-27 22:19:38 【问题描述】:

这篇文章:https://cloud.google.com/bigquery/docs/writing-results 指出可以用新数据覆盖 BigQuery 表,但我想做的是覆盖一个分区(或多个分区)。这可能吗?

我已经阅读了大量关于将数据插入 BigQuery 的文档(例如 https://cloud.google.com/bigquery/docs/creating-column-partitions),但找不到任何关于覆盖分区的参考资料,所以我认为我的问题的答案是“否”,但我认为我是还是问吧。

【问题讨论】:

【参考方案1】:

您始终可以使用查询的输出表名称中的 YYYYMMDD 后缀覆盖 BQ 中的分区表,同时使用 WRITE_TRUNCATE 作为您的写入处置(即截断该分区中存在的任何内容并写出新的结果)。

因此,假设当您运行查询时,您想要覆盖名为 xyz 的表中日期为 2019-01-15 的分区,您只需将查询结果的输出目标设置为 yourdataset.xyz$20190115并将写入处置指定为WRITE_TRUNCATE

希望对你有帮助。

【讨论】:

这是一个巧妙的技巧。它在任何地方都有记录吗?我不熟悉“写处置”一词或如何指定它。 啊,好像只能通过 REST API 获得 googleapis.dev/python/bigquery/latest/generated/… 希望我可以使用好的旧 SQL 来完成这项工作,但没关系,很高兴写一些 Python。 是的。您绝对可以使用常规 cli 或在 python/java/etc 中使用 bq apis 来实现这一点。如果它有助于解决您的问题,请将答案标记为正确:-)。谢谢。 我会的。不过,我需要一些时间来验证,请注意这个空间。 边走边添加注释,以下链接值得一读:cloud.google.com/bigquery/docs/…,cloud.google.com/bigquery/docs/…,cloud.google.com/bigquery/docs/…【参考方案2】:

你很幸运!这可以通过MERGE DML 实现。

https://cloud.google.com/bigquery/docs/using-dml-with-partitioned-tables#pruning_partitions_when_using_a_merge_statement

我的建议是尝试一下。如果您无法使其正常工作,请发布一个包含特定数据/查询的新问题。

【讨论】:

与删除分区并重新插入它们相比,这是否具有更高的性能?

以上是关于是否可以覆盖 BigQuery 中的分区?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用“$”装饰器访问标准 SQL 中的 BigQuery 分区?

Cloud Dataflow 中的“辅助输入”是不是支持从 BigQuery 视图中读取?

是否有元数据表来检查 BigQuery 中的表是否已分区?

BigQuery 中的 Hive 分区 LAYOUT 表格式

将 10 MB 数据上传到 Bigquery

如何覆盖 bigquery 现有表中的列值