【hive 运维】hive注释/数据支持中文

文章介绍了如何使Hive支持中文,包括在MySQL中修改hive库的表设置以支持UTF-8字符集,以及在hive-site.xml中配置连接URL以确保元数据存储时使用UTF-8编码。测试部分展示了创建和插入含中文列的表的操作,以及遇到的问题和错误示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hive支持中文需要关注两个方面:

  • 设置hive 元数据库中的一些表
  • 设置hive-site.xml.

一. 设置mysql中的hive库

use hivedb;
alter table  TBLS  modify column TBL_NAME  varchar(1000) character set utf8;
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;

 

二. hive-site.xml 设置

由于Hive元数据(表的属性、字段定义等)都是存储在Mysql中,所以在mysql连接中设置支持中文
characterEncoding=UTF-8

具体的在hive-site.xml中:

  <property>
     <name>javax.jdo.option.ConnectionURL</name>
     <value>jdbc:mysql://ip:3306/hivedb?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>
     <description>JDBC connect string for a JDBC metastore</description>
  </property>
  
   <property>
    <name>hive.metastore.readonly.ConnectionURL</name>
    <value>jdbc:mysql://ip:3306/hivedb?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>
 </property>
        

 

三. 测试

重启hive-server

jps
kill -9 hive_server_pid
nohup ./hive --service hiveserver2 >> /tmp/hiveserver2.log 2>&1 

 

建表

create table if not exists studentno 
(stuno string comment '学号', stuname1 string comment '姓名') comment '学生信息表'; 

hive> show create table  studentno;
OK
CREATE TABLE `studentno`(
  `stuno` string COMMENT '学号',
  `stuname1` string COMMENT '姓名')
COMMENT '学生信息表'
。。。
Time taken: 0.059 seconds, Fetched: 15 row(s)

 

插入数据

insert into studentno values('一号','gao1');  

hive> select * from studentno;
OK
一号    gao1  

 

注:含有中文列的表(报错)

create table student(`学号` string comment '学号', 
`姓名` string comment '姓名') comment '学生信息表';


FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.
 MetaException(message:Add request failed : INSERT INTO `COLUMNS_V2` 
 (`CD_ID`,`COMMENT`,`COLUMN_NAME`,`TYPE_NAME`,`INTEGER_IDX`) VALUES (?,?,?,?,?) )
