暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【大数据开发】Hive的高级应用 (三)

数据信息化 2020-04-16
340

第十六小节:Hive表数据的加载方式


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

load data local inpath '/opt/datas/order.txt' into table db_hive.order;


 2.加载HDFS文件到hive表中

load data inpath '/opt/datas/order.txt' into table db_hive.order;


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

load data  inpath '/opt/datas/order.txt' overwrite into table db_hive.order;


 4.创建表时通过select加载数据

create table order as select * from nopartition;

 

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

create table order like nopartition;
insert into order select * from nopartition;


 6.创建表时,通过location指定的数据目录加载

1)创建数据表目录
2)将数据文件放到指定的目录
3)创建表并location指定数据目录



 第十七小节:Hive结果数据的保存方式


 1.结果数据保存到本地文件中

//以默认分隔方式生成本地文件
INSERT OVERWRITE LOCAL DIRECTORY '/opt/datas/kfk/'
SELECT * FROM order;


//以制表符为分隔符生成本地文件
INSERT OVERWRITE LOCAL DIRECTORY '/opt/datas/kfk/'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
SELECT * FROM order;


 2.结果数据保存到hdfs中

INSERT OVERWRITE  DIRECTORY '/user/kfk/datas/order/'
SELECT * FROM order;


 3.管道符

bin/hive -e "select * from db_hive.order;"  >  /opt/datas/kfk/order.txt



 第十八小节:导入导出备份表


 1.export : 

//将表导出指定HDFS目录
EXPORT TABLE db_hive.order
TO '/user/kfk/datas/export/order'


 2.import:

//将HDFS目录上的数据导入新表里
import table order_imp from '/user/kfk/datas/export/order';


//也可以导入指定路径的表里
IMPORT  TABLE order_imp_1 
FROM '/user/kfk/datas/export/order'
LOCATION '/user/kfk/datas/imp/order'; --(location)指定数据表目录



 第十九小节:常用的查询


 1.字段查询

select userid,username from order;


 2.where查询

select * from order where price > 200;


 3.limit查询

select * from order limit 2; //取前两条数据


 4.distinct

select distinct city from order;  //去重

   

 5.max/min/count/sum/avg

select max(price),min(price),count(price),sum(price),avg(price) from order;


 6.group by / having

select sum(price) price,city from order group by city having price > 500;


第二十小节:join表的关联


 1.等值连接

SELECT * 
FROM customer t1, order t2
WHERE t1.userid = t2.userid ;


 2.左连接

//要注意:左连接要数据少的表放在前面,否则会产生空值
select t1.username,t2.product_name from customer t1 left join order t2 on t1.userid = t2.userid;

select  t2.username,t1.product_name  from order t1 left join customer t2 on t1.userid = t2.userid;


 3.右连接

select  t1.username,t2.product_name  from customer t1 right join order t2 on t1.userid = t2.userid;


select  t2.username,t1.product_name  from order t1 right join customer t2 on t1.userid = t2.userid;


 4.全连接

select  t2.username,t1.product_name  from order t1 full join customer t2 on t1.userid = t2.userid;



 第二十一小节:order/sort/cluster/distribute  by 


 1.order by (只有一个reduce ,全局排序)

select * from order order by price desc;
select * from order order by price asc;


set mapreduce.job.reduces=3; //设置后可以看到reduce数还为1


 2.sort by (对每一个reduce内部的数据进行排序,最后的全局结果集不排序)

insert overwrite local directory '/opt/datas/kfk/sort'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
select * from order sort by price desc;


 3.distribute by (作用类似于partition,一般与sort by 一起使用)

insert overwrite local directory '/opt/datas/kfk/sort'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
select * from order distribute by username sort by price desc;


 4.cluster by (distribute by 和order by字段相同时,使用cluster by 代替)

insert overwrite local directory '/opt/datas/kfk/sort'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
select * from order cluster by username;
文章转载自数据信息化,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论