在Google BigQuery中使用分区和群集字段

时间:2018-11-13 17:45:26

标签: database-design google-bigquery database-schema

我正在为多个客户使用一些历史性CRM数据。我将BigQuery架构安排为以下格式:

PARTITION_MONTH (DATE) | CLIENT_UUID (STR) | PDATE (Date) | ...

我通过截断PDATE来使我的分区字段具有月份粒度,以补偿BQ当前的4k分区限制。另外,我将CLIENT_UUID设置为一个群集字段,以加快特定于客户端的查询。我进行了一些基准测试,发现PARTITION_MONTH对扫描多少字节没有影响。

我测试过的客户占表中记录的37%。我有三个表(相同的数据),其中有一个分区/集群,所有分区都设置为NULL的集群,没有分区/集群。聚簇表上的简单汇总表明CLIENT_UUID聚簇正在工作:

SELECT SUM(amount) FROM dataset.table WHERE CLIENT_UUID='myclient'

Non-Partitioned:       513 MB processed
Clustered:             191 MB processed (~37% of non-partitioned)
Partitioned/Clustered: 191 MB processed

但是,当我将日期合并到查询中时,分区字段显示没有性能提升:

SELECT SUM(amount) FROM dataset.table
WHERE CLIENT_UUID='myclient'
  AND [PARTITION_MONTH/PDATE] > DATE(2000, 1, 1)

Non-Partitioned:       513 MB processed
Clustered:             191 MB processed (~37% of non-partitioned)
Partitioned/Clustered: 191 MB processed

我假设在后台,BigQuery只会忽略指定日期之前的所有分区。但是,它似乎正在扫描客户端的所有行。

有人可以解释这种行为吗?是BigQuery还是我构建查询的方式的问题?谢谢您的帮助。

0 个答案:

没有答案