一.hive查询
语法结构:
SELECT [ALL | DISTINCT] 字段名,字段名,...
FROM 表名 [inner | left outer | right outer | full outer | left semi join 表名 on 关联条件]
[where 非聚合条件]
[GROUP BY 分组字段名]
[HAVING 聚合条件]
[ORDER BY 排序字段名 asc | desc]
[CLUSTER BY 字段名 | [DISTRIBUTE BY 字段名 SORT BY 字段名]]
[LIMIT x,y]
类sql基本查询
知识点:
基础查询格式:select distinct 字段名 from 表名;
注意:*代表所有字段 distinct去重 as给表或者字段起别名
条件查询格式:select distinct 字段名 from where 条件;
比较运算符:> < >= <= != <>
逻辑运算符:and or not
模糊查询:%代表任意0个或者多个字符
_代表任意1个字符
空判断:为空is null 不为空is not null
范围查询:x到y的连续范围:between x and y
x或者y或者z类的非连续范围:in(x,y,z)
排序查询格式:select distinct 字段名 from 表名 [where 条件] order by 排序字段名 asc | desc ;
聚合查询格式:select distinct 字段名 from 表名;
聚合函数:count() sum() avg() max() min()
分组查询格式:select 分组字段名,聚合函数(字段名) from 表名 [where 非聚合条件] group by 分组字段名 [having 聚合条件];
分页查询条件:select 字段名 from 表名 [order by 排序字段名 asc|desc] limit x,y;
类sql多表查询
知识点:
交叉连接格式:select 字段名 from 左表 cross join 右表
内连接格式:select 字段名 from 左表 inner join 右表 on 左右表关联条件;
左外连接格式:select 字段名 from 左表 left outer join 右表 on 左右表关联条件;
右外连接格式:select 字段名 from 左表 right outer join 右表 on 左右表关联条件;
自连接:本质是一个特殊的内外连接,最大特点就是左右表是同一个表
子查询:本质是一个select语句作为另外一个select语句的一部分(表或者条件)
hive其他join操作
知识点:
全外连接:左表 full [outer] join 右表 on 条件
左半开连接:左表 left semi join 右表 on 条件
hive其他排序操作[练习]
知识点:
set mapreduce.job reduces: 查看当前设置的reduce数量,默认结果是-1,代表自动reduce数量和桶数量一致
set mapreduce.job.reduce = 数量 :-- 修改reduce数量
cluster by 字段名:分桶且正序排序
distribute by 字段名 sort by 字段名:distribute by 负责分,sort by 负责排序,相对比较灵活
order by 字段名:全局排序
注意:cluster by 和 distribute by 字段名 sort by 字段名 受当前设置的reduces数量影响,但是设置的reduce数量对order by 无影响,因为order by 就是全局排序,就是一个reduce
建表的时候指定分桶字段和排序字段:clustered by (字段名) sorted by (字段名) into 桶数量 bucket
注意:如果建表的时候设置了桶数量,那么reduce设置建议为-1或者大于桶数量
抽样查询
知识点:
正则模糊查询
sql模糊查询关键字:like
正则模糊查询关键字:rlike
union联合查询
union联合查询:
union [distinct]:去重,省略了distinct
union all:不去重
CTE表达式
with 临时结果集别名1 as (子查询语句),
临时结果集别名2 as (子查询语句)
...
select 字段名 from (子查询语句)
内置虚拟列
知识点: