【问题标题】:Is there a data storage format that allows for appending columns?是否有允许附加列的数据存储格式?
【发布时间】:2020-01-05 03:55:48
【问题描述】:

假设我有一个要在 Spark 中使用的数据集,其中包含有关用户的详细信息,例如

id, name, age
123, john, 23
222, Josh, 50
333, bill, 32

假设我生成/找到关于这些用户的新事实,“电子邮件”。

id, email
123, john@gmail.com
222, Josh@gmail.com
333, bill@gmail.com

是否存在一种存储格式,可以让我将新事实动态添加到旧数据集中而无需完全重写?基本上是添加一个仅附加列?

【问题讨论】:

  • 你可以加入数据
  • 数据格式我不太清楚,不过你可以看看Apache Iceberg iceberg.incubator.apache.orgIceberg adds tables to Presto and Spark that use a high-performance format that works just like a SQL table
  • @Lamanus,是的,如果这个问题失败了,我只是将数据集存储在不同的目录中,然后在每次运行时手动加入它们。我希望有一个不同的选择。

标签: apache-spark bigdata storage dataformat


【解决方案1】:

试试 KUDU 存储管理器 - 不是存储格式。不过需要在 Cloudera Stack 上。现在有了 HortonWorks,但不确定这意味着什么。

KUDU 运行良好,即无需重新声明。可以更新,即可变但非 ACID。后者不是必需的。

架构演化 AVRO 否则用于 Hive / HDFS。

【讨论】:

  • 我听说过 KUDU,但从未使用过。看不起!
  • 它让生活更轻松。
【解决方案2】:

如果你没有 Kudu 可用,你可以使用 HBase,但是如果你必须对表执行全扫描,它的性能不会那么好。它非常适合范围/前缀搜索和单个查找/写入。此外,您不需要为表注册架构(其每个注册架构)

如果您没有上述任何条件,我只会分区/存储数据并仅重写已修改的数据,任何技术都没有魔法,大多数“可更新”的 HDFS 存储技术都可以在内存中使用-增量,然后在后台更新表(或其中的某些部分)。如果您想在不执行任何“ALTER TABLE”的情况下动态添加列,则可以使用 JSON/Map 列。

如果您不关心读取时间并且非常关心写入时间,您可以添加具有更高版本的新数据(具有新列)的新分区,并在读取时保持最高版本。或者让另一个进程在后台删除旧版本。

您也可以使用多线程驱动程序异步编写(无需停止整个 Spark)。顺序写入可以非常快 :) 不要害怕它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多