频道栏目
首页 > 程序开发 > 综合编程 > 其他综合 > 正文
Hive 表数据 加载 、导出 、查询
2016-09-06 09:28:25         来源:逐波与逆流  
收藏   我要投稿

hadoop,spark,kafka

1) 使用 load方式加载数据到Hive表中,注意分区加载数据的特殊性
2) 如何保存 HiveQL查询结果:保存到表中,保存到本地文件 (注意 指定 列 分隔符)
3) 常见的查询练习,如 group by、 having、join 、sort by、order by等。

1,加载数据到表的几种方式

1,加载本地数据文件到hive表中

load data local inpath '/opt/datas/emp.txt' into table db_1128.emp ;

从本地导入数据.png-38.4kB

2,加载hdfs文件到hive表中

load data inpath '/user/hadoop/hivewarehouse/emp/emp.txt' into  table db_1128.emp ;

从HDFS上导入数据.png-49.8kB

3,加载数据覆盖表中已有的数据

load data local inpath '/opt/datas/emp.txt' overwrite into table db_1128.emp ;

overwrite.png-44.6kB

4,创建表时通过select加载

create table db_1128.emp_cs as select * from emp ;

创建表使用AS方式.png-59kB

5,创建表时,通过insert加载数据

create table db_1128.emp_ins like db_1128.emp ;
insert into table db_1128.emp_ins select * from
db_1128.emp ;

insert方式插入数据.png-41.2kB

6,创建表时,通过location指定加载

创建目录并上传文件

dfs -mkdir -p /user/hadoop/hivewarehouse/emp;
dfs -put /opt/datas/emp.txt /user/hadoop/hivewarehouse/emp;

创建内部表并制定加载路径:

CREATE TABLE IF NOT EXISTS db_1128.emp_spe(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS textfile 
LOCATION '/user/hadoop/hivewarehouse/emp';

创建内部表通过指定路径加载数据.png-49.2kB

2,导出表数据的几种方式

现在对hive表中数据进行分析,分析完成以后,如何保存数据

select * from db_1128.emp ;

1,保存到本地目录的文件中

insert overwrite local directory '/opt/datas/hive_exp_emp2'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
select * from db_1128.emp ;
//查看数据
!cat /opt/datas/hive_exp_emp2/000000_0;

导出数据到本地文件.png-60.7kB

insert overwrite directory '/user/beifeng/hive/hive_exp_emp'
select * from db_1128.emp ;

导出数据到HDFS上.png-65.2kB
3,在shell中将数据重定向到文件中

bin/hive -e "select * from db_1128.emp ;" > /opt/datas/exp_emp_res.txt

shell中导出数据.png-36.7kB
还原成功.png-8.2kB

3,数据备份与还原

1,备份数据

EXPORT TABLE db_1128.emp TO '/user/hadoop/hive/datas/export/emp' ;

export.png-4.5kB

2,还原数据

先删除emp表。

drop table db_1128.emp;
show tables from db_1128;

删除emp.png-11.4kB

IMPORT FROM '/user/hadoop/hive/datas/export/emp' ;

要到备份数据库的目录才能导入成功.png-17.8kB

4,查询数据的操作

1,group by

计算每个部门的平均工资

select e.deptno,avg(sal) avg_sal from emp_ext e group by e.deptno ;

groupby.jpg-72.7kB

2,having

选出每个部门大于薪水两千的。对分组后进行筛选,where对分组钱进行筛选。

select e.deptno,avg(sal) avg_sal from emp_ext e group by e.deptno having avg_sal > 2000 ;

having.jpg-77.7kB

3,等值链接:join

两表数据:
两表的数据.jpg-65.2kB

select 
  e.empno, e.ename, d.deptno, d.dname
 from emp_ext e join dept d on e.deptno = d.deptno ;    

等值连接.jpg-145kB

4,左连接:left join

select 
  e.empno, e.ename, d.deptno, d.dname
 from emp_ext e left join dept d on e.deptno = d.deptno ;

左连接.jpg-148kB

5,右连接:right join

select 
  e.empno, e.ename, d.deptno, d.dname
from emp_ext e right join dept d on e.deptno = d.deptno ;

右连接.jpg-134.8kB

6,全连接:full join

select 
  e.empno, e.ename, d.deptno, d.dname
 from emp_ext e full join dept d on e.deptno = d.deptno ;   

全连接.jpg-94.2kB

7,sort by

对每一个reduce内部的数据进行排序,全局结果集来说不是排序的

set mapreduce.job.reduces = 3 ;
insert overwrite local directory        '/opt/datas/sortby-res' 
 select * from emp sort by empno desc ;

sortby.jpg-45.3kB

8,distribute by

作用类似于分区partitioner底层就是MapReduce中的分区,通常情况下与sort by 进行使用

insert overwrite local directory '/opt/datas/distby-res'
 select * from emp_ext distribute by deptno sort by empno desc ;

注意事项:
distribute by 必须要在sort by 前面
sort by是对每个reduce 里面的数据进行排序

9,cluster by

distribute by 和 sort by 字段相同时,使用cluster by 代替

insert overwrite local directory '/opt/datas/clusterby-res' 
select * from emp_ext cluster by empno ;

cluster.jpg-45.6kB

10,order by

全局排序,一个Reduce

select * from emp order by empno desc ;
select * from emp order by empno asc ;

orderby.jpg-114.5kB

点击复制链接 与好友分享!回本站首页
上一篇:tftp实现与说明(二)
下一篇:Mariadb 数据库
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站