Hive函数大全

目录

第四章 Hive函数

4.1 聚合函数

4.2 关系函数

4.3 数学运算

4.4 逻辑运算

4.5 数值运算

4.6 条件函数

4.7 日期函数

4.8 字符串函数

4.9 字符串截取函数 

4.10 去空格函数

4.11 正则表达式与解析函数

4.12 explode函数

4.13 行转列与列转行

4.14 基础窗口函数与分析函数

4.14.1 窗口函数简介

4.14.2 窗口的含义

4.14.3 窗口函数分类

4.14.4 窗口函数的使用

4.14.5 窗口函数与group by区别

4.16 高级窗口函数 (todo)

4.17集合操作函数(todo)

4.18类型转换函数


第四章 Hive函数

4.1 聚合函数

        Hive支持count(),max(),min(),avg()等常用的聚合函数。

4.2 关系函数

        支持 =, !=, <>, < , >, <= , >, >=

        空值判断:is null, is not null.

        relike, regexp操作。

4.3 数学运算

        支持所有的数值类型: + , - , * , /, % ,& , | , ^, ~等。

4.4 逻辑运算

        逻辑与: and

        逻辑或: or

        逻辑非: not

4.5 数值运算

  • 取整函数: round()

round(double a)    返回值bigint,返回double类型的整数值部门(遵循四舍五入)

  • 指定精度取整函数

round(double a, int d)  返回值double。返回指定指定精度d的double类型。

  • 向下取整函数

floor(double a )返回等于或者大于该double变量的最小的整数。

  • 向上取整函数

ceil(double  a)   返回等于或者大于该double 变量的最小的整数;

  • 取随机函数

rand(), rand(int  seed):返回一个0到1范围内的随机数。

  • 自然指数函数

exp():  返回自然对数e的a次方。

  • 幂运算函数

pow(double  a, double  p):  返回a的p次幂。

  • 开平方函数

sqrt(double a): 返回a的平方根。

4.6 条件函数

  • if函数

if(boolean  testCondition,T  valueTrue,  T  valueFalseOrNull)

当条件testCondition为True时候,返回valueTrue,否则返回valueFalseOrNull

  • 非空查找函数coalesce

coalesce(T  v1,  T v2,.....) 

返回参数中第一个非空值,如果所有值都为null,那么返回Null。

  • 条件判断函数case when

case when写法一:

case sex 

        when   ‘1’    then   ‘男’

        when   ‘2’    then   ‘女’

else   ‘其他’  end

case when写法二:

case when sex = ‘1’  then  ‘男’

         when sex = ‘2’  then  ‘女’

else   ‘其他’  end

4.7 日期函数

1.unix_timestamp函数的三种情况:

  • 获取当前时间戳函数:  unix_timestamp

            语法:unix_timestamp();     

            返回值:bigint ,获得当前时区的unix时间戳

            样例:select  unix_timestamp()  from  table;

  • 日期转unix时间戳函数:unit_timestamp

            语法:unix_timestamp(String  date)

            返回值:bigint

            说明:将格式为”yyyy-MM-dd HH:ss”的日期转换到unix时间戳,如果转换失败,则返回0.

  • 将指定格式日期转unix时间戳函数:unix_timestamp() 

语法:unix_timestamp(string date, string pattern)

返回值:bigint

说明:转换pattern格式日期到unix时间戳。如果转化失败,则返回0.

样例:select  unix_timestamp(‘2021-03-08 14:21:11’,’yyyy-MM-dd HH:mm:ss’) from table

2.unit时间戳转日期函数: from_unixtime

  • from_unixtime()

            语法:from_unixtime(bigint  unixtime)

            返回值:string

            说明:把具体的秒转化为时间日期。

3.获取当前的时间精确到毫秒

  • current_timestamp()

            样例:select current_timestamp()  -- 2011-09-02 10:11:09.234212000

4.日期时间转日期函数:to_date

  • 年月日时分秒只取其中的年月日部分:to_date()

            语法:to_date(string  timestamp)

            返回值:string   返回日期时间部分的日期。

            样例:select  to_date(‘2021-09-02 12:09:09’) from table

