Hive之函数篇(使用函数看这篇足够了)

这篇具有很好参考价值的文章主要介绍了Hive之函数篇(使用函数看这篇足够了)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

hive round函数,hive,hive,hadoop,数据仓库

目录

查询函数相关信息:

(1)查看系统所有的内置函数

(2)查看string相关的所有函数

(3)查询某个函数的详细信息

单行函数:

(1)算数运算函数:

(2)数值函数:

(3)字符串函数:

 (4)日期函数:(年月日)

(5)流程控制函数

(6)集合函数:

(7)高级聚合函数

炸裂函数:

(一)explode:(炸裂函数---最常用)

(二)posexplode:

(三) inline函数:

  (四)Lateral View:

 窗口函数:

语法-----窗口----基于行

语法-----窗口----基于值:

语法-----窗口----分区:

 语法-----窗口----缺省:

 窗口函数--跨行取值函数:

(一)lead和lag:

 (二)first_value和last_value

 窗口函数---排名函数:


hive中的函数其实与Java与MySQL中的函数一样,都是内置函数,实现某些功能。

查询函数相关信息:

(1)查看系统所有的内置函数
show functions;
(2)查看string相关的所有函数
show functions like '*string';
(3)查询某个函数的详细信息
desc function extended substring;

单行函数:

单行函数的特点是一进一出,即输入一行,输出一行。

(1)算数运算函数:

        (一)按位与

select 3&2;

 运算思想:   输入的是10进制  底层会把两个数转换成2进制,让后让两个二进制数进行按位与运算,最后的结果再转换成十进制进行输出。

hive round函数,hive,hive,hadoop,数据仓库

(2)数值函数:

        (一)round函数(四舍五入)

 round函数默认是直接四舍五入到整数位,但是可以进行限制保留几位小数

select round(3.345,1);

(3)字符串函数:

        (一)substring函数(字符串截取函数)

hive round函数,hive,hive,hadoop,数据仓库

完整函数有三个参数,参数1:字符串  参数2:从什么位置开始截取(从1开始,正数表示从左往右数数,找到指定位置,负数表示从右往左数数,从-1开始,找到指定位置)参数3:表示截取的字符数,不写默认截取到最后

select substring('facesbook',5);

hive round函数,hive,hive,hadoop,数据仓库

select substring('facesbook',-4);

 hive round函数,hive,hive,hadoop,数据仓库

         (二)replace函数(替换函数)

该函数根据名称便可知道它的功能(替换的是子字符串),参数不再一一解释,运行结果如下:

select replace('xiaotangtongxue','x','X')

 hive round函数,hive,hive,hadoop,数据仓库

 (三)regexp_replace函数(正则替换):

其实就是利用正则表达式进行替换

regexp_replace(string A, string B, string C)

参数一:主要字符串

参数二:正则表达式规则(遇到\要想一想是否使用转义字符)

参数三:替换成的字符串

select regexp_replace("abcd-123-abcd","[0-9]{1,}","&")

(四)regexp(正则匹配):

若字符串符合正则表达式,则返回true,否则返回false。

(同样是匹配有了like为什么还要使用regexp进行匹配那?)

上述是我自己在学习过程中的想法,经过查资料得出结以下结论:

like只是适用于简单的模糊匹配(如以特定字符开头或结尾,或者包含某些固定模式的字符串),

而正则表达式就适合多种复杂形式,更加灵活,如下例情况:

下述这种情况使用like就不是很好进行匹配的了

select 'dfsaaaa1234' regexp "[0-9]{1,}";

hive round函数,hive,hive,hadoop,数据仓库

(五)repeat(重复字符串):

select repeat("123",3);

hive round函数,hive,hive,hadoop,数据仓库

(六)split(分割函数) :

在hive中的切割符号不是一个单纯的符号,而是一个使用正则表达式表示

select split("192.168.10.102","\\.");

hive round函数,hive,hive,hadoop,数据仓库

