使现有的bigquery表成为集群

Yos*_*ael 14 clustered-index google-bigquery

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

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

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

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

任何评论、建议或答案都将受到高度赞赏。

非常感谢,约苏亚

SAN*_*NN3 21

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

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

调用tables.updatetables.patchAPI 方法。

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

参考

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

  • 我可以确认 `bq update --clustering_fields={clustering_variable} {dataset_name}.{table_name}` 可以解决问题。 (6认同)

小智 12

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

bq update --clustering_fields=tool,qualifier,user_id my_dataset.my_table
Run Code Online (Sandbox Code Playgroud)

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


Mik*_*ant 8

该答案不再有效/正确

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


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

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

  • 我认为这个答案并不完全正确。根据官方文档:“通过调用tables.update或tables.patch方法,可以更改或删除表集群规范。聚簇表中的聚簇列集也可以更改为不同的列集。当表从非聚集转换为聚集或聚集列集更改时,自动重新聚集仅从那时起起作用。我的理解是,您也可以稍后指定聚集列。只是之前添加的数据不会被聚类 (2认同)