0


解决hive建表中文乱码问题

一、解决hive建表中文乱码问题

问题:
在这里插入图片描述
关于中文乱码问题,我们可以从以下几个方面进行考虑:

  • (1)判断hive表的存储格式是否是UTF-8:- 如果hive表的存储格式不是UTF-8,也会导致中文乱码。
  • (2)判断输入的数据,其编码格式是否是中文字符集UTF-8:- hive默认使用UTF-8编码,如果输入的中文字符集与UTF-8不一致,就会出现乱码。- 比如通过JDBC的方式连接,其是否设置了编码格式为UTF-8
  • (3)判断hive的所依赖的mysql元数据库的编码格式是否是UTF-8- 因为为了提高读写速度,不用依次去读hive的HDFS文件,所以一般依赖元数据库都是mysql。所以需要判断hive元数据库mysql中是否设置了编码格式
1、修改hive元数据库的编码格式,这里以元数据库为mysql为例

1.1 进入 etc目录下打开 my.cnf 文件 ,对 my.cnf 添加以下语句:

[client]
default-character-set=utf8
[mysqld]
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci

完成之后,重启mysql,再进入到mysql查看修改是否成功
在这里插入图片描述
1.2 在 mysql 修改hive元数据表注释和字段注释的编码为 utf-8
(1)命令行的形式
修改表字段注解和表注解
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;
(2)也可在数据库可视化工具(例如dbeaver)设置COLUMNS_V2 、TABLE_PARAMS 、PARTITION_PARAMS 、PARTITION_KEYS 的编码格式为utf-8
在这里插入图片描述

2、在 Hive 的配置文件 hive-site.xml 中,我们可以通过指定字符集编码来解决中文乱码问题。以下是一个示例:
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
    <description>database username for metastore</description>
</property>

在这个示例中,我们通过设置

useUnicode=true

characterEncoding=UTF-8

来指定使用 UTF-8 字符集编码。

此外,在 hive-site.xml 配置文件中,也可以通过以下两个参数来指定字符集编码:

<property><name>hive.cli.print.header</name><value>true</value><description>Whether to print the names of the columns in query output.</description></property><property><name>hive.cli.encoding</name><value>UTF-8</value><description>Character-set encoding for various CLI output data such as console output, logs, reports.</description></property><property><name>hive.charset</name><value>utf8</value><description>The character set encoding to use for data read/write operations.</description></property>

在这个示例中,我们通过设置

hive.cli.encoding

参数的值为

UTF-8

来指定字符集编码。这个参数可用于指定各种 CLI 输出数据的字符集编码,例如控制台输出、日志和报告等。

需要注意的是,在进行配置时,建议采用统一的字符集编码,以确保所有代码能够正常工作。

结果展示:
在这里插入图片描述

3、直接在建表语句中设置字符集,但这不一定能生效

当hive建表字段注释中出现中文乱码时,可能是因为字符集编码不匹配所导致的。我们可以在建表语句中指定字符集编码来解决这个问题。以下是一个示例:

CREATETABLE mytable (
  id INTCOMMENT'编号',
  name STRING COMMENT'姓名')COMMENT'学生信息表'ROW FORMAT DELIMITED FIELDSTERMINATEDBY'\t'
STORED AS TEXTFILE
TBLPROPERTIES ('serialization.null.format'='','charset'='utf8',-- 指定字符集编码为UTF-8'orc.compress'='SNAPPY');

在这个示例中,我们在建表语句中加入了

'charset'='utf8'

参数,来指定字符集编码为 UTF-8。这样就能确保 Hive 能够正确地解析中文字符,从而避免乱码问题。

'charset'='utf8'

参数,来指定字符集编码为 UTF-8。这样就能确保 Hive 能够正确地解析中文字符,从而避免乱码问题。

标签: hive hadoop 大数据

本文转载自: https://blog.csdn.net/ZhShH0413/article/details/130942817
版权归原作者 要开心吖ZSH 所有, 如有侵权,请联系我们删除。

“解决hive建表中文乱码问题”的评论:

还没有评论