(七)nvl(A,B)(替换null值)

若A的值不为null,则返回A,否则返回B。 

select nvl(null,0);
select nvl(4,0);

hive round函数,hive,hive,hadoop,数据仓库

(八)concat :拼接字符串 

concat(string A, string B, string C, ……)

将A,B,C……等字符拼接为一个字符串

select concat("1","-","a","b");

hive round函数,hive,hive,hadoop,数据仓库

(九)concat_ws:以指定分隔符拼接字符串或者字符串数组

 concat_ws(string A, string…| array(string))

使用分隔符A拼接多个字符串,或者一个数组的所有元素。

select concat_ws("-","qq","weixin","bb","cc");
select concat_ws("-",array("aa","bb","cc","dd"));

(十)get_json_object:(解析json字符串)

hive round函数,hive,hive,hadoop,数据仓库

函数有两个参数

参数1:传入的是json文件

参数2:传入的是需要查找的位置(加一个$(指代的前边传入的字符串).符号) 

select get_json_object('[{"name":"大海海","sex":"男","age":"25"},{"name":"小宋宋","sex":"男","age":"47"}]','$.[0].name')

hive round函数,hive,hive,hadoop,数据仓库

 (4)日期函数:(年月日)

(一)unix_timestamp:返回当前或指定时间的时间戳

时间戳:我们常说的时间戳是unix时间戳----指从1970年1月1日00:00:00(UTC--世界协调时间,便于统一时区---可以认为是0时区)起算的秒数,它用于表示某个时间点相对于UNIX纪元时间的时间差。UNIX时间戳通常以整数形式表示。

默认是返回的当前时间的时间戳

select unix_timestamp();

获取指定时间的时间戳:

select unix_timestamp('2022/08/08 08-08-08','yyyy/MM/dd HH-mm-ss');

(注意,在给定时间转换成时间戳的时候是按照0时区---unix格式进行转换,并不是按照当地时区)

逗号之前是要获取的时间,逗号之后是你所提供的时间的格式

hive round函数,hive,hive,hadoop,数据仓库

(二)from_unixtime:转化UNIX时间戳(从 1970-01-01 00:00:00 UTC 到指定时间的秒数)到当前时区的时间格式

hive round函数,hive,hive,hadoop,数据仓库

第一个参数为需要转换的时间戳

第二个参数为你需要的特定格式(可以省略)

(三)from_utc_timestamp函数:根据时间戳转换时区

hive round函数,hive,hive,hadoop,数据仓库

第一个参数:

 第一个参数:是传入的整数(单位为毫秒),我们使用的时间戳为秒,s*1000

第二个参数:是传入的字符串,写时区代码

这里需要注意第一个参数传入的时间戳为int   要把时间戳转换成bigint类型,防止溢出

select from_utc_timestamp(cast(1659946088 as bigint)*1000,'GMT+8')

运行结果会有很多后缀0,如果想去掉则需要调用日期格式化函数进行格式化成你规定的格式

(四)select current_date : 查看当前日期(当前时区)

select current_date;

(五)current_timestamp:当前的日期加时间,并且精确的毫秒 (当前时区)

select current_timestamp;

(六)month:获取指定日期中的月份

select month('2022-08-08 08:08:08');

hive round函数,hive,hive,hadoop,数据仓库

(七)day:获取日期中的日

(八)hour:获取日期中的小时

 (九)datediff:两个日期相差的天数(结束日期减去开始日期的天数)

datediff(string enddate, string startdate)

select datediff('2021-08-08','2022-10-09');

(十)date_add:日期加天数

语法:date_add(string startdate, int days)

返回开始日期 startdate 增加 days 天后的日期

select date_add('2022-08-08',2);  

(十一)date_sub:日期减天数

(十二)date_format:将标准日期解析成指定格式字符串 

select date_format('2022-08-08','yyyy年-MM月-dd日')  

hive round函数,hive,hive,hadoop,数据仓库

