不确定我是否正确群集。基本上我正在查看50个客户的GCP结算信息。每个客户都有一个Billing_ID,我在该billing_ID上聚类。我将集群表用于Data Studio仪表板
请参阅下面的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)
它成功地像这样集群了,我只是查询性能没有明显提高!
答案 0 :(得分:1)
因此,我认为通过将其与billing_ID集群在一起,我应该会看到仪表板性能的提高
请考虑以下几点:
集群结构
集群字段由BigQuery link
当使用多列对表进行聚类时,指定的列顺序很重要。指定列的顺序确定数据的排序顺序。
这意味着正如@Gordon所写,在您的查询中,WHERE
部分需要从外部字段开始到内部字段开始,以充分利用您的群集字段。在您的情况下,如果 userId 是WHERE
的一部分,则需要更改群集字段以与此匹配
集群限制
对于那些扫描超过1GB数据的查询,群集通常会更好地工作。因此,如果您不扫描此数据量,则不会看到所需的改进
带有摄取表的集群
假设您的数据不是静态的,并且您继续向表 datagcp 中添加数据,则需要注意的是,簇索引是BigQuery离线执行插入操作的过程,而另一步则是分区。
副作用是,随着时间的推移,群集会“减弱”。为了解决这个问题,您将需要使用merge
命令来重新构建集群,以充分利用集群
从文档中:
“随着时间的流逝,随着越来越多的操作修改表,数据的排序程度开始减弱,并且表被部分排序”。