如何使用最新的 AVRO 模式文件更新配置单元表元数据

Posted

技术标签:

【中文标题】如何使用最新的 AVRO 模式文件更新配置单元表元数据【英文标题】:How to update hive table metadata with latest AVRO schema file 【发布时间】:2018-11-30 11:42:59 【问题描述】:

失败:RuntimeException MetaException(消息:org.apache.hadoop.hive.serde2.SerDeException 遇到 AvroSerdeException 确定架构。返回信号架构以指示问题:无法从给定路径读取架构:/master_data/XYZ/DA12195/business_date= 20181126/_schema.avsc)

架构文件存在于 business_date=20181129 的新分区中,但 hive 表仍指向旧分区中的架构文件。

【问题讨论】:

你可以试试msck repair table <table_name> 这没有帮助,因为我们已经刷新了 AVRO 表的基础数据,然后将其复制回来。在这种情况下,表元数据不正确。 这是什么意思`我们已经刷新了AVRO表的底层数据然后将其复制回来`你是删除整个表的数据还是应该一个分区? 我们在测试阶段删除了整个表的 AVRO 数据。现在我们已经从 Hadoop TRASH 中检索数据集。但是尝试在表上查询,它失败并出现上述错误。 【参考方案1】:

删除外部表并重新创建它有助于解决此问题。 MSCK REPAIR 命令也有助于重新创建配置单元分区。

文件 _schema.avsc 文件包含有关 AVRO 表的架构信息。我们需要将配置单元表元数据指向该文件的正确位置。需要更新 serde 和 tblproperties 才能进行此更改

【讨论】:

以上是关于如何使用最新的 AVRO 模式文件更新配置单元表元数据的主要内容,如果未能解决你的问题,请参考以下文章

从两个配置单元表中删除重复数据

在 spark 中创建带有模式的配置单元外部表

avro时间戳字段上的配置单元外部表返回一样长

具有逻辑类型的 Avro 模式不能与最新的 confluent-kafka 一起使用

如何在python中提取avro文件的模式

Pig - 读取存储为 Avro 的 Hive 表