按日期分区?

Posted

技术标签:

【中文标题】按日期分区?【英文标题】:Partitioning by date? 【发布时间】:2012-09-14 23:43:47 【问题描述】:

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

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

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

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

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

还有比这更好的方法吗???

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

感谢您的回复,迈克尔。未来是否有计划引入更好的分片支持?使用这种方法,我可以看到我们的查询很长(例如,在按天分片的数据集上运行超过 1 年的查询。)考虑到 10k 查询大小限制(?)可能是个问题 是的 - 由于您刚才提到的情况,我们正在研究提高在查询中引用多个表(使用单一模式)的能力,但不幸的是我们还没有这样的功能目前可用。顺便说一句,我们通常提到新功能更新的第一个地方是(低容量)groups.google.com/forum/#!forum/bigquery-announce 邮件列表,所以我建议订阅。 @DavidMSmith 你最后做了什么?

以上是关于按日期分区?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 按日期范围分区

MySQL 分区:按 ID 选择,但按日期删除

按日期分区?

如何按日期时间列对表进行分区?

按分区上的 MIN(日期)过滤 |数据洞察

按任意开始和结束日期对订单表进行分区