Hive-常用函数
介绍一些常用的hive函数,比如时间函数、集合相关的函数、字符串相关的函数等等,熟练掌握之后对提高数据分析效率有比较大的提升!
假设现在有一个订单表(order),里面有3个字段:uid、item_id(商品id)、price、ts(时间戳)
uid | item_id | price | ts |
u1 | i1 | 10 | 1644503781 |
u2 | i2 | 15 | 1644504880 |
u3 | i3 | 20 | 1644503984 |
时间函数
将时间戳转化为可阅读的字符串
1 | select from_unixtime(ts, 'yyyyMMdd HH:mm:ss') from order |
将日期转化为时间戳
1 | select unix_timestamp('20220209', 'yyyyMMdd'); |
计算日期差值,如过滤出距离2022.02.09 7天的订单(需要注意日期的格式)
1 | select * from order where datediff('2022-02-09', from_unixtime(ts, 'yyyy-MM-dd')) <= 7 |
集合函数
计算集合大小
1 | select size(array(1,2,3,4)); --结果: 4 |
获取map中的key
1 | select map_keys(map('a',1,'b',2,'c',3)); --结果: ["a","b","c"] |
获取map中的取值
1 | select map_keys(map('a',1,'b',2,'c',2)); --结果: [1,2,2] |
判断数组中是否包含某个值
1 | select array_contains(array(1,2,3,4), 4); --结果: true |
数组排序
1 | select sort_array(array(3,2,1,4)); --结果: [1,2,3,4] |
拼接为字符串
1 | select concat_ws('_', array('a', 'b', 'c')); --a_b_c |
字符串函数
json解析
1 | select get_json_object('{"name":"xyz"}', '$.name'); --xyz |
大小写转化
1 | select lower('xYz'); --xyz |
判断是否包含子字符串
返回第一次子字符串出现的位置,如果不存在返回0
1 | select instr('abcdef', 'bcd'); -- 2 |
数字格式转化
当计算的结果过大时,hive会自动将其转为科学计数法表示形式,不是很好阅读。可以用这个方法进行调整,d是小数点后的精度。
1 | format_number(number x, int d) |
条件函数
if条件
1 | select |
case when
1 | select |
填充缺失值(nvl)
1 | select |
取第一个不为null的值,否则为null
1 | select coalesce(1, null); -- 1 |
杂项
数据类型转化
1 | select cast('123' as int); |
单行转多行
1 | select explode(array(1,2,3)); |
评论系统未开启,无法评论!