5.日期转年/月/日/小时/分钟/秒/周函数

  • 日期转年函数year()

语法:year(String date)

返回值:int   返回日期中的年

样例:select  year(‘2021-03-21 10:11:02’) from table

  • 日期转月函数mounth

            返回日期中的月

  • 日期转天函数day

返回日期中的天

  • 日期转小时函数:hour

返回日期中小时函数

  • 日期转分钟函数minute

            返回日期中的分钟

  • 日期转秒函数second

            返回日期中的秒

  • 日期转周函数 weekofyear

            weekofyear(string  date)

            返回值为int,返回日期在当前的周数

6.日期操作函数

  • 日期比较函数:datediff

            语法:datediff(string   enddate, string  startdate)

            返回值:int  返回结束日期减去开始日期

  • 日期增加函数 :date_add

语法:date_add(string startdate, int days)

返回值string,返回开始日期startdate增加days天的日期。

  • 日期减少函数 date_sub

            语法:date_sub(string startdate, int days)

            返回值:string. 返回开始日期startdate减少days天后的日期。

4.8 字符串函数

  • 字符串长度函数: length()

            length(string a): 返回字符串a的长度

  • 字符串反转函数:reverse

            reverse(string  a) :返回字符串a的反转结果

  • 字符串连接函数

            不带分隔符的字符串连接函数concat()

                    语法:concat(string A, string B,........)

                    返回输入字符串连接后的结果,支持任意个输入字符串

            带分隔符字符串连接函数 concat_ws()

                    concat_ws(String SEP, string a, string b)

                    返回输入字符串连接后的结果,sep表示各个字符串之间的分隔符。

4.9 字符串截取函数 

  • substr(string a, int start, int len)

            返回字符串a从start位置开始,长度为len的字符串。

  • substring(string a, int start, int len)

返回字符串a从start位置开始,长度为len的字符串。

  • 字符串分割函数:split

 语法:split(string  str, string pat) 

4.10 去空格函数

  • 去空格函数trim

             去掉字符串两边的空格

  • 左边去空格ltrim

            ltrim(string  a) 去掉字符串左边的空格。

  • 右边去空格函数

rtrim(string a)去掉字符串右边的空格。

4.11 正则表达式与解析函数

  • 正则表达式替换函数regexp_replace(string a, string b, string c)

            将字符串a中符合java正则表达式b的部分替换为c.注意在有些情况下需要使用转义字符.    
            样例:select  regexp_replace(‘foobar’, ‘oo|ar’ , ‘’) from table_Name;

  • 正则表达式解析函数:regexp_extract(string subject, string pattern, int index)

            样例:select  regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 1) from tableName; 

             将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。

  • url解析函数: parse_url

样例:parse_url(string  urlString, string  partToExtract  [,  string  keyToExtract] )

说明:返回url中指定的部分。

  • json解析:get_json_object()

            语法:get_json_object(string  json_string, string  path)

            样例:select  get_json_object(‘{......}’, ‘$.owner’)  from  tableName;

4.12 explode函数

    todo:结合百度需求进行总结

4.13 行转列与列转行

1.行转列

  • concat(string a/col, string b/col,.....):返回输入字符串连接后的结果,支持任意个输入字符串。

  • concat_ws(separator, str1, str2,....):它是一个特殊形式的concat

  • collect_set(col):将某字段的值进行去重汇总,产生array类型字段。

2.列转行

  • explode(col)

           将hive一列中复杂的array或者map结构拆成多行。可以结合lateral view进行使用。

4.14 基础窗口函数与分析函数

4.14.1 窗口函数简介

        在sql中有一类函数叫做聚合函数,例如sum(), avg(),max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲,聚集后的行数是要少于聚集前的行数的。但是有时候我们既想要显示聚集前的数据,又要显示聚集后的函数,这个时候,我们便引入了窗口函数。窗口函数又叫OLAP函数/分析函数.

        窗口函数最重要的关键字是partition by和 order by.具体语法是:over(partition  by  用于分组的列名  order  by  用于排序的列名)。

