使现有的 bigquery table 集群化

Make existing bigquery table clustered

我在 bigquery 中有一个相当大的现有分区 table。我想让 table 成簇,至少对于新分区是这样。

根据文档:https://cloud.google.com/bigquery/docs/creating-clustered-tables,据说我们能够 Creating a clustered table when you load data 并且我已尝试使用聚类字段加载新分区:job_config.clustering_fields = ["event_type"].

加载成功完成,但是新分区似乎没有集群(我不太确定如何检查它是否集群,但是当我查询那个特定分区时它总是会扫描所有行).

有没有什么好的方法可以为现有的分区 table 创建聚类字段?

非常感谢任何评论、建议或回答。

非常感谢, 约瑟亚

这个答案不再有效/不正确

https://cloud.google.com/bigquery/docs/creating-clustered-tables#modifying-cluster-spec


您只能在创建 table 时指定聚簇列
因此,显然您不能指望现有的非集群 table,尤其是新分区成为集群

“解决方法”是创建新的 table 以进行正确分区/集群,并将数据从 Google 云存储 (GCS) 加载到其中。为此,您可以先将原始 table 中的数据导出到 GCS,这样整个过程都是免费的

BigQuery 支持将现有的非集群 table 更改为集群 table,反之亦然。您还可以更新集群 table.

的集群列集

您可以通过以下方式更改集群规范:

调用 tables.updatetables.patch API 方法。

使用 --clustering_fields 标志调用 bq 命令行工具的 bq update 命令。

参考

https://cloud.google.com/bigquery/docs/creating-clustered-tables#modifying-cluster-spec

我从上面的答案中遗漏的是一个真实的例子,所以这里是:

bq update --clustering_fields=tool,qualifier,user_id my_dataset.my_table

其中工具、限定符和 user_id 是我希望 table 聚类的三列(按此顺序),table 是 my_dataset.my_table。