大数据集上的扁平化+分区与嵌套记录

Posted

技术标签:

【中文标题】大数据集上的扁平化+分区与嵌套记录【英文标题】:flatten+partitioning vs nested record on big data sets 【发布时间】:2012-12-24 05:47:25 【问题描述】:

我有一个扁平化的数据集,每一行都包含用户属性(年龄、位置等)、注册和访问日期时间。每天分区。每天约 1000 万访问行,2500 万用户,500 万用户。 这现在可以处理几个月的数据,并且在 1 年内,它将是约 30 亿多行。

为了提高效率和减小尺寸,我正在考虑使用嵌套行: 每个用户都有嵌套记录,只有注册和访问日期时间。

在我做大的改变之前,假设我不会超过每行 64K 的限制,我会相应地改变我的查询。这会比展平行表现更好吗?

问题:

如果我使用嵌套,我会按访问日期松开每日分区,因为我 将它们嵌套到一个记录中。 (可以按月分区吗?)

加载时,我需要将 CSV 转换为 JSON 并知道将每一行加载到哪个分区,所以我想我会取消分区。

较少分区但嵌套的查询性能应该更好?

非常感谢

【问题讨论】:

【参考方案1】:

1:json 数据的实际导入行大小限制为 20 MB,而不是 64k。我已经提交了一个文档错误,以便在我们的公共文档中更新它。

    嵌套数据可能会在一定程度上提高性能,但在不了解实际查询的情况下很难知道。它不太可能对性能产生很大影响。但是,它可能会降低您的查询成本。

    您可以将多个分区合并,然后按分组或按每个分组来收集每个用户的访问。在生产之前用较小的数据样本进行尝试可能是个好主意。

我的猜测是,更复杂的查询和加载逻辑将意味着嵌套数据不会给您带来太多好处。您最好保持数据非规范化和扁平化,按天对数据进行分区,并在查询中需要的表的联合上进行查询。我们正在研究如何更轻松地在查询中指定表的范围,这可能会有所帮助。

【讨论】:

太好了,我们已经实现了一个动态查询构建器,它基于 where 子句,选择要合并的分区。效果很好。将尝试嵌套... Артём Царионов ,您在寻找分区函数、嵌套示例或来自 Google 的答案?很抱歉不理解。

以上是关于大数据集上的扁平化+分区与嵌套记录的主要内容,如果未能解决你的问题,请参考以下文章

嵌套的json扁平化火花数据框

一次查询扁平化大查询中的事件数据

JSON多层嵌套复杂结构数据扁平化处理转为行列数据

Python 3:扁平化嵌套字典和字典中的列表

扁平化深度嵌套的 JSON 以获取 Dataframe 的最快和通用方法是啥?

带有 ORDER BY 的雪花 JSON 扁平化