Hive表字段注释被覆盖为‘from deserializer’问题求助
解决Hive使用OpenCSVSerDe后字段注释显示"from deserializer"的问题
这个问题我之前也碰到过,核心原因是OpenCSVSerDe在初始化时会生成一套自己的字段元数据(包括注释),覆盖了你建表时指定的自定义注释。下面给你几个可行的解决办法:
办法1:先创建带注释的表,再添加SerDe
先创建不包含SerDe的基础表,确保字段注释被写入Hive元数据,之后再通过ALTER TABLE指定SerDe,这样注释就不会被覆盖:
-- 第一步:创建带注释的基础表 CREATE TABLE db1.test_create_tbl( column1 smallint COMMENT 'desc of column' ) COMMENT 'desc of table' STORED AS TEXTFILE; -- 第二步:修改表指定OpenCSVSerDe ALTER TABLE db1.test_create_tbl SET ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde';
执行完这两步后,再运行DESCRIBE db1.test_create_tbl,就能看到你自定义的字段注释了。
办法2:直接修改现有表的字段注释
如果表已经创建好了,不需要重建,直接用ALTER TABLE修改字段注释即可,这个操作会直接更新Hive元数据,优先级高于SerDe提供的默认注释:
ALTER TABLE db1.test_create_tbl CHANGE COLUMN column1 column1 smallint COMMENT 'desc of column';
执行后再查看表结构,注释就会变成你自定义的内容。
补充说明
为什么会出现这个现象?因为OpenCSVSerDe的设计逻辑是:如果没有配置从CSV文件表头读取字段信息(比如设置skip.header.line.count=1),它会默认生成字段元数据,其中注释就会显示为"from deserializer",并且会覆盖建表时指定的注释。上面的两种方法都是通过绕过SerDe的元数据覆盖逻辑,让Hive优先使用你设置的自定义注释。
内容的提问来源于stack exchange,提问作者Chi.che
相关产品推荐
相关产品推荐

