Hive中常用的UDF函数总结

|

一、网络资源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
1、类型转换

cast(expr as <type>)

如: cast('1' as BIGINT) 字符串转换为数字

2、if语句

if(boolean testCondition, T valueTrue, T valueFalseOrNull)

如果 testCondition 为 true 返回 valueTrue, 否则返回 valueFalse 或 Null

如: if(1 == 1, 1, 2) 结果为1

3、case语句

CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END

如:case when a == b then b when a == c then c else d end

4、字符串连接

concat(string1, string2, ...)

如:concat('hello', ' word') 结果为 hello word

5、计算字符串长度

length(string)

如:length('hello') 结果为5

6、查找子串的位置

locate(string substr, string str[, int pos])

如:locate('%', '100%') 返回3

7、聚合某一列数据

collect_set(col) 会去重

collect_list(col) 不会去重

这两个函数均会返回一个索引数组

将数组转换为分割符分割的字符串,如下

concat_ws(' ', collect_set(tblsecondtagmap.tag_name))
8、将数组或者map类型的数据分成多行

explode(ARRAY<T> a)

explode(MAP<Tkey,Tvalue> m)

如:

select explode(array('A','B','C'));

对应abc三行



A
B
C

select explode(map('A',10,'B',20,'C',30));

对应键值对三行

A 10
B 20
C 30
9、解析json数据

get_json_object(string json_string, string path)

path在不同的hive版本中支持情况不同

$ : json对象的根

. : 子对象的操作符

[] : 数组类型的下标形式

* : 通配符,结合 [] 一起使用

如:get_json_object('{"name":"bob"}', '$.name') 返回bob

get_json_object('{"name":["own","one"]}','$.name[]') 返回 ["own","one"]

get_json_object('{"name":["own","one"]}','$.name[0]') 返回 own

10、支持的复杂数据类型

array 数组类型,类比索引数组

map map类型, 类比关联数组

11、支持rlike语句

rlike支持正则表达式。如:

title rlike '^.*?医.*?(公司|院|网|中心|会|联盟|所|门诊|店|厂|门户|集团|美容|整型).*?$'

12、字母大小写转换

upper(string A) ucase(string A) 将字符串转换为大写字母

lower(string A) lcase(string A) 将字符串转换为小写字母

13、时间戳与时间的转换

from_unixtime(bigint unixtime[, string format]) 将时间戳转换为时间,形如“2008-10-07 03:28:54”这种的形式

unix_timestamp(string date) 将时间转换为时间戳,将形如“2008-10-07 03:28:54”这种形式的时间转换为时间戳

14、获取时间或者日期

year(string date) 年

month(string date) 月

day(string date) 日

hour(string date) 小时

minute(string date) 分钟

second(string date) 秒

--PS

--前三个函数支持‘2008-10-07 03:28:54’ ‘2008-10-07’ 这两种形式

--后三个函数支持‘2008-10-07 03:28:54’ ‘03:28:54’ 这两种形式
文章目录
|
载入天数...载入时分秒...