Hive函数大全-程序员宅基地

技术标签: hive  数据仓库  # Hadoop生态  hadoop  大数据  

目录

第四章 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   转换的类型)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yezonghui/article/details/121293294

智能推荐

目标检测简介(Object Detection)-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏63次。目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。计算机视觉中关于图像识别有四大类任务:(1)分类-Classification:解决“是什么?”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。(2)定位-Location:解决“在哪里?”的问题,即定位出这个目标的的位置。_object detection

ONVIF协议--ONVIF WS-Discovery (设备发现协议)-程序员宅基地

文章浏览阅读5.4k次,点赞2次,收藏20次。ONVIF Discovery 协议介绍

HDOJ1172解题报告【暴力】-程序员宅基地

文章浏览阅读54次。题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1172题目概述:  对于每组数据,先给出一个n,然后n行每行一个四位数,然后两个数b,c表示与答案有b个数相同,c个数在同一位置上,对于所有的n个给出的四位数,如果推出的答案唯一则输出,否则输出“Not sure”(不含引号)大致思路:  首先我想的是用搜索。穷极一生之力写了100+行的...

数据库视图作用?什么时候用视图?_哪种情况更适合建立视图-程序员宅基地

文章浏览阅读2w次,点赞6次,收藏37次。刚工作时候第一次看到接触到视图,感觉很不能理解,我当时就在想为什么要用视图呢?明明可以关联表查出来数据的,为什么又单独创建一个视图查询数据呢?工作久了我有以下几点心得分享给大家.1.安全性 因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,视图中数据是根据基表的更新而更新,用户不可以更改/删除视图。2.方便,简化数据操作当我们业务需求要查出多张表的数据,这时我们可能会关联多张表查询处理.如..._哪种情况更适合建立视图

Anaconda介绍及常用命令总结_anaconda csdn-程序员宅基地

文章浏览阅读643次,点赞4次,收藏6次。Anaconda的安装及基本概念Anaconda中通过conda进行python包的管理Anaconda中通过conda进行虚拟环境的管理为形成良好的编程习惯,为每一个项目单独创建一个虚拟环境对开发来说至关重要。这一习惯即使对非数据data项目(如Web App)也能十分有效的帮助管理开发环境。_anaconda csdn

第25回 准确报告软件缺陷_描述缺陷发生的可能性的是-程序员宅基地

文章浏览阅读6.4k次。 软件缺陷的描述是是软件缺陷报告的基础部分,也是测试人员就一个软件问题与开发小组交流的最初且最好的机会。一个好的描述,需要使用简单的、准确的、专业的语言来抓住缺陷的本质。否则,它就会使信息含糊不清,可能会误导开发人员。准确报告软件缺陷是非常重要的,因为: 清晰准确的软件缺陷描述可以减少软件缺陷从开发人员返回的数量 提高软件缺陷修复的速度,使每一个小组能够有效的_描述缺陷发生的可能性的是

随便推点

Unity中 Prefab导出FBX_unity fbx exporter-程序员宅基地

文章浏览阅读4.6k次。Unity 已经在Package Manager中集合了很多实用的插件,比如这里用到的FBX Exporter.也可以在你的 Hierarchy窗口中,选择你要到处的Prefab,右击选择Export To FBX...在Unity的菜单中Window ----> Package Manager,打开包管理界面。导出完成后,打开你的的导出目录,就可以看到导出的fbx了。选中你需要导出的文件 ,就可以直接导出FBX文件了,这里注意导出名字和导出路径,和选项里的导出格式。_unity fbx exporter

idea卸载Material Theme UI后有些配置无法恢复的解决_idea material theme ui 卸载-程序员宅基地

文章浏览阅读1.3k次。idea卸载Material Theme UI后,git配色无法恢复。解决办法:一个一个地点回来(restore default)。_idea material theme ui 卸载

android 清楚app缓存数据,android 获取其他应用程序的缓存大小以及清理应用缓存...-程序员宅基地

文章浏览阅读1k次。最近在做appStore时,涉及到一个第三方app下载视频后将车机存储撑爆的问题,从而影响到我们车机自带的app使用,问题很是严重,于是就需要提供缓存清理以及垃圾清理的功能,当用户使用第三方app时,存储空间达到一定量的时候会提示用户去清理,否则不允许使用第三方app。缓存获取获取各个应用程序的缓存大小,可以通过使用PackageManager.getPackageSizeInfo方法来获取,但是..._android packageinstaller缓存数据很大

vue给对象动态添加属性和值_vue3 键值对动态添加与获取-程序员宅基地

文章浏览阅读1.8w次。vue给对象动态添加属性和值一、背景介绍:在vue中请求接口中,一个请求方法可能对应后台两个请求接口,所以请求参数就会有所不同。需要我们先设置共同的参数,然后根据条件动态添加参数属性。二、案例let that = this; let params = { "type":that.addQueTab..._vue3 键值对动态添加与获取

解决keil:error C132: : not in formal parameter list等等突然出现很多很多报错_main.c(34): error c132: 'lcd1602_busycheck': not i-程序员宅基地

文章浏览阅读3.1w次,点赞55次,收藏16次。http://www.51hei.com/bbs/dpj-25003-1.html这里参考了这个帖子,在我身上发生的问题就是我在声明一个函数的时候忘记加分号了,会报错特别多奇奇怪怪的东西,吓死我了。解决办法就是加上分号就好了..._main.c(34): error c132: 'lcd1602_busycheck': not in formal parameter list

android adjustresize 设置大小,Android中adjustResize失效的解决办法之一-程序员宅基地

文章浏览阅读1.2k次。今天帮助哥们解决了一个比较蛋疼的问题,就是在有的情况下会出现设置activity的windowSoftInputMode="adjustResize"时,会失效的情况。历尽千辛万苦,终于在stackflow上找到解决方法。在activity的根布局上添加fitsSystemWindows="true".然后adjustResize就可以成功的起作用了。但是在这种情况下,你的titlebar会下移s..._adjustresize