数据类型
常用基本数据类型
int。float,double,string,timestamp
复杂数据类型
结构体类型
类似java的对象,用法:字段名,属性名
eg:
对于数据:
1,xm,xm:18
2,xw,xw:18
建表:
CREATE TABLE IF NOT EXISTS db_hive.tbs_struct
(
id int,
name string,
s1 struct<sname:string,sage:int>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY ':'
导入数据
LOAD DATA LOCAL INPATH '/opt/datas/t02.txt' INTO TABLE db_hive.tbs_struct;
查询:
select id,name,s1.sname from db_hive.tbs_struct;
数组类型
用法:字段[下标]
数据:
1,xw,mysql:hadoop:hive
2,xl,java:oracle
建表:
CREATE TABLE db_hive.tbs_arr
(
id int,
name string,
a1 array<string>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY ':'
导入数据:
LOAD DATA LOCAL INPATH '/opt/datas/t03.txt' INTO TABLE db_hive.tbs_arr
查询
select id,name,a1[0] from db_hive.tbs_arr;
存储格式
Hive底层数据是以hdfs文件的形式存储在Hadoop上的,选择一个合适的存储格式以及压缩方式,是对Hive一种优化。不同存储格式,代表着存储方式不同,同时对性能体现也有很大的不同。
TEXTFILE
TEXTFile为默认格式,不做压缩,磁盘开销大,数据解析开销大,不支持分片。
SEQUENCEFILE
以Key-value形式序列化到文件中,不常用。
RCFILE
行列存储相结合的存储方式,被ORCFile取代。
ORC★
一种行列存储相结合的存储方式,支持压缩(eg:snappy),磁盘开销小,查询速度提升。
PARQUET★
PARQUET是面向分析型的列式存储格式,且为二进制,不能直接查看读取,所以PARQUET文件是自解析,支持压缩(snappy压缩与lzo压缩)。
JSONFile 常用
是特殊文本,以JSON格式存储,类似TEXTFILE,HIVE4.0以上版本支持,低版本的HIVE需要引入JAR包。
行式存储与列式存储

行式存储:TEXTFile,JSON,SEQUENCEFILE
列式存储:RCFile,ORC,PARQUET
行式与列式使用场景
当查询结果为一整行时,行存储效率高一些;当查询表中某几个列时,列存储效率高。同时,列存储压缩更高。
选择存储格式的语句
JSON类型(从外部导入数据):
- 准备json格式的数据
- (hive4.0版本以下)准备jar包
json-serde-1.3.8-jar-with-dependencies.jar
,上传至hive的lib
目录与hadoop的./share/hadoop/mapreduce
目录下,并添加环境变量 创建表
CREATE EXTERNAL TABLE db_hive.nginx_access_log_json ( http_user_agent STRING, url_path STRING, remote_addr STRING, type STRING, method STRING, host STRING, version STRING, remote_user STRING, body_bytes_sent STRING, status int, path STRING, timestamps STRING, request STRING ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' STORED AS TEXTFILE LOCATION '/user/skadmin/datas/nginx' ;
上传数据到hdfs目录
dfs -put /opt/datas/ac1.json /user/skadmin/datas/nginx
ORC格式(从已有的外部表中导入)
CREATE TABLE IF NOT EXISTS db_hive.nginx_access_log_orc
STORED AS ORC
AS SELECT * FROM db_hive.nginx_access_log_json;
PARQUET格式(从已有的表中导入)
虚拟机中需要从ORC格式存储的表中导入数据,如果从JSON格式存储的表中导数据会爆内存。
CREATE TABLE IF NOT EXISTS db_hive.nginx_access_log_parquet
STORED AS PARQUET
AS SELECT * FROM db_hive.nginx_access_log_json_orc ;
总结
- 使用json格式存储需要第三方包(低版本),磁盘开销大
- 使用ORC和PARQUET格式,磁盘开销明显变小,同时查询速度加快
- ORC和PARQUET格式的数据导入需要使用
CREATE TABLE AS SELECT
方式
数据压缩
数据压缩的优缺点:
优点
- 减少存储磁盘空间
- 降低磁盘IO
- 压缩后数据占用带宽更少
- 增加数据在hadoop集群中流动的速度
缺点
压缩和解压缩在hive分析时,都需要花费额外的时间。
压缩格式对比

技术选型原则
- 压缩比:压缩比越低,文件越小,所以压缩比越低越好(gzip,bzip2)
- 压缩和解压缩时间:越快越好(lzo,snappy)
- 能否被分割:能被分割,则可以被多个MR并行处理;不能被分割,只能单个MR处理。所以能被分割最好(lzo)。
因此常用snappy和lzo压缩格式
Comments | NOTHING