模式演化比较:Apache Avro与Apache Parquet

3
我想核对一下我对文件格式(比如Apache Avro和Apache Parquet)在模式演进方面的区别的理解。看了各种博客和SO答案后,我有以下的理解。 我需要验证我的理解是正确的,并且我还想知道是否存在任何其他与模式演变相关的差异。 在这些文件格式中使用Apache Hive时给出了说明。
  1. 添加列: 在列末尾添加列(带默认值)在这两种文件格式中都受支持。如果Hive表属性设置为"hive.parquet.use-column-names=true",则在列中间添加列(带默认值)应该也可以在Parquet中受到支持。这不是这样吗?
  2. 删除列: 就在列列表的末尾删除列而言,我认为这两种文件格式都支持,即使Parquet/Avro文件中有所删除的列,由于读取器模式(Hive模式)没有已删除的列,即使编写者的模式(实际的Avro或Parquet文件模式)具有附加列,这两种格式中都将很容易被忽略。如果设置属性"hive.parquet.use-column-names=true",那么在列列表的中间删除列也是支持的。我的理解正确吗?
  3. 重命名列: 在重命名列方面,由于Avro有“列别名”选项,因此在Avro中支持列重命名,但在Parquet中不可能,因为Parquet中没有这样的列别名选项。我理解正确吗?
  4. 数据类型更改: 这在Avro中是支持的,因为我们可以使用联合类型为单个列定义多个数据类型,但在Parquet中不可能,因为Parquet中没有联合类型。
还有其他东西我是否遗漏了?感谢帮助。
1个回答

1

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

对于列重命名也有一种解决方法,请参考https://stackoverflow.com/a/57176892/14084789

使用Parquet进行联合查询是具有挑战性的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接