gpt4 book ai didi

hadoop - 为什么我们需要 Avro 模式演化

转载 作者:可可西里 更新时间:2023-11-01 14:11:39 27 4
gpt4 key购买 nike

我是 Hadoop 和编程的新手,对 Avro 模式演进有点困惑。我将解释到目前为止我对 Avro 的理解。

Avro 是一种序列化工具,它在顶部存储二进制数据,其 json 模式。架构如下所示。

{
"namespace":"com.trese.db.model",
"type":"record",
"doc":"This Schema describes about Product",
"name":"Product",
"fields":[
{"name":"product_id","type": "long"},
{"name":"product_name","type": "string","doc":"This is the name of the product"},
{"name":"cost","type": "float", "aliases":["price"]},
{"name":"discount","type": "float", "default":5}
]
}

现在我的问题是为什么我们需要进化?我读到我们可以在新字段的模式中使用 default;但是如果我们在文件中添加一个新的模式,之前的模式将被覆盖。一个文件不能有两个模式。

另一个问题是,什么是读者和作者模式,它们有什么帮助?

最佳答案

如果你有一个 avro 文件并且你想改变它的模式,你可以用一个新的模式重写那个文件。但是,如果您有数 TB 的 avro 文件并且想要更改它们的架构怎么办?每次架构更改时,您都会重写所有数据吗?

模式演变允许您更新用于写入新数据的模式,同时保持与旧数据模式的向后兼容性。然后您可以一起阅读它们,就好像所有数据都具有一个模式一样。当然,有精确的规则来管理允许的更改,以保持兼容性。这些规则列在 Schema Resolution 下.

除进化之外,读者和作者模式还有其他用例。您可以使用阅读器作为过滤器。想象一下包含数百个字段的数据,而您只对其中的一小部分感兴趣。您可以为少数字段创建一个模式,以仅读取您需要的数据。您可以采用另一种方式,创建一个添加默认数据的读取器模式,或者使用一个模式来连接两个不同数据集的模式。

或者您可以只使用一个模式,它永远不会改变,同时用于读取和写入。这是最简单的情况。

关于hadoop - 为什么我们需要 Avro 模式演化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39135471/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com