Google 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

我们正在使用公共数据集对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.questions_partitioned` 
WHERE creation_date > "2019-01-01"
耗时2秒,处理14.3 MB

因此,我们看到MBs处理的好处,但查询速度较慢

决定何时分区的好策略是什么


(从我今天收到的电子邮件)

< P>当对一个表进行分区时,需要考虑每个分区有足够的数据。把每个分区想象成一个不同的文件——打开365个文件可能比打开一个大文件要慢

在这种情况下,用于基准测试的表中有2019年的1.6GB数据(本表中截至6月)。即每天每个分区有1.6GB/180=9MB的数据

对于如此低的数据量,将其安排在日常分区中不会带来太多好处。考虑按年份对数据进行分区。请参见以下问题以了解如何操作:

另一种选择是根本不分区表,而是使用集群按日期对数据进行排序。然后BigQuery可以选择每个块的理想大小

如果要运行自己的基准测试,请执行以下操作:

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秒
如您所见,对原始表的查询使用了大量插槽(并行性)以在1秒内获得结果。在这种情况下,50名工人用多年的数据处理了整个表格,读取了1770万行数据。对分区表的查询必须使用大量插槽,但这是因为每个插槽都分配了较小的每日分区,这一读取在0.9M行上使用了153个并行工作线程。相反,集群查询能够使用非常少的插槽。数据组织得很好,由57名平行工作人员读取,读取了112万行数据

另见:


我只想指出(遗憾的是)这篇文章中的一些内容似乎是在没有署名的情况下被复制的:。(我在Meta中提到过:)嗨@Vincentjeng,谢谢你的关心。可悲的是,你因为错误的原因而悲伤:无论是谁写了那篇“文案编码”的文章,都抄袭了我。我是原创作者,你应该对那些没有署名就复制我内容的人感到愤怒。对我的意思是提醒你,你很可能被抄袭了(你的帖子是在11月7日,而copycoding文章是在11月22日)。对不起,如果我在我的原始评论中不清楚;我的意思是,这篇文章中的一些内容(即你的答案)似乎是在没有署名的情况下被复制的。啊,我把你的评论搞错了!是的,显然有人创建了一个网站来复制有关数据分析的内容。你有没有截图,在我的文章上面显示他们的结果?再次感谢您的关心!如果你有兴趣联系窃取内容的人,我在这里找到了三个带有截图的搜索。注:我实际上正在报道内容,但要求你是原始版权所有者,所以我在这里发表了评论。我让你从这里拿走!