一、hive中的内置函数根据应用归类整体可以分为8大种类型。

1、 String Functions 字符串函数 主要针对字符串数据类型进行操作,比如下面这些:

字符串长度函数:length

•字符串反转函数:reverse

•字符串连接函数:concat

•带分隔符字符串连接函数:concat_ws

•字符串截取函数:substr,substring

•字符串转大写函数:upper,ucase

•字符串转小写函数:lower,lcase

•去空格函数:trim

•左边去空格函数:ltrim

•右边去空格函数:rtrim

•正则表达式替换函数:regexp_replace

•正则表达式解析函数:regexp_extract

•URL解析函数:parse_url

•json解析函数:get_json_object

•空格字符串函数:space

•重复字符串函数:repeat

•首字符ascii函数:ascii

•左补足函数:lpad

•右补足函数:rpad

•分割字符串函数: split

•集合查找函数: find_in_set

【案例演示】

select length(“maxwell”); 获取字符串maxwell的长度

select reverse(“maxwell”); 字符串反转函数reverse

–字符串连接函数:concat(str1, str2, … strN) select concat(“max”,“well”); 输出结果为maxwell

–带分隔符字符串连接函数:concat_ws(separator, [string | array(string)]+) select concat_ws(‘.’, ‘www’, array(‘baidu’, ‘com’)); 输出结果为www.baidu.com

–字符串截取函数:substr(str, pos[, len]) 或者 substring(str, pos[, len]) select substr(“maxwell”,-2); --pos是从1开始的索引,如果为负数则倒着数 select substr(“maxwell”,2,2);

2、日期函数

主要针对时间、日期数据类型进行操作 •获取当前日期: current_date •获取当前时间戳: current_timestamp •UNIX时间戳转日期函数: from_unixtime •获取当前UNIX时间戳函数: unix_timestamp •日期转UNIX时间戳函数: unix_timestamp •指定格式日期转UNIX时间戳函数: unix_timestamp •抽取日期函数: to_date •日期转年函数: year •日期转月函数: month •日期转天函数: day •日期转小时函数: hour •日期转分钟函数: minute •日期转秒函数: second •日期转周函数: weekofyear •日期比较函数: datediff •日期增加函数: date_add •日期减少函数: date_sub

–获取当前日期: current_date select current_date();

–获取当前时间戳: current_timestamp –同一查询中对current_timestamp的所有调用均返回相同的值。 select current_timestamp();

–获取当前UNIX时间戳函数: unix_timestamp select unix_timestamp();

3、Mathematical Functions数学函数

•取整函数: round •指定精度取整函数: round •向下取整函数: floor •向上取整函数: ceil •取随机数函数: rand •二进制函数: bin •进制转换函数: conv •绝对值函数: abs

–取整函数: round 返回double类型的整数值部分 (遵循四舍五入) select round(3.1415926);

–指定精度取整函数: round(double a, int d) 返回指定精度d的double类型 select round(3.1415926,4);

–向下取整函数: floor select floor(3.1415926); select floor(-3.1415926);

–向上取整函数: ceil select ceil(3.1415926); select ceil(-3.1415926);

–取随机数函数: rand 每次执行都不一样 返回一个0到1范围内的随机数 select rand();

–指定种子取随机数函数: rand(int seed) 得到一个稳定的随机数序列 select rand(2);

4、Collection Functions集合函数 •集合元素size函数: size(Map) size(Array) •取map集合keys函数: map_keys(Map) •取map集合values函数: map_values(Map) •判断数组是否包含指定元素: array_contains(Array, value) •数组排序函数:sort_array(Array)

–集合元素size函数: size(Map) size(Array) 查看集合中size select size(array(11,22,33)); select size(map(“id”,10010,“name”,“zhangsan”,“age”,18));

–取map集合keys函数: map_keys(Map) select map_keys(map(“id”,10086,“name”,“zhangsan”,“age”,18));

–取map集合values函数: map_values(Map) select map_values(map(“id”,10086,“name”,“zhangsan”,“age”,18));

–判断数组是否包含指定元素: array_contains(Array, value) select array_contains(array(11,22,33),11); select array_contains(array(11,22,33),66);

5、 Conditional Functions 条件函数 主要用于条件判断、逻辑判断转换这样的场合 •if条件判断: if(boolean testCondition, T valueTrue, T valueFalseOrNull) •空判断函数: isnull( a ) •非空判断函数: isnotnull ( a ) •空值转换函数: nvl(T value, T default_value)

