目录
select语句
1. where子句
where条件必须是布尔表达式,用于过滤结果集,属于精准过滤。
select * from table where city='重庆'
2. all、distinct子句
两个子句都表示是否返回重复行,默认是all。
all | 返回所有匹配的行 |
distinct | 指出在结果集中重复出现的行 |
3. limit子句
limit子句用于限制select1语句返回的行数。
select p_id,p_name from products limit 5;
4. 公共表达式(CTE)
公共表达式可以表示一个临时的结果集(表),该表通过一个简单的查询指定,只要在CTE语句范围内均可共享该临时表。
临时表是不可被修改的、虚拟的。
with t1 as (select ...) select * from t1;
5. 嵌套查询
嵌套查询也称子查询,通常用于from子句后。
select * from (select ...) [as] name
嵌套查询注意事项:
(1)必须给定名称,因为from子句中的每个表必须有表名。
(2)子查询中的列必须有唯一名称,并且在外部查询中可以引用。
(3)可以进行union和join操作。
(4)Hive支持任意级别的子查询。
(5)“as”关键字在Hive0.13版本后才被支持。
6. 列匹配正则表达式
set hive.support.quoted.identifiers=none;
select `regex_expr` from table;
列匹配正则表达式注意事项:
(1)正则表达式必须用一对反引号“`”引住。
(2)设置“hive.support.quoted.identifiers”为“none”,使Hive将反引号解释为正则表达式。
7. 虚拟列
虚拟列是并未在表中真正存在的列,但对于数据进行相关验证时非常有用。于此同时,它只有查看权限,不能被修改。
input__file__name | 任务运行时的输入文件名,该行数据包含于哪个文件中(“__”为两根下划线) |
block__offset__inside__file | 包含文件中的块内偏移量 |
select c_id,input__file__name,block__offset__inside__file
from customers limit 5;
关联查询(join语句)
关联查询是指对多表进行联合查询,主要通过join语句将两个或多个表中的行组合在一起进行查询。HQL JOIN类似于SQL JOIN,但仅支持等值连接,具体包括内连接(inner join),外连接(outer join),交叉连接(cross join)。关联查询详细操作
1. 内连接(inner join)
select * from
table join table_item on table.t_id=table_item.ti_id
limit 10;
2. 外连接(outer join)
一下外连接方式中没连接的部分均用null替代。
(1)左外连接(左表全)
select A left join B
(2)右外连接(右表全)
select A right join B
(3)全连接(全显示)
select A full join B
(4)左半连接:舍弃掉右表中的数据,仅返回左表中剩余的数据。
select A left semi join B
3. 交叉连接(cross join)
交叉连接又称笛卡尔乘积,相当于两个表相乘。
select A cross join B
假设A表数据有4条,B表数据有7条,则总数据有4×7=28条。
联合查询(union语句)
union语句用于合并两个或多个select1语句的结果集。
联合查询注意事项:
(1)每个子集都必须有相同的列名和类型。
(2)应在获得整个union结果之后进行排序、分组、limit等操作。
(3)1.2版本前的Hive只支持union all,重复的行不会被删除。
最后,本篇文章是基于我所学所知进行的知识总结,如有误论,虚心接受指正。参考文献是《Hadoop数据仓库实战》,感兴趣的小伙伴可以对其进行深入阅读。