我们使用BigQuery作为系统的分析引擎,为报告准备数据。 根据我们的流程,可以更改数据的任何部分,也可以更改2013-2015的历史值,因此我们每天早上擦除并重新加载BigQuery中的所有表。
我们想了解我们的方法是否会损害性能或增加数据处理成本。可能是,BQ" 适应"随着时间的推移,表格内容和后续查询变得更加高效。我不是在讨论缓存,而是讨论BQ在处理查询时可能发现的一些数据重组,比如分区。
例如,大多数查询与特定年份或值类型相关,因此一旦识别出常见查询模式,BQ可能希望在这些字段之间对数据进行分区。
答案 0 :(得分:3)
通常,BigQuery 根据查询方式重构表,以提高性能。如果你每天都重写你的表,你会错过一些性能优势,但由于你一次性加载数据,所以这些表应该非常高效。
您使用的机制不会增加数据处理成本。如果您对成本敏感并且查询特定年份,您可能需要考虑将表格分成多个表格。然后,您可以使用TABLE_DATE_RANGE或TABLE_QUERY函数在这些表中进行查询。
答案 1 :(得分:1)
从第一眼看,它可能看起来没有关系 - 但请检查Table Decorators
特别是Syntax Section中的评论
你可能会注意到它们中有7天的重要提及
所以,在你的问题下面我的几美分 - 简化观点:
当您将数据加载到GBQ时 - 它会保持7天,之后您的数据将进行存储和访问优化。
由于您每天的重新加载,这就是您正在失去的
失去了多大?根据乔丹的答案 - 并不多,因为你做了满负荷,因此,如果可能的话,碎片可能是最小的
截至分区时,我希望您不要将所有2013-2016数据存储在一个大表中
如果您的使用/查询模式基于年份 - 您最好将表格按年或月或甚至一天划分(取决于您的查询模式)
这将极大地提高您的性能和成本效率
重要 - 截至目前,由您负责处理数据的分区策略,并且没有太多(如果有的话)内置功能来支持构建分区。但是,有一些支持消费分区数据 - 例如 - Table wildcard functions
我希望Google团队能够提供更好的分区支持,因为对现实用例的要求越来越高