2016-03-08 65 views
2

我们使用BigQuery作为系统的分析引擎,为报表准备数据。 根据我们的流程,数据的任何部分都可能发生变化,这也是2013-2015年的历史数据,所以我们每天早上都会删除并重新加载BigQuery中的所有表格。Big Query是否适应数据?

我们想了解我们的方法是否会降低性能或增加数据处理的成本。因为它可能是BQ“适应”的表格内容,随后的查询变得更加高效。我不是在谈论缓存,而是关于BQ在处理查询时可能发现的一些数据重组,例如分区。

例如,大部分的查询都与一个特定的年份,或值类型,所以BQ可能要跨越这些字段中的数据分区,一旦识别常见的查询模式。

回答

3

一般而言,BigQuery 确实根据查询的方式来重构表格,以提高性能。如果你每天重写你的表格,你会错过某些性能优势,但是因为你一次加载数据,所以这些表格应该非常高效。

你使用不增加数据处理成本的机制。如果您对成本敏感并且查询特定年份,则可能需要考虑将表格分成多个表格。然后您可以使用TABLE_DATE_RANGE或TABLE_QUERY函数跨这些表进行查询。

+0

我证实了这一点Google BQ的行为。即使数据未更改,查询执行计划也会随时间变化。不幸的是,在我们的案例中,通配符表不是一种选择,因为我们使用自行生成SQL代码的BI工具。 –

1

从乍一看,它可能看起来不相关 - 但检查Table Decorators
而在Syntax Section
对您的问题具体评论您可能会注意到7天重提的他们

所以,下面我几毛钱 - 简化查看:
当您将数据加载到GBQ时 - 它会保持原样7天,之后您的数据将进行存储和访问优化。
这是您因每日重新加载而丢失的内容。
失去了多大?基于乔丹的答案 - 没有多少,因为你做的满负荷,因此碎片可能是最小的,如果在所有

由于分区的,我希望你是不是存储在一个大表中的所有数据2013-2016。
如果您使用/查询模式是基于一年 - 你最好有表按一年或一个月甚至一天分区(取决于您的查询模式)
这将大大提高你的性能和成本效益

重要 - 截至目前,您需要关心数据的分区策略,并且没有太多(如果有的话)内置功能来支持构建分区。虽然,对于消费分区数据的一些支持 - 例如 - Table wildcard functions

我希望谷歌团队将拿出更好的支持分区,因为这变得越来越要求现实生活中的用例