(5)流程控制函数

(一)case when:条件判断函数

语法一:case when a then b [when c then d]* [else e] end

when后边跟的是一个判断语句

说明:如果a为true,则返回b;如果c为true,则返回d;否则返回 e

select case when 'tan'='tanh' then '棒' when 'xia'='xia' then '棒2' when 'con'='con' then '糖' end

语法二: case a when b then c [when d then e]* [else f] end

说明:如果a等于b,那么返回c;如果a等于d,那么返回e;否则返回f

select case'tan' when 'tanh' then '棒' when 'xia' then '棒2' when 'con' then '糖' else '都不对' end;

hive round函数,hive,hive,hadoop,数据仓库

(二)if: 条件判断,类似于Java中三元运算符 

语法:if(boolean testCondition, T valueTrue, T valueFalseOrNull)

说明:当条件testCondition为true时,返回valueTrue;否则返回valueFalseOrNull

select if(10 > 5,'正确','错误');

(6)集合函数:

(一)size:集合中元素的个数

select size(friends) from test;

(二)map:创建map集合

语法:map (key1, value1, key2, value2, …)

说明:根据输入的key和value对构建map类型

select map('xiaohai',1,'dahai',2); 

hive round函数,hive,hive,hadoop,数据仓库

 (三)map_keys: 返回map中的key

select map_keys(map('xiaohai',1,'dahai',2));

(四)map_values: 返回map中的value

select map_values(map('xiaohai',1,'dahai',2));

(五)array 声明array集合

语法:array(val1, val2, …)

说明:根据输入的参数构建数组array类

 select array('1','2','3','4');

hive round函数,hive,hive,hadoop,数据仓库

 (六)array_contains: 判断array中是否包含某个元素

select array_contains(array('a','b','c','d'),'e');

(七)sort_array:将array中的元素排序

 select sort_array(array('a','d','c'));

(八)struct:声明结构体

根据输入的参数构建结构体struct类

只是声明了一个结构体 

select struct('name','age','weight');

hive round函数,hive,hive,hadoop,数据仓库

 (九)named_struct声明struct的属性和值

select named_struct('name','xiaosong','age',18,'weight',80);

hive round函数,hive,hive,hadoop,数据仓库

(7)高级聚合函数

(一)collect_list :收集并形成list集合,结果不去重

select collect_list(job) from employee

(二)collect_set :收集并形成set集合,结果去重

select collect_set(job) from employee

样例:

每个月的入职人数以及姓名
select month(replace(hiredate,'/','-')) , count(1),collect_list(name) from employee group by month(replace(hiredate,'/','-'));

炸裂函数:

炸裂函数:UDTF:输入一行数据,输出一行或多行数据

注意:(炸裂的类型都是数组--array)

(一)explode:(炸裂函数---最常用)

功能:传入一个数组,它会把数组中的数据进行炸裂成多行

案例一:

select explode(array("1","b","c"))  as itmo

hive round函数,hive,hive,hadoop,数据仓库

案例二:

select explode(`map`("a",1,"b",2)) as (key,value)

 hive round函数,hive,hive,hadoop,数据仓库

(二)posexplode:

 功能:返回两列数据(炸裂的元素和下标)

select posexplode(`array`("a","b","c")) as (pos,item)

hive round函数,hive,hive,hadoop,数据仓库

(三) inline函数:

功能:传入的是结构体类型的数据进行炸裂

select inline(array( named_struct("id",1,"name","zs"),
                      named_struct("id",2,"name","ls"),
                      named_struct("id",3,"name","txc")))
    as (id,name);

hive round函数,hive,hive,hadoop,数据仓库

  (四)Lateral View:

hive round函数,hive,hive,hadoop,数据仓库

炸裂函数一般炸裂一行数据,Lateral View是相当于对每行数据使用炸裂函数让后与源表进行相连,在查询过程中是把他们联合后的虚表当成查询的源表。