<think>好的,我现在需要回答用户关于Hive表属性的问题。首先,我得回忆一下Hive的基本知识,特别是表属性的部分。Hive是建立在Hadoop上的数据仓库工具,用于处理结构化数据,所以表结构的设计和属性设置很重要。 用户问的是Hive表属性有哪些。可能指的是在创建表时可以指定的各种属性,比如存储格式、分区、分桶等。可能需要分几个大类来介绍。先整理一下常见的表属性类别。 首先,存储格式,比如TEXTFILE、ORC、PARQUET这些,不同的格式有不同的优缺点,比如ORC适合压缩和查询性能。然后是分区和分桶,这是Hive优化查询的重要机制。分区表可以将数据按某个字段分成不同的目录,分桶则是将数据分成更小的文件,基于哈希。 接下来是表的其他属性,比如行格式(行分隔符、字段分隔符)、表注释、外部表和内部表的区别。外部表的数据存储在HDFS上,删除表时不会删除数据,而内部表则会。还有表的生命周期属性,比如是否临时表,或者设置表的保留时间。 另外,表的属性还包括SERDE(序列化与反序列化),用于处理数据读写时的格式。比如使用OpenCSVSerde来处理CSV文件。还有表的压缩属性,比如设置压缩算法来减少存储空间。 可能还需要提到表的元数据信息,比如存储在Hive Metastore中的信息,比如表的创建者、创建时间、最后访问时间等。以及表的保护属性,比如权限设置,访问控制等,但这可能更多是HDFS层面的。 用户可能还想了解如何查看表的属性,比如使用DESCRIBE EXTENDED table_name命令,或者通过Hive Metastore的元数据表查询。 需要确保分类清晰,每个属性类别下有具体的例子和说明。例如,在存储格式里,要说明各个格式的特点和使用场景。在分区和分桶部分,要解释它们的作用和如何设置。 还需要注意一些高级属性,比如事务性表的属性(ACID支持),这在Hive 0.14之后支持,需要配置特定的存储格式(如ORC)和表属性(如'transactional'='true')。 可能容易遗漏的点包括:表的输入输出格式(INPUTFORMAT和OUTPUTFORMAT),这些在创建表时指定,影响数据如何读写。还有存储位置属性(LOCATION),指定表数据在HDFS中的路径。 总结一下,Hive表属性大致可以分为: 1. 存储相关属性(格式、位置、压缩) 2. 结构优化属性(分区、分桶) 3. 元数据属性(注释、创建信息) 4. 序列化与反序列化(SERDE) 5. 表类型(外部表、内部表、临时表) 6. 事务性支持属性 7. 其他属性(行格式、字段分隔符等) 需要确保每个部分都有简明扼要的解释,并举例说明,比如创建表时的DDL语句示例,这样用户更容易理解。同时要避免使用过于专业的术语,保持解释的易懂性。 最后,检查是否有遗漏的重要属性,比如表的保护机制或生命周期管理相关的属性,或者Hive新版本中引入的属性。例如,是否支持动态分区,或者表的缓存设置等。这些可能也属于表属性的一部分,需要根据用户的背景知识决定是否包含。</think>Hive表属性是定义表结构和行为的关键参数,主要用于控制数据存储、格式、分区等。以下是常见的分类及说明: --- ### **一、基础属性** 1. **表类型** - **内部表(Managed Table)** Hive管理数据生命周期,删除表时数据一起删除。 示例:`CREATE TABLE table_name (...);` - **外部表(External Table)** 数据存储在HDFS指定路径,删除表仅删除元数据。 示例:`CREATE EXTERNAL TABLE ... LOCATION '/hdfs/path';` - **临时表(Temporary Table)** 会话级临时表,会话结束自动删除。 示例:`CREATE TEMPORARY TABLE ...;` 2. **存储格式** - `STORED AS`:指定文件格式,如: - `TEXTFILE`(默认,文本格式) - `ORC`(高效列式存储,支持压缩和索引) - `PARQUET`(列式存储,兼容多种计算框架) - `AVRO`、`SEQUENCEFILE`等。 示例:`STORED AS ORC;` 3. **行格式(Row Format)** - 定义字段分隔符、集合分隔符等: ```sql ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':' ``` --- ### **二、优化属性** 1. **分区(Partitioning)** 按目录划分数据,提升查询效率。 示例:`PARTITIONED BY (dt STRING, country STRING);` 2. **分桶(Bucketing)** 将数据按哈希分散到固定数量的文件中,优化JOIN和采样。 示例:`CLUSTERED BY (user_id) INTO 32 BUCKETS;` 3. **排序(Sorting)** 指定分桶内的排序字段。 示例:`SORTED BY (timestamp DESC) INTO 32 BUCKETS;` --- ### **三、序列化与压缩** 1. **SERDE(序列化/反序列化)** 处理非标准格式数据(如JSON、CSV)。 示例:`ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe';` 2. **压缩属性** - 表级压缩:`SET hive.exec.compress.output=true;` - 文件格式压缩(如ORC):`TBLPROPERTIES ("orc.compress"="SNAPPY");` --- ### **四、高级属性** 1. **事务支持(ACID)** Hive 0.14+支持事务表,需配置ORC格式和表属性: ```sql CREATE TABLE acid_table (...) STORED AS ORC TBLPROPERTIES ('transactional'='true'); ``` 2. **表注释** 添加元数据描述:`COMMENT '用户行为日志表';` 3. **存储路径(Location)** 指定HDFS路径:`LOCATION '/hive/warehouse/logs';` 4. **保护属性** 设置权限(需HDFS支持): `TBLPROPERTIES ('hive.security.authorization.enabled'='true');` --- ### **五、查看表属性** 1. 使用 `DESCRIBE EXTENDED table_name;` 查看详细信息。 2. 查询元数据库(如MySQL中的Hive Metastore表)。 --- **示例完整DDL**: ```sql CREATE EXTERNAL TABLE user_logs ( user_id INT, action STRING ) PARTITIONED BY (dt STRING) CLUSTERED BY (user_id) INTO 50 BUCKETS STORED AS ORC LOCATION '/hive/logs' TBLPROPERTIES ( 'orc.compress'='SNAPPY', 'comment'='用户行为日志表' ); ``` 通过合理配置属性,可优化存储效率、查询性能和运维管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值