• Hive内置函数字典


    写在前面:HQL同SQL有很多的类似语法,同学熟悉SQL后一般学习起来非常轻松,写一篇文章列举常用函数,方便查找和学习。

    1. 执行模式

    1.1 Batch Mode 批处理模式

    当使用-e或-f选项运行$ HIVE_HOME / bin / hive时,它将以批处理模式执行SQL命令。所谓的批处理可以理解为一次性执行,执行完毕退出

    1. #-e
    2. $HIVE_HOME/bin/hive -e 'show databases'
    3. #-f
    4. #执行 从客户端所在机器的本地磁盘加载文件
    5. $HIVE_HOME/bin/hive -f /root/createtable.sql

    1.2 Interactive Shell 交互式模式

    交互式模式可以理解为客户端和hive服务一直保持连接

    1. #--service
    2. $HIVE_HOME/bin/hive --service metastore
    3. $HIVE_HOME/bin/hive --service hiveserver2

    $HIVE_HOME/bin/beeline被称之为第二代客户端或者新客户端,是一个JDBC客户端,是官方强烈推荐使用的Hive命令行工具,和第一代客户端相比,性能加强安全性提高。Beeline在嵌入式模式和远程模式下均可工作。

    1. # /export/server/hive/bin/beeline
    2. beeline> ! connect jdbc:hive2://node1:10000

    2. 函数概述

            如同RDBMS中标准SQL语法一样,Hive SQL也内建了不少函数,满足于用户在不同场合下的数据分析需求,提高开发SQL数据分析的效率。

            可以使用show functions查看当下版本支持的函数,并且可以通过describe function extended funcname来查看函数的使用方式和方法。

    1. show functions
    2. describe function extended funcname

    3. 函数分类

    Hive的函数很多,除了自己内置所支持的函数之外,还支持用户自己定义开发函数。

    针对内置的函数,可以根据函数的应用类型进行归纳分类,比如:数值类型函数、日期类型函数、字符串类型函数、集合函数、条件函数等;

    针对用户自定义函数,可以根据函数的输入输出行数进行分类,比如:UDF、UDAF、UDTF。

    3.1 内置函数

    官方文档地址:LanguageManual UDF - Apache Hive - Apache Software Foundation

    内置函数根据应用归类整体可以分为以下8大种类型:字符串函数、日期函数、数学函数、集合函数、条件函数、类型转换函数、数据脱敏函数、其他函数

    3.1.1 String Functions字符串函数

    主要针对字符串数据类型进行操作

    1. •字符串长度函数:length
    2. •字符串反转函数:reverse
    3. •字符串连接函数:concat
    4. •带分隔符字符串连接函数:concat_ws
    5. •字符串截取函数:substr,substring
    6. •字符串转大写函数:upper,ucase
    7. •字符串转小写函数:lower,lcase
    8. •去空格函数:trim
    9. •左边去空格函数:ltrim
    10. •右边去空格函数:rtrim
    11. •正则表达式替换函数:regexp_replace
    12. •正则表达式解析函数:regexp_extract
    13. •URL解析函数:parse_url
    14. •json解析函数:get_json_object
    15. •空格字符串函数:space
    16. •重复字符串函数:repeat
    17. •首字符ascii函数:ascii
    18. •左补足函数:lpad
    19. •右补足函数:rpad
    20. •分割字符串函数: split
    21. •集合查找函数: find_in_set

    示例如下:

    1. ------------String Functions 字符串函数------------
    2. describe function extended find_in_set;
    3. --字符串长度函数:length(str | binary)
    4. select length("angelababy");
    5. --字符串反转函数:reverse
    6. select reverse("angelababy");
    7. --字符串连接函数:concat(str1, str2, ... strN)
    8. select concat("angela","baby");
    9. --带分隔符字符串连接函数:concat_ws(separator, [string | array(string)]+)
    10. select concat_ws('.', 'www', array('itcast', 'cn'));
    11. --字符串截取函数:substr(str, pos[, len]) 或者 substring(str, pos[, len])
    12. select substr("angelababy",-2); --pos是从1开始的索引,如果为负数则倒着数
    13. select substr("angelababy",2,2);
    14. --字符串转大写函数:upper,ucase
    15. select upper("angelababy");
    16. select ucase("angelababy");
    17. --字符串转小写函数:lower,lcase
    18. select lower("ANGELABABY");
    19. select lcase("ANGELABABY");
    20. --去空格函数:trim 去除左右两边的空格
    21. select trim(" angelababy ");
    22. --左边去空格函数:ltrim
    23. select ltrim(" angelababy ");
    24. --右边去空格函数:rtrim
    25. select rtrim(" angelababy ");
    26. --正则表达式替换函数:regexp_replace(str, regexp, rep)
    27. select regexp_replace('100-200', '(\\d+)', 'num');
    28. --正则表达式解析函数:regexp_extract(str, regexp[, idx]) 提取正则匹配到的指定组内容
    29. select regexp_extract('100-200', '(\\d+)-(\\d+)', 2);
    30. --URL解析函数:parse_url 注意要想一次解析出多个 可以使用parse_url_tuple这个UDTF函数
    31. select parse_url('http://www.itcast.cn/path/p1.php?query=1', 'HOST');
    32. --json解析函数:get_json_object
    33. --空格字符串函数:space(n) 返回指定个数空格
    34. select space(4);
    35. --重复字符串函数:repeat(str, n) 重复str字符串n次
    36. select repeat("angela",2);
    37. --首字符ascii函数:ascii
    38. select ascii("angela"); --a对应ASCII 97
    39. --左补足函数:lpad
    40. select lpad('hi', 5, '??'); --???hi
    41. select lpad('hi', 1, '??'); --h
    42. --右补足函数:rpad
    43. select rpad('hi', 5, '??');
    44. --分割字符串函数: split(str, regex)
    45. select split('apache hive', '\\s+');
    46. --集合查找函数: find_in_set(str,str_array)
    47. select find_in_set('a','abc,b,ab,c,def');
    3.1.2 Date Functions日期函数

    主要针对时间、日期数据类型进行操作

    1. •获取当前日期: current_date
    2. •获取当前时间戳: current_timestamp
    3. •UNIX时间戳转日期函数: from_unixtime
    4. •获取当前UNIX时间戳函数: unix_timestamp
    5. •日期转UNIX时间戳函数: unix_timestamp
    6. •指定格式日期转UNIX时间戳函数: unix_timestamp
    7. •抽取日期函数: to_date
    8. •日期转年函数: year
    9. •日期转月函数: month
    10. •日期转天函数: day
    11. •日期转小时函数: hour
    12. •日期转分钟函数: minute
    13. •日期转秒函数: second
    14. •日期转周函数: weekofyear
    15. •日期比较函数: datediff
    16. •日期增加函数: date_add
    17. •日期减少函数: date_sub

    示例如下:

    1. --获取当前日期: current_date
    2. select current_date();
    3. --获取当前时间戳: current_timestamp
    4. --同一查询中对current_timestamp的所有调用均返回相同的值。
    5. select current_timestamp();
    6. --获取当前UNIX时间戳函数: unix_timestamp
    7. select unix_timestamp();
    8. --UNIX时间戳转日期函数: from_unixtime
    9. select from_unixtime(1618238391);
    10. select from_unixtime(0, 'yyyy-MM-dd HH:mm:ss');
    11. --日期转UNIX时间戳函数: unix_timestamp
    12. select unix_timestamp("2011-12-07 13:01:03");
    13. --指定格式日期转UNIX时间戳函数: unix_timestamp
    14. select unix_timestamp('20111207 13:01:03','yyyyMMdd HH:mm:ss');
    15. --抽取日期函数: to_date
    16. select to_date('2009-07-30 04:17:52');
    17. --日期转年函数: year
    18. select year('2009-07-30 04:17:52');
    19. --日期转月函数: month
    20. select month('2009-07-30 04:17:52');
    21. --日期转天函数: day
    22. select day('2009-07-30 04:17:52');
    23. --日期转小时函数: hour
    24. select hour('2009-07-30 04:17:52');
    25. --日期转分钟函数: minute
    26. select minute('2009-07-30 04:17:52');
    27. --日期转秒函数: second
    28. select second('2009-07-30 04:17:52');
    29. --日期转周函数: weekofyear 返回指定日期所示年份第几周
    30. select weekofyear('2009-07-30 04:17:52');
    31. --日期比较函数: datediff 日期格式要求'yyyy-MM-dd HH:mm:ss' or 'yyyy-MM-dd'
    32. select datediff('2012-12-08','2012-05-09');
    33. --日期增加函数: date_add
    34. select date_add('2012-02-28',10);
    35. --日期减少函数: date_sub
    36. select date_sub('2012-01-1',10);
    3.1.3 Mathematical Functions数据函数

    主要针对数值类型的数据进行数学计算

    1. •取整函数: round
    2. •指定精度取整函数: round
    3. •向下取整函数: floor
    4. •向上取整函数: ceil
    5. •取随机数函数: rand
    6. •二进制函数: bin
    7. •进制转换函数: conv
    8. •绝对值函数: abs

    示例如下:

    1. --取整函数: round 返回double类型的整数值部分 (遵循四舍五入)
    2. select round(3.1415926);
    3. --指定精度取整函数: round(double a, int d) 返回指定精度d的double类型
    4. select round(3.1415926,4);
    5. --向下取整函数: floor
    6. select floor(3.1415926);
    7. select floor(-3.1415926);
    8. --向上取整函数: ceil
    9. select ceil(3.1415926);
    10. select ceil(-3.1415926);
    11. --取随机数函数: rand 每次执行都不一样 返回一个01范围内的随机数
    12. select rand();
    13. --指定种子取随机数函数: rand(int seed) 得到一个稳定的随机数序列
    14. select rand(2);
    15. --二进制函数: bin(BIGINT a)
    16. select bin(18);
    17. --进制转换函数: conv(BIGINT num, int from_base, int to_base)
    18. select conv(17,10,16);
    19. --绝对值函数: abs
    20. select abs(-3.9);
    3.1.4 Collection Functions集合函数

    主要针对集合这样的复杂数据类型进行操作

    1. •集合元素size函数: size(Map<K.V>) size(Array<T>)
    2. •取map集合keys函数: map_keys(Map<K.V>)
    3. •取map集合values函数: map_values(Map<K.V>)
    4. •判断数组是否包含指定元素: array_contains(Array<T>, value)
    5. •数组排序函数:sort_array(Array<T>)

    示例如下:

    1. --集合元素size函数: size(Map<K.V>) size(Array<T>)
    2. select size(`array`(11,22,33));
    3. select size(`map`("id",10086,"name","zhangsan","age",18));
    4. --取map集合keys函数: map_keys(Map<K.V>)
    5. select map_keys(`map`("id",10086,"name","zhangsan","age",18));
    6. --取map集合values函数: map_values(Map<K.V>)
    7. select map_values(`map`("id",10086,"name","zhangsan","age",18));
    8. --判断数组是否包含指定元素: array_contains(Array<T>, value)
    9. select array_contains(`array`(11,22,33),11);
    10. select array_contains(`array`(11,22,33),66);
    11. --数组排序函数:sort_array(Array<T>)
    12. select sort_array(`array`(12,2,32));
    3.1.5 条件函数

    主要用于条件判断、逻辑判断转换这样的场合

    1. if条件判断: if(boolean testCondition, T valueTrue, T valueFalseOrNull)
    2. •空判断函数: isnull( a )
    3. •非空判断函数: isnotnull ( a )
    4. •空值转换函数: nvl(T value, T default_value)
    5. •非空查找函数: COALESCE(T v1, T v2, ...)
    6. •条件转换函数: CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
    7. •nullif( a, b ): 如果a = b,则返回NULL;否则返回NULL。否则返回一个
    8. •assert_true: 如果'condition'不为真,则引发异常,否则返回null

    示例如下:

    1. --使用之前课程创建好的student表数据
    2. select * from student limit 3;
    3. --if条件判断: if(boolean testCondition, T valueTrue, T valueFalseOrNull)
    4. select if(1=2,100,200);
    5. select if(sex ='男','M','W') from student limit 3;
    6. --空判断函数: isnull( a )
    7. select isnull("allen");
    8. select isnull(null);
    9. --非空判断函数: isnotnull ( a )
    10. select isnotnull("allen");
    11. select isnotnull(null);
    12. --空值转换函数: nvl(T value, T default_value)
    13. select nvl("allen","itcast");
    14. select nvl(null,"itcast");
    15. --非空查找函数: COALESCE(T v1, T v2, ...)
    16. --返回参数中的第一个非空值;如果所有值都为NULL,那么返回NULL
    17. select COALESCE(null,11,22,33);
    18. select COALESCE(null,null,null,33);
    19. select COALESCE(null,null,null);
    20. --条件转换函数: CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
    21. select case 100 when 50 then 'tom' when 100 then 'mary' else 'tim' end;
    22. select case sex when '男' then 'man' else 'women' end from student limit 3;
    23. --nullif( a, b ):
    24. -- 果a = b,则返回NULL;否则返回NULL。否则返回一个
    25. select nullif(11,11);
    26. select nullif(11,12);
    27. --assert_true(condition)
    28. --如果'condition'不为真,则引发异常,否则返回null
    29. SELECT assert_true(11 >= 0);
    30. SELECT assert_true(-1 >= 0);
    3.1.6 Type Conversion Functions类型转换函数

    主要用于显式的数据类型转换

    1. •任意数据类型之间转换:cast
    2. --任意数据类型之间转换:cast
    3. select cast(12.14 as bigint);
    4. select cast(12.14 as string);
    3.1.7 数据脱敏函数

    主要完成对数据脱敏转换功能,屏蔽原始数据

    1. mask
    2. mask_first_n(string str[, int n]
    3. mask_last_n(string str[, int n])
    4. mask_show_first_n(string str[, int n])
    5. mask_show_last_n(string str[, int n])
    6. mask_hash(string|char|varchar str)

    示例如下:

    1. --mask
    2. --将查询回的数据,大写字母转换为X,小写字母转换为x,数字转换为n。
    3. select mask("abc123DEF");
    4. select mask("abc123DEF",'-','.','^'); --自定义替换的字母
    5. --mask_first_n(string str[, int n]
    6. --对前n个进行脱敏替换
    7. select mask_first_n("abc123DEF",4);
    8. --mask_last_n(string str[, int n])
    9. select mask_last_n("abc123DEF",4);
    10. --mask_show_first_n(string str[, int n])
    11. --除了前n个字符,其余进行掩码处理
    12. select mask_show_first_n("abc123DEF",4);
    13. --mask_show_last_n(string str[, int n])
    14. select mask_show_last_n("abc123DEF",4);
    15. --mask_hash(string|char|varchar str)
    16. --返回字符串的hash编码。
    17. select mask_hash("abc123DEF");
    3.1.8 其他函数
    1. hive调用java方法: java_method(class, method[, arg1[, arg2..]])
    2. 反射函数: reflect(class, method[, arg1[, arg2..]])
    3. 取哈希值函数:hash
    4. current_user()、logged_in_user()、current_database()、version()
    5. SHA-1加密: sha1(string/binary)
    6. SHA-2家族算法加密:sha2(string/binary, int) (SHA-224, SHA-256, SHA-384, SHA-512)
    7. crc32加密:
    8. MD5加密: md5(string/binary)

    示例如下:

    1. --hive调用java方法: java_method(class, method[, arg1[, arg2..]])
    2. select java_method("java.lang.Math","max",11,22);
    3. --反射函数: reflect(class, method[, arg1[, arg2..]])
    4. select reflect("java.lang.Math","max",11,22);
    5. --取哈希值函数:hash
    6. select hash("allen");
    7. --current_user()、logged_in_user()、current_database()、version()
    8. --SHA-1加密: sha1(string/binary)
    9. select sha1("allen");
    10. --SHA-2家族算法加密:sha2(string/binary, int) (SHA-224, SHA-256, SHA-384, SHA-512)
    11. select sha2("allen",224);
    12. select sha2("allen",512);
    13. --crc32加密:
    14. select crc32("allen");
    15. --MD5加密: md5(string/binary)
    16. select md5("allen");

  • 相关阅读:
    「Redis数据结构」动态字符串(SDS)
    nestJs(一) 创建node项目
    Git 备忘单
    kubernetes(K8S)学习笔记P2:搭建K8s集群2种方式
    egg-swagger-doc 传对象数组参数解决方案
    动态规划问题(一)
    Linux系统编程:进程part_2(信号相关)
    XSS攻击笔记(上)
    教你遇到vcomp120.dll无法继续执行代码的解决方法
    以工单为核心的MES管理系统功能设计
  • 原文地址:https://blog.csdn.net/u010763324/article/details/130297438