hive round函数,hive,hive,hadoop,数据仓库

 参数1介绍:

tmp是一个explode炸裂函数炸裂之后所形成的表的表名

 参数2介绍:

hobby是表示的给tmp表中字段起的字段名,如果有多个就用   ,    隔开

炸裂函数案例:

hive round函数,hive,hive,hadoop,数据仓库

select type,count(1) 
from movie_info  
LATERAL view explode(split(category,','))  tmp 
as type group by type;

 窗口函数:

窗口函数是窗口+函数的结合体,窗口用于定义计算范围,函数是用于定义计算逻辑,对窗口范围中的数据进行计算。

语法:

hive round函数,hive,hive,hadoop,数据仓库

大多数聚合函数能配合窗口函数进行计算(都属于多到一)

窗口的定义有两种:(1)基于行的(行关系)(2)基于值的(值关系)

hive round函数,hive,hive,hadoop,数据仓库

 hive round函数,hive,hive,hadoop,数据仓库

语法-----窗口----基于行

在基于行进行计算的过程中,在使用mapreduce进行计算的过程中会形成切片,得到的窗口,顺序并不一定是原表的顺序,所以在定义窗口范围的时候需要使用order by排序某个字段(在切片的时候就会按照某种顺序进行)

hive round函数,hive,hive,hadoop,数据仓库

语法样例:

hive round函数,hive,hive,hadoop,数据仓库

语法-----窗口----基于值:

hive round函数,hive,hive,hadoop,数据仓库

 基于值的order by的作用是:选择那个字段进行划分

注:(order by在使用preceding与following的时候注意所选的字段为数值类型)

hive round函数,hive,hive,hadoop,数据仓库

语法-----窗口----分区:

分区:定义窗口的时候会指定分区字段,每个分区字段单独划分窗口

hive round函数,hive,hive,hadoop,数据仓库

 partition by就是分区的字段(这个字段的值不同就是不同的分区)

hive round函数,hive,hive,hadoop,数据仓库

 语法-----窗口----缺省:

 这里的缺省主要是针对在使用窗口函数的过程中的关键字的缺省

hive round函数,hive,hive,hadoop,数据仓库

 窗口函数--跨行取值函数:

(一)lead和lag:

功能:获取当前行的上/下边某行,某字段的值

 语法:

hive round函数,hive,hive,hadoop,数据仓库

 注:lag和lead函数不支持自定义窗口(只需要在over中标注需不需要分区,需不需要排序即可)。

 (二)first_value和last_value

功能:获取窗口内的指定列(一列)的第一个值/最后一个值

(都是逐行进行,每行的数据不一定相同,都从第一条数据开始)

语法: 

hive round函数,hive,hive,hadoop,数据仓库

 这两个函数可以自己定义窗口

运行样例结果:

hive round函数,hive,hive,hadoop,数据仓库

 窗口函数---排名函数:

常用的排名函数为:rank 、dense_rank、row_number

上述三种方法在排名规则上略有不同,请看下边样例

功能:计算排名

注:rank 、dense_rank、row_number不支持自定义窗口。

语法: 

hive round函数,hive,hive,hadoop,数据仓库

查询结果:

hive round函数,hive,hive,hadoop,数据仓库文章来源地址https://www.toymoban.com/news/detail-762678.html