4.14.2 窗口的含义

1)如果不指定rows between,默认为从起点到当前行;

2)如果不指定order by,则将分组内所有值累加;

3)理解rows between的含义,也叫window子句:

          preceding:往前;

          following:往后;

          current row: 当前行;

          unbounded:起点;

          unbounded  preceding : 表示从前面的起点;

          unbounded  following : 表示到后面的终点;

4.14.3 窗口函数分类

1)专用窗口函数:包括dense_rank(),rank(),row_number()等。

2)聚合函数:例如sum(), avg(),max(),min(),count().

样例1:

select   *,
       

sum(play_rate) over(order by user_id),
       

avg(play_rate) over(order by user_id),
       

max(play_rate) over(order by user_id),
       

min(play_rate) over(order by user_id),
       

count(play_rate) over(order by user_id)


from haokan_ads_test02;

样例1测试结果:

样例1分析:

    聚合函数在窗口函数中,是对自身记录及位于自身记录以上的数据进行求和的结果。eg:user_id为4的时候,在使用sum()窗口函数后的结果,是对1,2,3,4号deplat_rate求和。

注意1:可以注意到专用窗口函数括号里面是空的,什么也没有写,但是聚合函数后面括号不能为空,需要指定聚合的列名。

注意2:因为窗口函数是对where或者group by子句处理后的结果进行的操作,所以窗口函数原则上只能写在select子句中。

注意3:聚合函数对应的窗口函数都是对自身记录,以及自身记录之上的所有数据进行计算。如果想看所有人的聚合情况,我们直接看输出结果的最后一行即可。

4.14.4 窗口函数的使用

1)为什么叫窗口函数:这是因为partition by分组以后的结果叫做窗口,这里的窗口是范围的意思。窗口函数同时具有分组和排序的功能;不减少原有表的行数

2)带partition by使用区别:

      窗口函数中的partition by子句可以省去,但是此时就失去了分组的功能。

      窗口函数一般用于排名问题和top-N问题。

3)dense_rank(),rank(),row_number()区别

  • DENSE_RANK() :排序相同时,会重复、总数会减少。1,1,2

  • Rank()  :排序相同时,会重复,但是总数不会变。 1,1,3

  • ROW_NUMBER(): 会根据顺序计算。1,2,3

4.14.5 窗口函数与group by区别

         group by分组汇总会改变行数(默认返回每组中的第一行);而窗口函数不会减少原表中的行数。

4.16 高级窗口函数 (todo)

ntile;

lag:

     lag(col,n,default)用于统计窗口内往上第n行值;第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为null时候,取默认值,如果不指定,则为null)

lead:

        与lag相反。lead(col,n, default)用于统计窗口内往下第n行值。第一个参数为列名,第二个参数为往下第n行,第三个参数为默认值。

first_value

        取分组内排序后,截止到当前行,第一个值。

last_value:

         取分组内排序后,截止到当前行,最后一个值。

4.17集合操作函数(todo)

grouping  sets

grouping_id

cube

rollup

