Hive 模式演化比较apacheavro与apacheparquet

Hive 模式演化比较apacheavro与apacheparquet,hive,avro,parquet,spark-avro,Hive,Avro,Parquet,Spark Avro,我想交叉检查我对文件格式(如ApacheAvro和ApacheParquet)在模式演变方面的差异的理解。看看各种各样的博客和答案,我有如下的理解。我需要验证我的理解是否正确,并且我想知道我是否缺少关于模式演化的任何其他差异。本文将解释如何在ApacheHive中使用这些文件格式 添加列:两种文件格式都支持在列的末尾添加列(使用默认值)。我认为,如果蜂箱属性设置为“蜂巢。实木地板。请使用列名=真< /强>”,可以在实木地板中添加列(默认值)。不是这样吗 删除列:就删除列列表末尾的列而言,我认为两

我想交叉检查我对文件格式(如ApacheAvro和ApacheParquet)在模式演变方面的差异的理解。看看各种各样的博客和答案,我有如下的理解。我需要验证我的理解是否正确,并且我想知道我是否缺少关于模式演化的任何其他差异。本文将解释如何在ApacheHive中使用这些文件格式

  • 添加列:两种文件格式都支持在列的末尾添加列(使用默认值)。我认为,如果蜂箱属性设置为“<强>蜂巢。实木地板。请使用列名=真< /强>”,可以在实木地板中添加列(默认值)。不是这样吗

  • 删除列:就删除列列表末尾的列而言,我认为两种文件格式都支持删除列,即如果拼花地板/Avro文件中的任何一个文件也有删除列,因为读卡器模式(配置单元模式)没有删除列,即使写卡器的模式也是如此(实际的AVRO或实木拼图文件模式)有附加的列,我认为这两种格式都容易被忽略。如果属性“<强>蜂巢。实木地板。使用列名=Trime”,可以删除列列表中间的列。我的理解正确吗?

  • 重命名列:当涉及到重命名列时,由于Avro有“列别名”选项,Avro支持列重命名,但在拼花地板中不可能,因为拼花地板中没有此类列别名选项。我说得对吗

  • 数据类型更改:这在Avro中受支持,因为我们可以使用union type为单个列定义多个数据类型,但在Parquet中不可能,因为Parquet中没有union type


  • 我是否遗漏了任何其他可能性?。感谢您的帮助。

    hive.parquet.use column names=true需要设置为在parquet中按名称访问列。这不仅用于列的添加/删除。按索引操作列会很麻烦,甚至不可行

    还有一种解决方法可用于列重命名。请参阅

    结合是拼花地板的挑战