是否有允许附加列的数据存储格式?

Is there a data storage format that allows for appending columns?

假设我有一个要在 Spark 中使用的数据集,其中包含有关

等用户的详细信息
id, name, age
123, john, 23
222, Josh, 50
333, bill, 32

假设我 generate/find 关于这些用户的新事实,'email'。

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

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

试试 KUDU 存储管理器——不是一种存储格式。不过需要在 Cloudera Stack 上。现在使用 HortonWorks,但不确定这意味着什么。

KUDU 运行良好,即不需要重新声明。可能更新,即可变但非 ACID。不过后一方面不是必需的。

Hive/HDFS 的模式演化 AVRO。

如果您没有可用的 Kudu,您可以使用 HBase,但是如果您必须对 table 执行全面扫描,它的性能将不会那么好。它非常适合 range/prefix 搜索和单个 lookups/writes。此外,您不需要为 table(其每个注册模式)

注册模式

如果你有上面的none,我只会partition/bucket数据,只重写已经修改的数据,任何技术都没有魔法,大多数"updateable" HDFS -stored 技术将与内存增量一起使用,然后在后台更新 table(或其中的某些部分)。如果您想动态添加列而不执行任何 "ALTER TABLE".

,则可以使用 JSON/Map 列

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

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