返回

原来Hive中table的comment乱码是这么回事!

闲谈

好的,让我们开始吧!

在数据仓库中,表注释的使用非常广泛,有利于我们更好的理解和使用表。在Hive中,注释用comment关键词修饰,注释内容可以是单个字符串,也可以是多个字符串,字符串之间用换行符进行分割。Hive提供了一系列管理注释的函数,如add_jar、add_resource、list_jar、list_resource等。

那么我们在使用过程中就碰到了一个很奇怪的问题:当我们给中文注释时,在表中显示却是乱码,这让我们在使用中很是困惑。

想要解决这个问题,我们首先需要了解Hive是如何存储注释的。在Hive中,注释存储在元数据表中,元数据表是Hive用来存储元数据的表,如表名、字段名、字段类型、表注释等信息。元数据表通常存储在关系型数据库中,如MySQL、Oracle、PostgreSQL等。

由于Hive默认使用UTF-8编码,而中文在UTF-8编码中占用多个字节,因此当我们给Hive表添加中文注释时,这些中文注释在元数据表中就会被存储为多个字节。当我们查询这些注释时,如果客户端的编码与元数据表的编码不一致,就会出现乱码。

解决中文乱码问题有以下几个步骤:

1、进入hive的元数据库中修改相应的编码配置,我使用的元数据库是MySQL。

mysql> use hive;
mysql> show create table t1;

mysql中每个数据库、每张表、每个字段都有一个character_set_client、character_set_connection、character_set_result参数,这几个参数决定了客户端、连接、结果的编码。为了避免出现乱码,需要将character_set_client、character_set_connection、character_set_result统一设置为utf8mb4。

ALTER DATABASE hive CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE t1 MODIFY name VARCHAR(20) CHARACTER SET utf8mb4;

2、修改Hive配置文件hive-site.xml,添加如下配置:

<property>
  <name>hive.server2.thrift.client.type</name>
  <value>COMPACT</value>
</property>

3、重启Hive服务。

修改完成后,中文注释就不会再出现乱码了。

以上就是解决Hive中文乱码问题的步骤,希望对大家有所帮助。