架构演化比较apacheavro与apacheparquet

omqzjyyz  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(317)

我想交叉检查一下我对apacheavro和apacheparquet等文件格式在模式演化方面的差异的理解。看看各种各样的博客和答案给了我以下的理解。我需要验证我的理解是否正确,并且我想知道我是否遗漏了关于模式演化的任何其他差异。本文就如何在apachehive中使用这些文件格式给出了解释。
添加列:两种文件格式都支持在列的末尾添加列(默认值)。我认为如果hive table属性设置为“hive.parquet.use column names=true”,那么在parquet中可以支持在列的中间添加列(使用默认值)。不是这样吗?。
删除列:就删除列列表末尾的列而言,我认为这两种文件格式都支持,即如果任何parquet/avro文件也有删除的列,因为reader模式(hive模式)没有删除的列,即使writer的模式(实际的avro或parquet文件模式)有额外的列,我认为这两种格式都很容易被忽略。如果设置了属性“hive.parquet.use column names=true”,也可以支持删除列列表中间的列。我的理解正确吗?。
重命名列:当涉及到重命名列时,由于avro有“列别名”选项,列重命名在avro中是受支持的,但在parquet中是不可能的,因为parquet中没有这样的列别名选项。我说得对吗?。
数据类型更改:这在avro中是受支持的,因为我们可以使用union type为单个列定义多个数据类型,但在parquet中是不可能的,因为parquet中没有union类型。
我错过了其他的可能性吗?。谢谢你的帮助。

sh7euo9m

sh7euo9m1#

hive.parquet.use column names=true需要设置为通过名称访问parquet中的列。它不仅用于列的添加/删除。通过索引操作列会非常麻烦,甚至不可行。
列重命名也有一个解决方法。参考https://stackoverflow.com/a/57176892/14084789
Parquet地板的结合是一个挑战。

相关问题