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

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

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

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

问题:

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

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

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

非常感谢

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 太好了,我们已经实现了一个动态查询构建器,它基于 where 子句,选择要合并的分区。效果很好。将尝试嵌套...
    • Артём Царионов ,您在寻找分区函数、嵌套示例或来自 Google 的答案?很抱歉不理解。
    猜你喜欢
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    相关资源
    最近更新 更多