Google bigquery Bigquery分区表性能

Google bigquery Bigquery分区表性能,google-bigquery,Google Bigquery,我有一个关于BQ在各种场景中的性能的问题,特别是围绕“机罩下”的并行化 我每天保存1亿条记录。目前,我每5天轮换一次手术台,以避免因全台扫描而产生高额费用 如果我运行一个日期范围为“Last30天”的查询(例如),我将扫描6个表(如果我在分区的最后一天)和7个表 作为替代,我可以每天将数据划分到一个新表中。在这种情况下,我将优化我的开支——因为我从来不会查询比我拥有的更多的数据。问题是,在将结果返回给客户机方面,将受到性能损失,因为我现在可能并行查询30、90或365个表(Union) 总结如下

我有一个关于BQ在各种场景中的性能的问题,特别是围绕“机罩下”的并行化

我每天保存1亿条记录。目前,我每5天轮换一次手术台,以避免因全台扫描而产生高额费用

如果我运行一个日期范围为“Last30天”的查询(例如),我将扫描6个表(如果我在分区的最后一天)和7个表

作为替代,我可以每天将数据划分到一个新表中。在这种情况下,我将优化我的开支——因为我从来不会查询比我拥有的更多的数据。问题是,在将结果返回给客户机方面,将受到性能损失,因为我现在可能并行查询30、90或365个表(Union)

总结如下:

  • 表格越多=扫描的数据越少
  • 更少的表=(?)对客户端的响应时间更长

有谁能解释一下如何在成本和性能之间找到平衡点吗?

很大程度上取决于您如何编写查询以及开发成本,但数据量并不像一道屏障那样紧密相连,因此您尝试优化得太早了

当连接大于8MB的表时,需要使用EACH修饰符,并且该查询是内部并行的

这种分区意味着您可以获得更高的有效读取带宽,因为您可以并行读取其中许多磁盘。德雷梅尔利用了这一点;当您运行查询时,它可以一次从数千个磁盘读取您的数据

在内部,BigQuery将表存储在 碎片;这些是可以并行处理的离散数据块。如果 您有一个100 GB的表,它可能存储在5000个碎片中,这允许它 由多达5000名工人并行处理。你不应该做任何假设 关于表中碎片数的大小。BigQuery将重新分区 定期收集数据以优化存储和查询行为

继续为每天创建表,一个建议是编写创建/修补脚本,以便在将来运行时创建表,例如:我现在为每天创建接下来12个月的表。这比使用每天创建表的脚本要好。并将其作为部署/资源调配脚本的一部分

要阅读更多内容,请查看本书