解决hive表中文乱码问题

这篇具有很好参考价值的文章主要介绍了解决hive表中文乱码问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题背景

使用的mysql版本:Server version: 5.7.31

现象描述:字段名称和字段描述等存储进如hivemetastore是中文,查询出来也是???等无法识别的中文乱码;

0: jdbc:hive2://hadoop03:10000/> show create table agnt_operation_log_big
. . . . . . . . . . . . . . . .> ;
+----------------------------------------------------+
|                   createtab_stmt                   |
+----------------------------------------------------+
| CREATE TABLE `agnt_operation_log_big`(             |
|   `opt_menucount` string COMMENT '????',           |
|   `opt_menu` string COMMENT '??',                  |
|   `opt_time` string COMMENT '???????')             |
| PARTITIONED BY (                                   |
|   `inc_day` string COMMENT '??')                   |
| ROW FORMAT SERDE                                   |
|   'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'  |
| STORED AS INPUTFORMAT                              |
|   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'  |
| OUTPUTFORMAT                                       |
|   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' |
| LOCATION                                           |
|   'hdfs://hadoop02:8020/data/hive/warehouse/db1_fang.db/agnt_operation_log_big' |
| TBLPROPERTIES (                                    |
|   'transient_lastDdlTime'='1658129989')            |
+----------------------------------------------------+

中文乱码的情况分为两种情况:

  • 新建hive集群防止中文乱码

  • 已有的hive集群中文乱码的纠正

一、新建hive集群防止中文乱码

在构建hive开发环境的时候,需要实现构建号对应的hivemetastore依赖的mysql数据库和表

  1. 创建mysql支持中文的数据库

-- 设置utf8的中文编码
CREATE DATABASE `hive_metastore_ljgk` /*!40100 DEFAULT CHARACTER SET utf8 */
-- 或者
CREATE DATABASE `hive_metastore_ljgk` DEFAULT CHARACTER SET utf8 COLLATE utf_general_ci;
  1. 如下是整个hivemetastore以来的mysql的所有表的sql脚本,里面已经改变支持中文,例如支持中文表描述,字段描述等(hive_metastore_ljgk.sql脚本);例如如下,其中已经将编码改变为utf8: 

