使用CREATE TABLE在BigQuery中进行集群

时间:2019-05-10 11:00:56

标签: sql google-bigquery

不确定我是否正确群集。基本上我正在查看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)

它成功地像这样集群了,我只是查询性能没有明显提高!

1 个答案:

答案 0 :(得分:1)

  

因此,我认为通过将其与billing_ID集群在一起,我应该会看到仪表板性能的提高

请考虑以下几点:

集群结构
集群字段由BigQuery link

中从外到内的字段状态(如框)组成
  

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

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

集群限制
对于那些扫描超过1GB数据的查询,群集通常会更好地工作。因此,如果您不扫描此数据量,则不会看到所需的改进

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

从文档中:

  

“随着时间的流逝,随着越来越多的操作修改表,数据的排序程度开始减弱,并且表被部分排序”。