Hive 字段和表注释乱码
来源:互联网 发布:java游戏高级编程 编辑:程序博客网 时间:2024/05/22 04:46
上一篇我是解决了hiveb表中数据为中文乱码的问题,今天又碰到建表时加上中文注释位乱码,自己也是头大了,下面是我转载的一位大神的方法,仅供参考:
转载自:https://my.oschina.net/jackieyeah/blog/742088
创建Hive表
使用以下语句在 Hive 中创建带有注释的表:
CREATE TABLE IF NOT EXISTS links (movieId INT COMMENT '电影ID',imdbId INT COMMENT 'imdb电影ID',tmdbId INT COMMENT 'themoviedb电影ID')COMMENT '电影链接表'ROW FORMAT DELIMITED FIELDS TERMINATED BY ','STORED AS TEXTFILE;
接下来使用 show create table links 语句查看 links 建表信息:
可以看到表字段和表中文注释出现乱码。
解决方案
修改Hive元数据库编码
当 Hive 使用 MySQL 作为元数据库的时候, MySQL 的字符集要设置成latin1 default。
使用 show create database hive 语句查看 hive 数据库默认编码。
使用 alter database hive default character set latin1 将 hive 数据库默认编码改成 latin1。
修改相关表相关字段编码
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
打Patch
Hive 表注释中文乱码是Hive的一个bug, 详情参见 注释不能支持Unicode字符 。在 2.1.0 版本中还未解决这个bug, 所以需要自己手动打patch。链接中已经提供了patch文件:
方便做个记录,现将 HIVE-11837.1.patch 内容粘贴出来:
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.javaindex 6fca9f7ec86574a6053af3672c551c6a63aa4870..661367f27b69f9796140808eda53a3bbcdcbdb11 100644--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java@@ -2048,7 +2048,7 @@ private int showCreateTable(Hive db, DataOutputStream outStream, String tableNam if (tbl.isView()) { String createTab_stmt = "CREATE VIEW `" + tableName + "` AS " + tbl.getViewExpandedText();- outStream.writeBytes(createTab_stmt.toString());+ outStream.write(createTab_stmt.toString().getBytes("UTF-8")); return 0; }@@ -2196,7 +2196,7 @@ else if (sortCol.getOrder() == BaseSemanticAnalyzer.HIVE_COLUMN_ORDER_DESC) { } createTab_stmt.add(TBL_PROPERTIES, tbl_properties);- outStream.writeBytes(createTab_stmt.render());+ outStream.write(createTab_stmt.render().getBytes("UTF-8")); } catch (IOException e) { LOG.info("show create table: " + stringifyException(e)); return 1;
前面的 + 号表示需要新加的代码,- 号表示需要删除的代码
接下来下载 Hive 2.1.0 源码包 apache-hive-2.1.0-src.tar.gz,然后解压。修改 DDLTask.java 源码,接着使用以下Maven命令进行编译打包。
mvn clean package -DskipTests=true
最后, 将新生成的 hive-exec-2.1.0.jar 文件替换掉 hive 安装目录 lib 目录下的 hive-exec-2.1.0.jar 文件。
验证
重启 Hive 客户端 ,然后删除原先建的表:drop table links。
再次运行第一步中的建表语句并再次运行 show create table links 查看中文注释是否乱码。
可以看到 hive 表注释和字段注释可以正常显示中文了。
- Hive 字段和表注释乱码
- hive修改表和字段注释
- Hive字段中文注释乱码解决办法
- 解决hive表注释乱码
- Hive表中文注释乱码
- impala和hive建表注释出现乱码
- hive中字段注释中中文出现乱码的问题
- Hive注释乱码问题
- mysql取表注释和字段注释
- mysql:表注释和字段注释
- mysql:表注释和字段注释
- mysql:表注释和字段注释
- mysql 之表注释和字段注释
- mysql:表注释和字段注释
- mysql表注释和字段注释
- mysql加表注释和字段注释
- 表和字段加注释
- hive中文注释乱码问题
- 选择器的优先级
- 14.3 Swift内存管理模型
- Ubuntu系统修改时区
- Linux 下JDK的安装和环境变量配置
- [AHK]将对话框路径置成刚查看过的文件夹路径(仿Listary功能)
- Hive 字段和表注释乱码
- mybatis一级缓存和二级缓存
- android系统开机画面log和动画的自定义
- 使用C#语言建立本地数据库
- 查询及更改mysql的编码方式
- 14.4 Swift中weak引用 访问可选类型的时候,用隐式解包
- Android 手写签名 Demo
- 【Jmeter】Jmeter使用常见问题记录,持续~~~
- myeclipse加载慢