Google bigquery 什么';在BigQuery中决定何时划分表是一个很好的平衡?
我们正在使用公共数据集对BigQuery进行基准测试。我们在同一张桌子上按天进行分区,但不清楚我们是否得到了很多好处。什么是好的平衡Google bigquery 什么';在BigQuery中决定何时划分表是一个很好的平衡?,google-bigquery,database-partitioning,database-cluster,Google Bigquery,Database Partitioning,Database Cluster,我们正在使用公共数据集对BigQuery进行基准测试。我们在同一张桌子上按天进行分区,但不清楚我们是否得到了很多好处。什么是好的平衡 SELECT sum(score) FROM `fh-bigquery.stackoverflow_archive.201906_posts_questions` WHERE creation_date > "2019-01-01" 耗时1秒,处理270.7MB 同样,对于分区: SELECT sum(score) FROM `temp.que
SELECT sum(score)
FROM `fh-bigquery.stackoverflow_archive.201906_posts_questions`
WHERE creation_date > "2019-01-01"
耗时1秒,处理270.7MB
同样,对于分区:
SELECT sum(score)
FROM `temp.questions_partitioned`
WHERE creation_date > "2019-01-01"
耗时2秒,处理14.3 MB
因此,我们看到MBs处理的好处,但查询速度较慢
决定何时分区的好策略是什么
(从我今天收到的电子邮件)
< P>当对一个表进行分区时,需要考虑每个分区有足够的数据。把每个分区想象成一个不同的文件——打开365个文件可能比打开一个大文件要慢 在这种情况下,用于基准测试的表中有2019年的1.6GB数据(本表中截至6月)。即每天每个分区有1.6GB/180=9MB的数据 对于如此低的数据量,将其安排在日常分区中不会带来太多好处。考虑按年份对数据进行分区。请参见以下问题以了解如何操作:CREATE TABLE `temp.questions_partitioned`
PARTITION BY DATE(creation_date)
AS
SELECT *
FROM `fh-bigquery.stackoverflow_archive.201906_posts_questions`
vs没有分区,只是按日期进行集群:
CREATE TABLE `temp.questions_clustered`
PARTITION BY fake_date
CLUSTER BY creation_date
AS
SELECT *, DATE('2000-01-01') fake_date
FROM `fh-bigquery.stackoverflow_archive.201906_posts_questions`
然后,我对集群表的查询将是:
SELECT sum(score)
FROM `temp.questions_clustered`
WHERE creation_date > "2019-01-01"
它花了0.5秒,处理了17MB
比较:
- 原始表:1秒,270.7MB
- 分区:2秒,14.3 MB
- 群集:0.5秒,17 MB
- 原始表格:10.683秒
- 分区:7.308秒
- 集群:0.718秒