【问题标题】:Best way to store variable length data in single column在单列中存储可变长度数据的最佳方法
【发布时间】:2019-10-11 09:36:09
【问题描述】:

我正在寻找一些关于如何最好地存储一些数据的意见。我有一些类似于以下的数据:

id  category    proportion
1   1           0.99
1   7           0.85
2   1           0.55
3   2           0.90
3   3           0.85        

基本上,唯一 ID 可以属于不同数量的类别。每个 id 和 category 都有一个与之相关的比例。

我想将这些数据存储在单个列中,以便可以将其添加到每个 id 可能只占一行的表中。

现在,我一直在考虑两个 json 结构。考虑id = 1 的例子。我们会有类似以下两个选项...

  1. 未嵌套:{"category1": "1", "proportion1": "0.99", "category2": "7", "proportion2": "0.85"}
  2. 嵌套:{"category1": {"label": "1", "proportion": "0.99"}, "category2": {"label": "7", "proportion": "0.85"}}

我对 Presto/Athena 中的 json 不太熟悉。用例将包括 a) 查找给定特定类别标签的 id 或 b)按单个类别标签对 id 属性进行分组

例如,我可能想要识别属于类别 = 3 的所有 id。我认为这些结构中的任何一个都不会在 Athena 中使这变得容易。

寻找您可能有的任何反馈。我确实认为最佳结构是每个 id + 类别组合一行,但这不是这个用例的选项。

【问题讨论】:

  • 您是否有理由将其放入 json 或想要重组数据?为什么不将其保留在您列出的表格格式中?这是多少数据?
  • 我也会保留上面的格式。如果您决定走这条路,请务必注意 JSON 的处理成本非常高。它只是引擎的一个文本块,每次读取都必须对其进行解析。相反,如果您使用 ARRAY、MAP 或 ROW 等结构类型的组合,引擎可以直接处理数据。
  • 感谢大家的反馈。我决定采用我提到的理想格式创建表格的方法,并在另一个表格中添加了用户可以用来查找的引用。我感觉 ARRAY、MAP 和 ROW 在 Presto 中更有效,所以得到确认很好。

标签: json presto amazon-athena


【解决方案1】:

我认为您开始使用的表格格式比您建议的 JSON 结构更可取。您始终可以使用 SQL 来获取其他格式,因此选择对访问模式做出最少假设并且看起来最像表的格式通常是最好的,除非您有非常具体的要求 - 听起来不像您有.

最后,它还很大程度上取决于您将如何生成数据。 Athena 的美妙之处在于它非常擅长处理您可以扔给它的大多数结构。保持数据生成的格式,您几乎总是可以使用 SQL 来获得您需要的答案。如果结果太慢或太昂贵,您可以使用 Athena 将数据转换为更合适的其他格式和结构,但也始终保持数据的原始格式 - 这样您始终可以创建更多新情况的版本。

如果数据不多,您还可以使用视图为不同的用例创建优化表示。

【讨论】:

    【解决方案2】:

    数据建模应尽可能源自查询访问模式。但是,如果您不了解所有模式,则需要考虑以下几点:

    • 尝试使用非规范化表来避免多次连接
    • 在 JSON/CSV 上使用 Parquet/ORC 文件格式
    • 在您的情况下,Parquet 可能会更好,因为您正在寻找嵌套数据结构,但请确保您没有查询嵌套结构的那些子字段以避免性能问题。

    在这里,您可以将 id 和 category 存储为两个单独的列,以便支持按 id 或 category 查询。

    Athena 只是 Presto 之上的一个包装器,用于提供无服务器 SQL 产品。本质上,数据存储在您的 s3 对象存储中,Presto 处理引擎将在每次处理之前获取数据。也可以使用 Rubix 来缓存热数据,避免每次 s3 读取。

    【讨论】:

      猜你喜欢
      • 2011-01-20
      • 2015-08-01
      • 2016-08-27
      • 2011-06-27
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 2014-11-15
      相关资源
      最近更新 更多