4.18类型转换函数

    cast (字段名  as   转换的类型)

  • 9
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、关系运算: 4 1. 等值比较: = 4 2. 不等值比较: 4 3. 小于比较: < 4 4. 小于等于比较: 5 6. 大于等于比较: >= 5 7. 空值判断: IS NULL 5 8. 非空判断: IS NOT NULL 6 9. LIKE比较: LIKE 6 10. JAVA的LIKE操作: RLIKE 6 11. REGEXP操作: REGEXP 7 二、数学运算: 7 1. 加法操作: + 7 2. 减法操作: - 7 3. 乘法操作: * 8 4. 除法操作: / 8 5. 取余操作: % 8 6. 位与操作: & 9 7. 位或操作: | 9 8. 位异或操作: ^ 9 9.位取反操作: ~ 10 三、逻辑运算: 10 1. 逻辑与操作: AND 10 2. 逻辑或操作: OR 10 3. 逻辑非操作: NOT 10 四、数值计算 11 1. 取整函数: round 11 2. 指定精度取整函数: round 11 3. 向下取整函数: floor 11 4. 向上取整函数: ceil 12 5. 向上取整函数: ceiling 12 6. 取随机数函数: rand 12 7. 自然指数函数: exp 13 8. 以10为底对数函数: log10 13 9. 以2为底对数函数: log2 13 10. 对数函数: log 13 11. 幂运算函数: pow 14 12. 幂运算函数: power 14 13. 开平方函数: sqrt 14 14. 二进制函数: bin 14 15. 十六进制函数: hex 15 16. 反转十六进制函数: unhex 15 17. 进制转换函数: conv 15 18. 绝对值函数: abs 16 19. 正取余函数: pmod 16 20. 正弦函数: sin 16 21. 反正弦函数: asin 16 22. 余弦函数: cos 17 23. 反余弦函数: acos 17 24. positive函数: positive 17 25. negative函数: negative 17 五、日期函数 18 1. UNIX时间戳转日期函数: from_unixtime 18 2. 获取当前UNIX时间戳函数: unix_timestamp 18 3. 日期转UNIX时间戳函数: unix_timestamp 18 4. 指定格式日期转UNIX时间戳函数: unix_timestamp 18 5. 日期时间转日期函数: to_date 19 6. 日期转年函数: year 19 7. 日期转月函数: month 19 8. 日期转天函数: day 19 9. 日期转小时函数: hour 20 10. 日期转分钟函数: minute 20 11. 日期转秒函数: second 20 12. 日期转周函数: weekofyear 20 13. 日期比较函数: datediff 21 14. 日期增加函数: date_add 21 15. 日期减少函数: date_sub 21 六、条件函数 21 1. If函数: if 21 2. 非空查找函数: COALESCE 22 3. 条件判断函数:CASE 22 4. 条件判断函数:CASE 22 七、字符串函数 23 1. 字符串长度函数:length 23 2. 字符串反转函数:reverse 23 3. 字符串连接函数:concat 23 4. 带分隔符字符串连接函数:concat_ws 23 5. 字符串截取函数:substr,substring 24 6. 字符串截取函数:substr,substring 24 7. 字符串转大写函数:upper,ucase 24 8. 字符串转小写函数:lower,lcase 25 9. 去空格函数:trim 25 10. 左边去空格函数:ltrim 25 11. 右边去空格函数:rtrim 25 12. 正则表达式替换函数:regexp_replace 26 13. 正则表达式解析函数:regexp_extract 26 14. URL解析函数:parse_url 26 15. json解析函数:get_json_object 27 16. 空格字符串函数:space 27 17. 重复字符串函数:repeat 27 18. 首字符ascii函数:ascii 28 19. 左补足函数:lpad 28 20. 右补足函数:rpad 28 21. 分割字符串函数: split 28 22. 集合查找函数: find_in_set 29 八、集合统计函数 29 1. 个数统计函数: count 29 2. 总和统计函数: sum 29 3. 平均值统计函数: avg 30 4. 最小值统计函数: min 30 5. 最大值统计函数: max 30 6. 非空集合总体变量函数: var_pop 30 7. 非空集合样本变量函数: var_samp 31 8. 总体标准偏离函数: stddev_pop 31 9. 样本标准偏离函数: stddev_samp 31 10.中位数函数: percentile 31 11. 中位数函数: percentile 31 12. 近似中位数函数: percentile_approx 32 13. 近似中位数函数: percentile_approx 32 14. 直方图: histogram_numeric 32 九、复合类型构建操作 32 1. Map类型构建: map 32 2. Struct类型构建: struct 33 3. array类型构建: array 33 十、复杂类型访问操作 33 1. array类型访问: A[n] 33 2. map类型访问: M[key] 34 3. struct类型访问: S.x 34 十一、复杂类型长度统计函数 34 1. Map类型长度函数: size(Map) 34 2. array类型长度函数: size(Array) 34 3. 类型转换函数 35

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值