Hive——sql查询

1.简单查询

select * from table
1.1正则表达式指定列
select a,b.* from table;
1.2使用列值进行计算
类似筛选where子句,会在查询的结果中增加一列,显示false和true
select a,b>5 from table;
1.3算数运算符
Hive——sql查询
1.4使用函数

  1. 数学函数
  2. 聚合函数
    Hive——sql查询
    1.5表生成函数
    可以将单列扩展成多列或者多行,hive主要的内置的表生成函数有:
    Hive——sql查询
    1)explode 函数与ateral view结合使用
    参考:https://blog.csdn.net/guodong2k/article/details/79459282
    1.6其他内置函数
    Hive——sql查询
    Hive——sql查询
    Hive——sql查询
    Hive——sql查询
    Hive——sql查询
    1.7嵌套select
    1.8 case…when…then

2.where语句

2.1谓词操作符
Hive——sql查询
2.2关于浮点数的比较
浮点数比较的一个常见陷阱出现在不同类型间做比较(float 和double比较)
问题产生的原因:当用户写一个浮点数的时候比如0.2,hive会将改值保存为double类型的
规避的办法
1.可以在表模式中定义对应的字段类型为double类型而不是float类型。使得对比的时候二者都是double类型。
2.显示的将变量转换成float类型。用cast操作符。即:cast(0.2 as float)
2.3 like 和rlike
rlike(x|y):表示和x或者y匹配

3.group by 语句

4.having 语句

having语句是产生的分组进行条件过滤的任务

5.Join语句

join优化
1.hive假定查询最后一个表是最大的表,所以将小表放在前面,会优化进程。
2.当连接的时候,以left join 为例,a表和b表连接后的限定条件一样(where a.name=‘小明’,where b.name='小明)则可以简化成一条语句,where a.name=‘小明’。
笛卡尔积join
a*b,笛卡尔积没有on条件
union all
union all 可以将2个或多个表进行合并,但是要求每个表必须有相同的列。

6.关于排序

6.1 order by与sort by
各种排序比较:https://blog.csdn.net/JThink_/article/details/38903775
6.2 含有sort by的distribute by
distribute by相当于先对数据进行分组聚合,然后在对分组的数据,进行组内排序。
所以,
1)distribute by一定要在order by 之前。
2)在distribute by的过程中并没有考虑到组与组之间的排序
6.3 cluster by
cluster by… 等价于distribute by…在order by
但是cluster by…默认降序排列
6.4拓展

RANK() 排序相同时会重复,总数不会变
DENSE_RANK() 排序相同时会重复,总数会减少
ROW_NUMBER() 会根据顺序计算
各种排序比较:
Hive——sql查询

7.类型转换

cast(value as type)

8.抽样查询