•非空查找函数: COALESCE(T v1, T v2, …) •条件转换函数: CASE a WHEN b THEN c [WHEN d THEN e] [ELSE f] END*

其中if条件判断函数和case函数和java中的if else道理一样,开发中if函数更方便

–if条件判断: if(boolean testCondition, T valueTrue, T valueFalseOrNull) select if(1=2,100,200); select if(sex =‘男’,‘M’,‘W’) from student limit 3; 总结:if中的参数和三元运算符的逻辑一样 ,条件,值1,值2。条件true则返回值1,条件为false,则返回值2

–空值转换函数: nvl(T value, T default_value) select nvl(“helloworld”,“maxwell”); nvl(值1,值2) 值1为null则返回值值2 ,值1不为null则返回值1 select nvl(null,“maxwell”);

6、Type Conversion Functions 类型转换函数 •任意数据类型之间转换:cast –任意数据类型之间转换:cast select cast(12.14 as bigint); select cast(12.14 as string);

7、 Data Masking Functions 数据脱敏函数 –mask –将查询回的数据,大写字母转换为X,小写字母转换为x,数字转换为n。 select mask(“abc123DEF”); select mask(“abc123DEF”,‘-’,‘.’,‘^’); --自定义替换的字母

–mask_first_n(string str[, int n] –对前n个进行脱敏替换 select mask_first_n(“abc123DEF”,4);

–mask_last_n(string str[, int n]) select mask_last_n(“abc123DEF”,4);

–mask_show_first_n(string str[, int n]) –除了前n个字符,其余进行掩码处理 select mask_show_first_n(“abc123DEF”,4);

–mask_show_last_n(string str[, int n]) select mask_show_last_n(“abc123DEF”,4);

–mask_hash(string|char|varchar str) –返回字符串的hash编码。 select mask_hash(“abc123DEF”);

总结:在处理用户的敏感信息,如身份证号码,手机号码,地址等敏感信息时,可以采用脱敏函数

8、Misc. Functions 其他杂项函数 •hive调用java方法: java_method(class, method[, arg1[, arg2…]]) •反射函数: reflect(class, method[, arg1[, arg2…]]) •取哈希值函数:hash •current_user()、logged_in_user()、current_database()、version() •SHA-1加密: sha1(string/binary) •SHA-2家族算法加密:sha2(string/binary, int) (SHA-224, SHA-256, SHA-384, SHA-512) •crc32加密: •MD5加密: md5(string/binary)

–hive调用java方法: java_method(class, method[, arg1[, arg2…]]) select java_method(“java.lang.Math”,“max”,11,22);

–反射函数: reflect(class, method[, arg1[, arg2…]]) select reflect(“java.lang.Math”,“max”,11,22);

–取哈希值函数:hash select hash(“allen”);

–current_user()、logged_in_user()、current_database()、version()

–SHA-1加密: sha1(string/binary) select sha1(“allen”);

–SHA-2家族算法加密:sha2(string/binary, int) (SHA-224, SHA-256, SHA-384, SHA-512) select sha2(“allen”,224); select sha2(“allen”,512);

–crc32加密: select crc32(“allen”);

–MD5加密: md5(string/binary) select md5(“allen”);

二、用户自定义函数

1、UDF普通函数 特点是一进一出,也就是输入一行输出一行。比如round这样的取整函数,接收一行数据,输出的还是一行数据。

2、UDAF函数 A所代表的单词就是Aggregation聚合的意思。其最大的特点是多进一出,也就是输入多行输出一行。比如count、sum这样的函数。 •count:统计检索到的总行数。 •sum:求和 •avg:求平均 •min:最小值 •max:最大值 •数据收集函数(去重): collect_set(col) •数据收集函数(不去重): collect_list(col)

select collect_set(sex) from student; sex为student表中的字段名 select collect_list(sex) from student;

**3、**UDTF函数通常把它叫做表生成函数,T所代表的单词是Table-Generating表生成的意思。最大的特点是一进多出,也就是输入一行输出多行。比如explode函数 explode函数接收map或者array类型的数据作为参数,然后把参数中的每个元素炸开变成一行数据。一个元素一行。这样的效果正好满足于输入一行输出多行。

explode(array)将array列表里的每个元素生成一行; explode(map)将map里的每一对元素作为一行,其中key为一列,value为一列; 一般情况下,explode函数可以直接使用即可,也可以根据需要结合lateral view侧视图使用。

select explode(array(11,22,33)) as item;

select explode(map(“id”,10086,“name”,“zhangsan”,“age”,18));

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: