Hive数据操作
1. 前置准备
实验环境
- Oracle Linux 7.4
- Java1.8.0_144
- Hadoop2.7.4
- Hive2.1.1
数据准备
2. 表操作
2.1 建表操作
create external table userinfos(
uname string,
salary float,
family ARRAY<STRING>,
reduces MAP<string,float>,
address STRUCT<street:string,city:string,state:string,zip:int>
)
row format delimited fields terminated by '\001'
collection items terminated by '\002'
MAP KEYS terminated by '\003'
LINES terminated by '\n'
stored as textfile;
2.2 导入数据
将本地文件userinfo1.txt中数据导入表userinfo中
load data local inpath '/root/experiment/datas/hive/userinfo1.txt' into table userinfo;
将本地文件userinfo2.txt中数据导入表userinfo中
load data local inpath '/root/experiment/datas/hive/userinfo2.txt' into table userinfo;
2.3 查询表
查询指定字段
select uname,salary from userinfo;
查询数组中的值
SELECT uname,family FROM userinfo;
查询集合中的值
SELECT uname,reduces["pension"] FROM userinfo;
查询结构中的值
SELECT uname,address.city FROM userinfo;
SELECT uname , address.zip FROM userinfo;
2.3.1 函数查询
算术运算符,使用列值进行计算
SELECT uname,reduces["pension"] +reduces["medical"]+reduces["provident"] FROM userinfo;
数学函数 Round(DOUBLE D)
SELECT uname,round(salary *(1-reduces["pension"] +reduces["medical"]+reduces["provident"])) FROM userinfo;
2.3.2 聚合函数
-- map端聚合的设置
-- 这个设置可以将顶层的聚合操作放在Map阶段执行,从而减轻清洗阶段数据传输和Reduce阶段的执行时间,提升总体性能。
-- 缺点:该设置会消耗更多的内存。
set hive.map.aggr=true;
SELECT count(*) FROM userinfo;
2.3.3 表生成函数
SELECT explode(family) AS sub FROM userinfo WHERE uname='John';
2.3.4 条件查询
SELECT * FROM userinfo WHERE uname='John';
3. 流程总结
Hive常见set的配置设置
设置reduce数量(默认值-1)
set mapred.reduce.tasks=100;
set mapreduce.job.reduces=3;
修改表为内部表
set tblproperties(‘EXTERNAL’=‘FALSE’);
开启分桶表(默认false)
set hive.enforce.bucketing=true;
开启Hive中间传输数据压缩功能
set hive.exec.cmpress.intermediate=true;
开启mapreduce 中map 输出压缩功能
set mapreduce.map.output.compress=true;
开启hive 最终输出数据压缩功能
set hive.exec.compress.output=true;
开启mapreduce 最终输出数据压缩
set mapreduce.output.fileoutputformat.compress=true;
设置mapreduce 最终数据输出压缩为块压缩
set mapreduce.output.fileoutputformat.compress.type=BLOCK;
设置Fetch抓取为more(默认为more)
set hive.fetch.task.conversion=more;
开启本地模式(默认关闭)
文章仅做记录,涉及侵权内容请联系删除