首页 > 解决方案 > 使用 CREATE TABLE 在 BigQuery 中进行集群

问题描述

不确定我是否正确集群。基本上,我正在查看 50 个客户的 GCP 计费信息。每个客户端都有一个 Billing_ID,我在该 billing_ID 上进行集群。我将聚簇表用于数据工作室仪表板

请参阅下面的 SQL 查询以了解我现在在做什么

CREATE OR REPLACE TABLE `dashboardgcp`
  PARTITION BY DATE(usage_start_time)
  CLUSTER BY billing_account_id
  AS
SELECT
  *
FROM
  `datagcp`
WHERE
 usage_start_time BETWEEN TIMESTAMP('2019-01-01')
  AND TIMESTAMP(CURRENT_DATE)

像这样成功集群,我只是没有明显的查询性能提升!

标签: sqlgoogle-bigquery

解决方案


所以我想通过将它与 billing_ID 进行聚类,我应该会看到仪表板性能有所提高

请考虑以下几点:

集群结构
集群字段由字段数组组成,如框,从外到内,作为 BigQuery链接中的状态

当您使用多列对表进行聚类时,您指定的列顺序很重要。指定列的顺序决定了数据的排序顺序。

这意味着正如@Gordon 所写,在您的查询中,该WHERE部分需要从外部字段开始到内部字段,以充分利用您的集群字段。在您的情况下,如果userIdWHERE您需要更改集群字段以匹配此的一部分

集群限制
集群通常更适合扫描超过 1GB 数据的查询,因此如果您不扫描此数据量,您将看不到您正在寻找的改进

带有摄取表的集群
假设您的 dara 不是静态的,并且您不断将数据添加到表datagcp中,您需要注意集群索引是 BigQuery 对插入操作离线执行的一个过程,而对分区是一个单独的过程。
副作用是您的集群会随着时间的推移而“减弱”。要解决这个问题,您需要使用merge命令重新构建集群,以便充分利用集群

从文档:

“随着时间的推移,随着越来越多的操作修改表,数据的排序程度开始减弱,表变成部分排序”。


推荐阅读