使现有的bigquery表集群化

问题描述 投票:0回答:4

我在bigquery中有一个相当大的现有分区表。我想让表聚集起来,至少对于新分区来说是这样。

从文档:https://cloud.google.com/bigquery/docs/creating-clustered-tables,据说我们能够

Creating a clustered table when you load data
并且我尝试使用集群字段加载新分区:
job_config.clustering_fields = ["event_type"]
.

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

有没有好的方法为现有的分区表制作聚类字段?

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

非常感谢, 约书亚

google-bigquery clustered-index
4个回答
19
投票

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

您可以通过以下方式更改聚类规范:

调用

tables.update
tables.patch
API 方法。

使用

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

参考

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


12
投票

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

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

其中 tool、qualifier 和 user_id 是我希望表聚类的三列(按此顺序),表是 my_dataset.my_table。


9
投票

此答案不再有效/正确

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


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

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


0
投票

通过以下命令更新 BigQuery 聚类字段仅从数据集到达时开始仅通过插入/更新起作用。

 bq update --clustering_fields=CLUSTER_COLUMN DATASET.ORIGINAL_TABLE 

通过上述命令,您还可以将聚集表中的聚集列集更改为不同的列集

参考:修改集群规范本文档的第1点工作正常,但第2点根本不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.