模式演化比较Apache Avro与Apache Parquet

时间:2020-06-02 18:55:12

标签: hive avro parquet spark-avro

我想交叉检查一下我对Schema Evolution方面的文件格式(例如Apache Avro和Apache Parquet)差异的理解。通过查看各种博客和答案,可以了解以下内容。我需要验证我的理解是否正确,并且我想知道我是否在模式演化方面缺少其他差异。在Apache Hive中使用这些文件格式进行了说明。

  1. 添加列:两种文件格式均支持在列末尾添加列(具有默认值)。我认为,如果将蜂巢表属性设置为“ hive.parquet.use-column-names = true ”,则Parquet中可以支持在列中间添加列(具有默认值)。不是吗?

  2. 删除列:就列列表末尾的删除列而言,我认为两种文件格式均支持该功能,即是否有Parquet / Avro文件也具有已删除的列,因为阅读器架构(配置文件架构)没有已删除的列,即使写者的架构(实际Avro或Parquet文件架构)具有附加列,我认为在两种格式中都将很容易忽略它。如果设置了属性“ hive.parquet.use-column-names = true ”,也可以支持在列列表中间删除列。我的理解正确吗?。

  3. 重命名列::在重命名列时,由于Avro具有“列别名”选项,因此Avro支持列重命名,但Parquet中无法进行列重命名,因为没有此类列Parquet中的别名选项。我说的对吗?

  4. 数据类型更改:这在Avro中受支持,因为我们可以使用联合类型为单个列定义多种数据类型,但在Parquet中则无法定义,因为Parquet中没有联合类型。 / p>

我是否还有其他可能性?感谢帮助。

1 个答案:

答案 0 :(得分:1)

需要设置

hive.parquet.use-column-names = true才能在Parquet中按名称访问列。它不仅用于列添加/删除。按索引操作列将很麻烦,以致无法实现。

也有一种解决方法,可以重命名列。请参阅https://stackoverflow.com/a/57176892/14084789

联合是Parquet的挑战。

相关问题