常用日期函数
1.unix_timestamp:返回当前或指定时间的时间戳
2.from_unixtime:将时间戳转为日期格式
3.current_date:当前日期
4.current_timestamp:当前的日期加时间
5.to_date:抽取日期部分
6.year:获取年
7.month:获取月
8.day:获取日
9.hour:获取时
10.minute:获取分
11.second:获取秒
12.weekofyear:当前时间是一年中的第几周
13.dayofmonth:当前时间是一个月中的第几天
14.months_between: 两个日期间的月份
15.add_months:日期加减月
16.datediff:两个日期相差的天数
17.date_add:日期加天数
18.date_sub:日期减天数
19.last_day:日期的当月的最后一天
20.date_format(‘2019-10-10’ ,‘yyyy-MM’):对应日期格式转换
21.next_day('2019-12-10','MO') 获取下一个周一的日期
22.select last_day('2019-02-10'); 求当月最后一天日期
常用开窗函数
row_number、rank、dense_rank、sum配合over()使用
如:row_number() over(partition by user_id order by createTime) rowNumber
sum(count) over(partition by userId order by visitDate)
常用取整函数
1.round: 四舍五入
2.ceil: 向上取整
3.floor: 向下取整
常用字符串操作函数
1.upper: 转大写
2.lower: 转小写
3.length: 长度
4.trim: 前后去空格
5.lpad: 向左补齐,到指定长度
6.rpad: 向右补齐,到指定长度
7.regexp_replace: regexp_replace(visitDate,’/’,’-’) :字符串替换。亦可以使用正则表达式匹配目标字符串进行对应替换
集合操作
1.size: 集合中元素的个数
2.map_keys: 返回map中的key
3.map_values: 返回map中的value
4.array_contains: 判断array中是否包含某个元素
5.sort_array: 将array中的元素排序
关于分区
1.Sort By:分区内有序;
2.Order By:全局排序,只有一个Reducer;
3.Distribute by :类似MR中Partition,进行分区,结合sort by使用。
4.Cluster By:当Distribute by和Sorts by字段相同时,可以使用Cluster by方式。Cluster by除了具有Distribute by的功能外还兼具Sort by的功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC。
窗口函数
1.OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化。常用partition by 分区order by排序。
2.CURRENT ROW:当前行
3.n PRECEDING:往前n行数据
4.n FOLLOWING:往后n行数据
5.UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点, UNBOUNDED FOLLOWING表示到后面的终点
6.LAG(col,n):往前第n行数据
7.LEAD(col,n):往后第n行数据
8.NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE返回此行所属的组的编号;可用以求取前N%的问题。注意:n必须为int类型。
示例(求消费额amount前10%的相关数据):
select user_id,
amount,
ntc
from
( select user_id,
amount,
ntile(10) over( order by amount) ntc
from order_tab)t2
where ntc=1;
排序函数:
1.RANK() 排序相同时会重复,总数不会变
2.DENSE_RANK() 排序相同时会重复,总数会减少
3.ROW_NUMBER() 会根据顺序计算
基本函数
count、max、sum、avg
limit:返回行数限定,如select *from stu limit 5;
nvl(comm,0):给值为NULL的数据赋值,它的格式是NVL( string1, replace_with)。它的功能是如果string1为NULL,
则NVL函数返回replace_with的值,否则返回string1的值.
NVL2函数的格式如下:NVL2(expr1,expr2, expr3)
含义是:如果该函数的第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第三个参数的值。
行转列
CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串;
CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间;
CONCAT_WS must be "string or array
COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。
示例:concat_ws(',',collect_list(cast(userid as String))) userids
列转行
EXPLODE(col):将hive一列中复杂的array或者map结构拆分成多行。
LATERAL VIEW
用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解释:用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。
示例:
select
movie,
category_name
from
movie_info lateral view explode(category) table_tmp as category_name;
判断
CASE WHEN THEN ELSE END ,if
示例:select deptid, sum( case sex when '男' then 1 else 0 end) male_count from empt group by deptid;
select deptid ,sum( if(sex='男',1,0)) male_count from empt group by deptid;