----------------------------
-- Table structure for CDS
-- ----------------------------
DROP TABLE IF EXISTS `CDS`;
CREATE TABLE `CDS`  (
  `CD_ID` bigint(20) NOT NULL,
  PRIMARY KEY (`CD_ID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; 

   2. 将设置好的hivemetastore以来的mysql的hive_metastore_ljgk.sql脚本,执行并导入到mysql的hive_metastore_ljgk库中:

mysql -h 172.18.8.77 -P 3306 -u root -p xxxxxxxxxxxxx -D hive_metastore_ljgk < /home/fangct/hive_metastore_ljgk.sql
  1. 全部设置全了之后 ,重启hivemetastore服务和hiveserve2服务(hiveserve2应该不用重启);

  2. 验证是否支持中文生效

在hive sql命令行中(此处是beeline),执行hivesql

示例:

create table agnt_operation_log_big
(
 opt_menucount string comment '统计数据',
 opt_menu      string comment '菜单',
 opt_time      string comment '日志搜集表日期'
)PARTITIONED by (inc_day string comment '分区') ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat';

显示所有的hive 创建表字段信心

0: jdbc:hive2://hadoop03:10000/> show create table agnt_operation_log_big;
+----------------------------------------------------+
|                   createtab_stmt                   |
+----------------------------------------------------+
| CREATE TABLE `agnt_operation_log_big`(             |
|   `opt_menucount` string COMMENT '统计数据',           |
|   `opt_menu` string COMMENT '菜单',                  |
|   `opt_time` string COMMENT '日志搜集表日期')             |
| PARTITIONED BY (                                   |
|   `inc_day` string COMMENT '分区')                   |
| ROW FORMAT SERDE                                   |
|   'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'  |
| STORED AS INPUTFORMAT                              |
|   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'  |
| OUTPUTFORMAT                                       |
|   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' |
| LOCATION                                           |
|   'hdfs://hadoop02:8020/data/hive/warehouse/db_fang.db/agnt_operation_log_big' |
| TBLPROPERTIES (                                    |
|   'transient_lastDdlTime'='1658130710')            |
+----------------------------------------------------+

如上所示,hive表中字段的comment已经支持中文正常显示;

注意事项:hive不支持中文表名称,仅仅支持中文字段描述,中文表的描述信息;如下所示

create table if not exists dwd_user (
cookie string COMMENT 'cookie',
country string COMMENT '国家',
province string COMMENT '省',
city string  COMMENT '城市'
) COMMENT '埋点中用户信息筛选'
partitioned by (everyday string)
row format delimited 
fields terminated by '\001'
lines terminated by '\n'
stored as orc;

二、已有的hive集群中文乱码的纠正

网上已有现成案例(未验证):

hive中文乱码解决方法

hive中解决中文乱码

hive 表支持中文设置

注意mysql中字符定义规则:

mysql中共有4种级别的字符集编码的设置:Mysql Server级别、 数据库级别、表级别、列级别

如果要支持中文,最好是构建集群的时候,就将mysql服务器级别设置成支持中文格式的服务器级别的;例如utf8文章来源地址https://www.toymoban.com/news/detail-492005.html

到了这里,关于解决hive表中文乱码问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决CentOS 7中文乱码问题

    CentOS 7是一种常用的Linux发行版,但在某些情况下,用户可能会遇到中文乱码的问题。这个问题通常出现在终端或文本编辑器中,当显示中文字符时,可能会显示为乱码或方框。在本文中,我将为您提供一些解决CentOS 7下中文乱码问题的方法。 方法一:设置系统的字符集 在C

    2024年02月04日
    浏览(52)
  • Debian系统解决中文乱码问题

    、安装locales apt-get install locales 2、设置语言选项 dpkg-reconfigure locales 选择如下四项:     zh_CN GB2312     zh_CN.GBK GBK     zh_CN.UTF-8 UTF-8     en_US.UTF-8 UTF-8 回车然后选择zh_CN.UTF-8 3、查看语言设置 locale 确保LANG=zh_CN.UTF-8 如何不是,执行export LANG=zh_CN.UTF-8 设置环境变量(临时设置

    2024年02月09日
    浏览(49)
  • 简单解决jsp中文乱码问题

    初学jsp制作一个简单的响应页面 具体代码如下: 保存为test.jsp文件,启动tomcat访问,出现下图: 在框内输入:vae 出现下图: 可是\\\"username\\\"看起来实在不舒服,决定将它改成\\\"用户名\\\" 这时问题出现: 本该出现\\\"用户名\\\"的地方出现了一串乱码: 所谓响应中的乱码,就是显示页面

    2024年02月16日
    浏览(56)
  • VScode注释中文时乱码怎么办?VScode中文注释乱码问题的解决方法

    不管是在哪一种编辑器上,都会有自动默认的一种编码格式,在vscode编辑器中默认的编码格式是utf-8,但是在注释的时候,因为使用的字符会不一样,所以可能存在着默认的配置文件,有可能是其他的编码格式,所以因为编码格式不对应,导致了在注释的时候出现了乱码的情

    2024年02月11日
    浏览(63)
  • 解决docker容器中文字符乱码问题

    在命令行中,输入中文出现乱码或者键入错误的情况: 这里我想输入:”中文“,但是出现乱码。 并且,我在之前已经创建好镜像,通过镜像生成了容器。 1.使用locale查看当前容器的系统使用的字符集。 2.使用locale -a查看当前容器的系统支持可以使用的字符集。 3.在一些博

    2024年02月03日
    浏览(57)
  • 解决JavaScript中文乱码问题的方法

    在JavaScript编程中,处理字符串时经常会遇到中文乱码的问题。这种问题通常发生在字符串截取操作中,特别是当截取的字符串中包含中文字符时。本文将介绍一些解决JavaScript中文乱码问题的方法,并提供相应的源代码示例。 方法一:使用Unicode编码 一种常见的解决方案是使

    2024年02月04日
    浏览(46)
  • 解决VSCode输出框中文乱码问题

    在使用VSCode进行开发过程中,有时候会遇到输出框中显示的中文乱码问题。这可能是由于编码设置不正确或缺少相应的字体支持导致的。以下是一些解决方法,供您尝试解决这个问题。 方法一:更改VSCode的编码设置 打开VSCode,并在顶部菜单中选择“文件”(File)选项。 在下

    2024年02月03日
    浏览(47)
  • 快速上手VUE:中文乱码问题解决

            吾有一友,名为小帅。         某天早晨,我正学习、试用API,他路过:         小帅:“咱这皮毛都没的Chinglish水平,还写全英文的?中文整上啊!”         几分钟后,满屏乱码......         我:         按照经验,首先怀疑网页设置有问

    2024年02月15日
    浏览(41)
  • SpringBoot中文乱码问题解决方案

    在Spring Boot中,确实没有像传统Web应用程序中需要使用web.xml配置文件。对于中文乱码问题,你可以采取以下几种方式来解决: 在application.properties文件中添加以下配置: 这里将字符集设置为UTF-8,并启用了HTTP编码配置。 如果你使用的是Spring Boot 2.x版本,可以尝试在pom.xml文件

    2024年02月04日
    浏览(42)
  • 解决Hive视图View数据乱码的问题

    在Hive中,基于某个表创建视图,直接引用表的字段是不会有问题的;但如果增加一个不存在表中的字段,且字段值为中文,就会出现乱码的问题。         在网上找了一圈,原因是Hive的元数据库默认编码是 Latin1(ISO-8859-1),解决方案基本都是去Hive元数据库修改编码。

    2024年02月17日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包