我们使用BigQuery作为系统的分析引擎,为报表准备数据。根据我们的处理过程,数据的任何部分都可能被更改,也就是2013-2015年的历史值,因此我们每天早上都会删除和重新加载BigQuery中的所有表。
我们希望了解我们的方法是否会损害性能或增加数据处理成本。可以说,随着时间的推移,BQ“适应”了表的内容,随后的查询变得更有表现力。我说的不是缓存,而是一些数据重组,比如分区,BQ在处理查询时可能会发现。
例如,大多数查询都与特定的年份或值类型相关,因此当识别出常见的查询模式时,BQ可能希望在这些字段中对数据进行分区。
发布于 2016-03-09 02:51:49
通常,BigQuery会根据表的查询方式重构表,以提高性能。如果您每天重写您的表,您可能会忽略其中的一些性能优势,但是由于您正在一次加载数据,这些表的性能应该相当好。
您使用的机制不会增加数据处理成本。如果您对成本敏感,并且查询特定年份,则可能需要考虑将表拆分为多个表。然后可以使用TABLE_DATE_RANGE或TABLE_QUERY函数对这些表进行查询。
发布于 2016-03-09 16:59:14
乍一看,它看上去可能与此无关--而是检查表解码器。
,特别是语法科的评论
你可能会注意到里面提到了7天
所以,下面是我对你问题的几分钱--简化的观点:
当您将数据加载到GBQ时,它将保持7天不变,之后您的数据将被存储和访问优化。
这是你的损失,因为你的日常重新负荷。
损失有多大?基于Jordan的回答--不多是因为您做了满载,因此碎片可能是最小的(如果有的话)
至于分区,我希望您不要将2013-2016年的所有数据存储在一个大表中。
如果您的使用/查询模式是基于年份的,则最好按年、月或日对表进行分区(取决于查询模式)。
这将大大提高您的性能和成本效益。
重要的是--到目前为止,应该由您来处理数据的分区策略,并且没有太多(如果有的话)内置功能来支持构建分区。不过,对于使用分区数据(例如,表通配符函数),有一些支持。
我希望Google团队能够为分区提供更好的支持,因为这对现实生活中的用例的需求越来越大。
1:https://cloud.google.com/bigquery/docs/reference/legacy-sql#tablewildcardfunctions我希望Google团队能为分区2:https://cloud.google.com/bigquery/table-decorators#snapshot-syntax 3:https://cloud.google.com/bigquery/docs/reference/legacy-sql#tablewildcardfunctions提供更好的支持
https://stackoverflow.com/questions/35863871
复制相似问题