6

我们正在尝试使用 BigQuery 来分析我们的软件应用程序生成的用户数据。

我们的工作表包含数亿行,每行代表一个唯一的用户“会话”。每个都包含时间戳、UUID 和其他字段,用于描述用户在该会话期间与我们产品的交互。我们目前每天生成大约 2GB 的数据(约 1000 万行)。

每隔一段时间,我们可能会针对整个数据集运行查询(现在大约需要 2 个月,并且还在增长),但是典型的查询只会跨越一天、一周或一个月。我们发现随着表的增长,我们的单日查询变得越来越昂贵(正如我们在 BigQuery 架构中所期望的那样)

更有效地查询数据子集的最佳方法是什么?我能想到的一种方法是按天(或周、月等)将数据“分区”到单独的表中,然后在一个联合中一起查询它们:

SELECT foo from mytable_2012-09-01, mytable_2012-09-02, mytable_2012-09-03;

有没有比这更好的方法???

4

2 回答 2

3

BigQuery 现在支持按日期进行表分区:

https://cloud.google.com/blog/big-data/2016/03/google-bigquery-cuts-historical-data-storage-cost-in-half-and-accelerates-many-queries-by-10x

于 2016-06-16T02:32:33.553 回答
1

嗨,大卫:处理这个问题的最佳方法是将数据分片到多个表中,并按照您在示例中的建议运行查询。

更清楚地说,BigQuery 没有索引的概念(通过设计),因此将数据分片到单独的表中是一种有用的策略,可以使查询尽可能经济高效。

另一方面,对于担心拥有太多表的人来说,另一个有用的功能是为表设置过期时间,之后表将被删除并回收它们的存储 - 否则它们将无限期地持续存在。

于 2012-09-15T00:04:31.590 回答