在hive中建立表 , 表中的字段注释是中文注释 html
create external table movie( userID int comment '用户ID', movieID int comment '电影ID', rating int comment '电影评分', timestamped bigint comment '评分时间戳', movieName string comment '电影名字', movieType string comment '电影类型', sex string comment '性别', age int comment '年龄', occupation string comment '职业', zipcode string comment '邮政编码' ) comment '影评三表合一' row format delimited fields terminated by "," location '/hive/movie';
建表查看表基本信息java
hive> desc movie; OK userid int ??ID movieid int ??ID rating int ???? timestamped bigint ????? moviename string ???? movietype string ???? sex string ?? age int ?? occupation string ?? zipcode string ???? Time taken: 0.057 seconds, Fetched: 10 row(s)
这是由于在MySQL中的元数据出现乱码mysql
由于咱们知道 metastore 支持数据库级别,表级别的字符集是 latin1sql
那么咱们只须要把相应注释的地方的字符集由 latin1 改为 utf-8,就能够了。用到注释的就三个地方,表、分区、视图。以下修改分为两个步骤:数据库
进入数据库 Metastore 中执行如下 5 条 SQL 语句bash
(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;
(2)修改分区字段注解spa
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;
(3)修改索引注解code
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
- 修改 metastore 的链接 URL vi hive-site.xml文件
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://doit01:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8</value> <description>JDBC connect string for a JDBC metastore</description> </property>
从新建立表验证
hive> desc formatted movie; OK # col_name data_type comment userid int 用户ID movieid int 电影ID rating int 电影评分 timestamped bigint 评分时间戳 moviename string 电影名字 movietype string 电影类型 sex string 性别 age int 年龄 occupation string 职业 zipcode string 邮政编码