是否可以覆盖 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 视图中读取?