到了这里,关于Hive之函数篇(使用函数看这篇足够了)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • hive 函数使用详解

    在任何一种编程语言中,函数可以说是必不可少的,像mysql、oracle中,提供了很多内置函数,或者通过自定义函数的方式进行定制化使用,而hive作为一门数据分析软件,随着版本的不断更新迭代,也陆续出现了很多函数,以满足日常数据查询与分析的各种场景。 Hive内建了不

    2024年02月03日
    浏览(35)
  • hive sql 遇到的一些函数使用

    1. cast(字段 as 需要转化为的类型) 举例:有一个test表,其中有三个字段 test表 id bigint name varchar(256) age int select cast(age as bigint) as col1 from test limit  100; 查询的SQL中使用了cast(age as int)表示我将表中原本类型为int的值转为bigint类型,类似于强制类型转换 注:从Hive0.12.0开始支持va

    2024年01月16日
    浏览(43)
  • hive窗口分析函数使用详解系列一

    Hive的聚合函数衍生的窗口函数在我们进行数据处理和数据分析过程中起到了很大的作用 在Hive中,窗口函数允许你在结果集的行上进行计算,这些计算不会影响你查询的结果集的行数。 Hive提供的窗口和分析函数可以分为聚合函数类窗口函数,分组排序类窗口函数,偏移量计

    2024年04月08日
    浏览(38)
  • 【Hive 01】简介、安装部署、高级函数使用

    Hive是建立在 Hadoop上的数据仓库基础构架,它提供了一系列的工具,可以进行数据提取、转化、加载( ETL ) Hive定义了简单的类SQL查询语言,称为HQL,它允许熟悉SQL的用户直接查询Hadoop中的数据 Hive包含SQL解析引擎,它会将SQL语句转译成MR Job,然后在Hadoop中执行 Hive的数据存储

    2024年02月16日
    浏览(33)
  • hive高频使用的拼接函数及“避坑”

    说到拼接函数应用场景和使用频次还是非常高,比如一个员工在公司充当多个角色,我们在底层存数的时候往往是多行,但是应用的时候我们通常会只需要一行,角色字段进行拼接,这样join其他表的时候呢也不会造成数据被重复引用计算。 从上图中的说明中我们可以看到,

    2024年02月13日
    浏览(64)
  • 用户认证-Kerberos的介绍和使用(Hadoop、Hive、数仓流程、Presto、Kylin集成配置)

    概述 Kerberos是一种计算机网络认证协议,用来在非安全网络中,对个人通信以安全的手段进行 身份认证 , 它允许某实体在非安全网络环境下通信,向另一个实体以一种安全的方式证明自己的身份 。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用

    2024年02月02日
    浏览(53)
  • SQL使用技巧(6)HIVE开窗函数

    开窗函数的使用铁律:不要滥用 先想明白自己要实现什么样的功能,然后再去实践。没有目的的尝试段不可取,会难以理解各开窗函数的真正用法。 如果没有现成可用HIVE库,可以参见本人 大数据单机学习环境搭建 系列文章。 1.1Hive建表 1.2数据准备 1.3保存为HDFS文件 1.4验证

    2024年02月08日
    浏览(57)
  • 【hive】单节点搭建hadoop和hive

    需要使用hive远程debug,尝试使用无hadoop部署hive方式一直失败,无果,还是使用有hadoop方式。最终查看linux内存占用 6GB ,还在后台运行docker的mysql( bitnami/mysql:8.0 ),基本满意。 版本选择: (1)hive2 hadoop2 和hive3和hadoop3需要搭配使用,不能像chd的hive2和hadoop3搭配使用,容易出现

    2024年04月10日
    浏览(38)
  • Hive常见时间日期函数的使用与问题整理

    这里整理一下Hive常见的时间函数和日期函数和用法,作为平时数据处理过程的一个检索和记录。 平时在数据处理过程中,如果不经常使用时间函数,一时间遇到一些时间上的处理,难免会想不起来。 hive本身提供的时间函数已经很丰富了,基本上能满足我们所有的需求,一些

    2024年02月08日
    浏览(45)
  • Linux Vim的使用(超详细,只看这一篇就足够了!)

    开篇先上 vim 键盘神图 1)Vim 中的5种编辑模式 在命令行中执行 vim filename ,若 filename 已存在,则 filename 被打开显示其内容;若 firename 不存在,则Vim在第一次存盘时自动在硬盘上新建filename文件。 vim有5种模式:命令模式、输入模式、末行模式、可视化模式、查询模式。 1.命令

    2024年02月06日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包