如何在大查询中在现有表上创建分区和集群?
Posted
技术标签:
【中文标题】如何在大查询中在现有表上创建分区和集群?【英文标题】:how to create partition and cluster on an existing table in big query? 【发布时间】:2021-09-28 02:34:56 【问题描述】:在 SQL Server 中,我们可以这样创建索引。表已经存在后如何创建索引? bigquery中创建聚集索引的语法是什么?
CREATE INDEX abcd ON `abcd.xxx.xxx`(columnname )
在大查询中,我们可以创建如下表。但是如何在现有表上创建分区和集群?
CREATE TABLE rep_sales.orders_tmp PARTITION BY DATE(created_at) CLUSTER BY created_at AS SELECT * FROM rep_sales.orders
【问题讨论】:
BigQuery 没有索引 - 检查this out 这能回答你的问题吗? Indexes on BigQuery Table CREATE TABLE rep_sales.orders_tmp PARTITION BY DATE(created_at) CLUSTER BY created_at AS SELECT * FROM rep_sales.orders 貌似有分区和集群。但是如何在现有表上创建分区和集群? 【参考方案1】:正如 @Sergey Geron 在 cmets 中提到的,BigQuery 不支持索引。更多信息请参考这个doc。
现有表无法分区,但您可以创建一个新的分区表,然后将数据从未分区表加载到其中。
对于表的集群,BigQuery 支持将现有的非集群表更改为集群表,反之亦然。您还可以更新聚簇表的聚簇列集。这种更新聚簇列集的方法对于使用连续流式插入的表很有用,因为这些表不能轻易地被其他方法交换。
您可以通过以下方式change the clustering specification:
调用tables.update
或tables.patch
API 方法。
使用--clustering_fields
标志调用bq
命令行工具的bq update
命令。
注意:当表从非聚簇转换为聚簇或聚簇列集更改时,自动重新聚簇仅从那时起有效。例如,使用 tables.update 转换为聚簇表的非聚簇 1 PB 表仍然具有 1 PB 的非聚簇数据。自动重新聚类仅适用于更新后提交到表的任何新数据。
【讨论】:
以上是关于如何在大查询中在现有表上创建分区和集群?的主要内容,如果未能解决你的问题,请参考以下文章