06分布式数据仓库 HIVE -- 数据的查询(HQL Hive Query Language)
来源:互联网 发布:flash框架python 编辑:程序博客网 时间:2024/05/10 16:11
where查询
select * from user where name = ‘liguozhong’;
where 操作是在多个map端进行的。
group by
select name age count(1),avg(age),sum(money),count(distinct age)
form user where sex = 'b'
group by name,age having(avg(age) > 10);
group by在reduce端执行,根据name+age的组合key。发到多个reduce端执行聚合操作,一个组合key对应一个reduce,set mapred.reduce.tasks=10。通过网络传输到对应reduce,如果 name+age分散在各个不同的文件上,传输压力就大。当name+age一个有5个组合数。如果有4个key的数据量小,1个key的数据量很大,拖累了整个job的速度。造成数据倾斜。需要设置 set hive.groupby.skewindata=true;多开一个辅助job来处理数据倾斜。select name,必须是groupby组合键里的列。
order by
select name ,age form user where name = 'liguozhong' order by age desc,sex asc;
order by 是多个map过滤完where的数据,传到一个reduce中排序。单机reduce压力大。慎用。真的要做排序最好是将多个map端过滤完where操作后的数据。导入mysql等关系型数据库中,去做排序。也就是说,这个功能基本没用。
join(join 在reduce端完成)
1 join
selct u.name,s.grade (select * from user) u join (select * from student) s on u.id = s.id
join是内连接,当 id = 3 ,3 同时在user中,和student中的都有记录。才会查出来。
2 left outer join
selct u.name,s.grade (select * from user) u left outer join (select * from student) s on u.id = s.id
left outer join 做连接,当id = 3,只要3在user 表中的数据都会查出来。student 中因为没有3,对应的值回事NULL。
3 right outer join
selct u.name,s.grade (select * from user) u right outer join (select * from student) s on u.id = s.id
right outer join 右连接,当id = 3,只要3在student 表中的数据都会查出来。user 中因为没有3,对应的值回事NULL。
4 left semi join (exist)
selct u.name,s.grade (select * from user) u left semi join (select * from student) s on u.id = s.id and u.name=s.name(on 关联只能是 = 号)
left semi join 连接,当id = 3,只要3在user 表中的数据都会查出来。student 中因为没有3,对应的值回事NULL。在student找到一个值后,就停止了。
5 mapjoin(join 在reduce端)
mapjoin 在map端完成join操作。 join后的 where在reduce端执行。讲一张小表读入map的内存中,当有一张小表和不等值的连接。可以使用mapjoin
set hive.enforce.bucking=true
create table user(
name string,
sex int,
age int
)
clustered by (sex) sorted by(age) into 10 buckets
row format delimited fields terminated by '\t' as textfile;
select * from user tablesample(bucket 1 out of 2 on sex)
set hive.optimize.bucketmapjoin = true;
set hive.optimize.bucketmapjoin.sourtedmerge=true;
set hive.forma=org.apache.hadoop.hive.ql.io.BucketizedHiveInputForMat;
需要样本的场景。按分桶join。
distribute by ( sorted by)
select * from user distribute by name; //按 name 把不同的name的hash数据打散到对应的reduce端。供sorted by使用来实现hive的排序。
select * from user distribute by name sorted by name asc,age desc; //sorted by 在各个reduce端做排序,在单个sorted by 中有序。
set mapred.reduce.tasks = 10;
insert overwrite table user select name,age from student distribute by grade;
cluster by
有空再说。
union all
有空再说。
- 06分布式数据仓库 HIVE -- 数据的查询(HQL Hive Query Language)
- HQL(Hive query language)常用语句
- 03分布式数据仓库 HIVE -- 数据的相关操作
- Hive HQL数据操作、数据查询
- 05分布式数据仓库 HIVE -- 分区表的操作
- Hive数据仓库--HiveQL查询
- hive学习 hql查询
- 09分布式数据仓库 HIVE -- HIVE优化
- 07分布式数据仓库 HIVE -- 函数
- Hive进阶之Hive的数据查询
- 关于HQL(Hibernate Query Language)的查询方法
- Hibernate查询(Query Language,hql,ejbql,nativeql,qbc,qbe)
- 搭建HIVE数据仓库导入带有中文的HQL及查看表数据时遇到的乱码问题
- Hibernate Query Language(HQL)
- HQL(Hibernate Query Language)
- hive(数据仓库工具)
- Hive(一个数据仓库)
- 02分布式数据仓库 HIVE -- 表的相关操作
- Java线程(一)-概念与原理
- C++ 虚函数表解析
- 春运网购车票提防山寨网站
- Anagrams by Stack(进栈出栈问题)
- Jsp org.apache.jasper.JasperException
- 06分布式数据仓库 HIVE -- 数据的查询(HQL Hive Query Language)
- 枚举与位运算
- 编解码技术学习网站
- 闭包
- Android 通知之 Notification
- 引用作形参(2)
- 谷歌自动驾驶汽车定型 明年将上路测试
- Drupal 字段验证小知识
- Xamarin System.Exception与Java.Lang.Exception之间需要主要的地方