面试自我介绍英语Hive查询语法
SELECT:
SELECT [ALL | DISTINCT] lect_expr, lect_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list [HAVING condition]]
[CLUSTER BY col_list
放我飞| [DISTRIBUTE BY col_list] [SORT BY| ORDER BY col_list]
] [
LIMIT number]
order by 会对输⼊做全局排序,因此只有⼀个reducer,会导致当输⼊规模较⼤时,需要较长的计算时间。
sort by 不是全局排序,其在数据进⼊reducer前完成排序,因此,如果⽤sort by进⾏排序,并且设置 duce.task>1则sort by 只能保证每个reducer的输出有序,不保证全局有序。
distribute by(字段) 根据指定的字段将数据分到不同的reducer,且分发算法是hash散列。
cluster by(字段) 除了具有distribute by的功能外,还会对该字段进⾏排序、
因此,如果distribute和sort字段是同⼀个时,此时,cluster by = distribute by + sort by
查询语法:
全表查询:
lect * from score;
选择特定的列:
lect s_id, c_id from score;
列别名:
重命名⼀个列,便于计算,紧跟列名,也可以在列名和别名直接加⼊关键字 AS
lect s_id , as myid, c_id from score;
常⽤函数:
求总⾏数:
lect count(1) from score;
求分数的最⼤值:
lect max(s_score) from score;
求分数的最⼩值:
lect min(s_score) from score;
求分数的总和:
lect sum(s_score) from score;
求分数的平均值:
lect avg(s_score) from score;
老母猪戴胸罩
Limit 语句:
lect * from score limit3;
Where语句:
使⽤where⼦句,将不满⾜条件的⾏过滤掉
where⼦句紧随from⼦句
案例实操:
查询出分数⼤于60的数据。
lect * from score where s_score > 60;⽐较运算符:
查询分数等于80的所有的数据:
lect * from score where s_score = 80;
查询分数在80到100的所有数据:
lect * from score where s_score between 80 and 100;
查询成绩为空的所有数据:
爆炒鸡杂
lect * from score where s_score is null;
查询成绩是80和90的数据:
lect * from score where s_score in (80,90);
Like 和 Rlike
使⽤LIKE运算选择类似的值
选择条件可以包含字符或数字
西游记人物分析
% 代表零个或多个字符(任意个字符)
_ 代表⼀个字符
RLike ⼦句是Hive中这个功能的⼀个扩展,其可以通过java的正则表达式这个更强⼤的语⾔来指定匹配条件。
案例实操:
查询以8开头的所有成绩:
lect * from score where s_score like '8%';
查询第⼆个数值为9的所有成绩数据:
lect * from score where s_score like '_9%';
查找s_id中含1的数据:
lect * from score where s_id rlike '[1]'; # like '%1%';北京幼儿园排名
逻辑运算符:
分组:
Group By 语句:
祝女儿生日经典短句
Group By 语句通常会和聚合函数⼀起使⽤,按照⼀个或者多个队列结果进⾏分组,然后对每个组执⾏聚合操作。
计算每个学⽣的平均分数:
lect s_id, avg(s_score) from score group by s_id;
计算每个学⽣的最⾼成绩:
lect s_id , max (s_score) from score group by s_id;
HAVING语句:
having 与where 不同点:
1. where 针对表中的列发挥作⽤,查询数据;having针对查询结果中的列发挥作⽤,筛选数据
2. where 后⾯不能写分组函数,⽽having后⾯可以使⽤分组函数。
3. having只⽤于group by 分组统计语句
案例实操:
求每个学⽣的平均分数:
lect s_id , avg(s_score) from score group by s_id;
求每个学⽣平均分数⼤于85 的⼈
lect s_id, avg(s_score) avgscore from score group by s_id having avgscore > 85;
JOIN语句:
等值JOIN
hive⽀持通常的SQL JOIN 语句,但是只⽀持等值连接,不⽀持⾮等值连接。
案例操作:查询分数对应的姓名:
lect s.s_id , s.s_score ,stu.s_name,stu.s_birth from score s join student stu on s.s_id = stu.s_id;内连接:
内连接:只有进⾏连接的两个表中都存在于连接条件相匹配的数据才会被保留下来。
lect * from teacher t inner join cour c on t.t_id = c.t_id;
儿童睡前故事书
左外连接:
左外连接: JOIN操作符左边表符合where ⼦句的所有记录将会被返回,查询⽼师对应的课程lect * from teacher t left join cour c on t.t_id = c.t_id;
右外连接:
右外连接: JOIN操作符右边表中符合WHERE⼦句的所有记录将会被返回。