如何改善使用分区+集群表查询的数据量?

问题描述 投票:0回答:1

我有一个BigQuery表-天已分区并成簇。但是,当我对其进行查询时,它仍然使用大量数据。这怎么可能?

google-bigquery database-partitioning clustered-index
1个回答
1
投票

有时没有分区,或者每周/每月/每年的分区比每天使用分区表+群集更好。

这是因为BigQuery中的每个数据簇都具有最小大小。如果每日分区表中每一天的数据少于该数据量,则群集表根本不会带来任何好处。

例如,创建一个具有30年以上天气的表格。我将按月对该表进行分区(以便将多个年份容纳在一个表中):

CREATE TABLE `temp.gsod_partitioned`
PARTITION BY date_month
CLUSTER BY name
AS 
SELECT *, DATE_TRUNC(date, MONTH) date_month
FROM `fh-bigquery.weather_gsod.all` 

现在,让我们对其进行查询-使用聚类字段name

SELECT name, state, ARRAY_AGG(STRUCT(date,temp) ORDER BY temp DESC LIMIT 5) top_hot, MAX(date) active_until
FROM `temp.gsod_partitioned`
WHERE name LIKE 'SAN FRANC%'
AND date > '1980-01-01'
GROUP BY 1,2
ORDER BY active_until DESC 
# (2.3 sec elapsed, 3.1 GB processed)

现在,让我们在相同的表上执行此操作-按假日期进行分区(因此实际上没有分区),并按同一列进行群集:

SELECT name, state, ARRAY_AGG(STRUCT(date,temp) ORDER BY temp DESC LIMIT 5) top_hot, MAX(date) active_until
FROM `fh-bigquery.weather_gsod.all` 
WHERE name LIKE 'SAN FRANC%'
AND date > '1980-01-01'
GROUP BY 1,2
ORDER BY active_until DESC
# (1.5 sec elapsed, 62.8 MB processed)

仅处理了62.8 MB的数据(vs 3.1GB)!

这是因为在每天没有大量GB的表上,不进行分区的群集效率要高得多。

© www.soinside.com 2019 - 2024. All rights reserved.