初稿 2020-08-27
Hive 函数比较多,之前总是随用随查,今天把常用的函数总结一下,以后方便查阅。
前言
Hive内部提供了很多函数给开发者使用,包括数学函数,类型转换函数,条件函数,字符函数,聚合函数,表生成函数等等,这些函数都统称为内置函数。
如图所示:
Hive常用函数
- 数学函数
- 集合函数
- 类型转换函数
- 日期函数
- 条件函数
- 字符函数
- 聚合函数
- 表生成函数
数学函数
- round()
#返回对a四舍五入的bigint值
SELECT round(1.5) # 输出 2
SELECT round(-1.5) # 输出 -2 该四舍五入计算方式为:绝对值四舍五入加负号
#返回DOUBLE型d的保留n位小数的DOUBLW型的近似值
select round(6.58354,3) #输出 6.584
- bround():
Returns the rounded BIGINT value of a using HALF_EVEN rounding mode (as of Hive 1.3.0, 2.0.0). Also known as Gaussian rounding or bankers’ rounding.
- 银行家舍入法(1-4:舍,6~9:进,5->前位数是偶:舍,5->前位数是奇:进)
select bround(2.5) #输出 2
bround(3.5) #输出 4
Returns a rounded to d decimal places using HALF_EVEN rounding mode (as of Hive 1.3.0, 2.0.0).
银行家舍入法,保留d位小数
select bround(8.25, 1) #输出 8.2
select bround(8.35, 1) #输出 8.4
- floor(): 舍1
向下取整,返回<=该参数的最大整数
SELECT FLOOR(1.5); # 输出 1
SELECT FLOOR(-1.5); # 输出 -2
- ceil(),ceiling():进一
向上取整,返回>=该参数的最小整数
SELECT CEIL(1.5); # 输出 2
SELECT CEIL(-1.5); # 输出 -1
- rand(), rand(INT seed):每行返回一个DOUBLE型随机数,seed是随机因子
种子seed相同,会出现伪随机现象,即每次生成的随机数相同。
# 多次执行,结果相同,为0.7308781907032909
select rand(1)
- exp(DOUBLE a), exp(DECIMAL a):返回e的a幂次方, a可为小数
- ln(DOUBLE a), ln(DECIMAL a):以自然数为底的a对数,a可为小数
- log10(DOUBLE a), log10(DECIMAL a):以10为底a的对数,a可为小数
- log2(DOUBLE a), log2(DECIMAL a):以2为底数a的对数,a可为小数
- log(DOUBLE base, DOUBLE a),log(DECIMAL base, DECIMAL a):以base为底a的对数,base 与 a都是DOUBLE类型
- pow(DOUBLE a, DOUBLE p),power(DOUBLE a, DOUBLE p):计算a的p次幂
- sqrt(DOUBLE a), sqrt(DECIMAL a):计算a的平方根
- bin(BIGINT a):计算二进制a的STRING类型,a为BIGINT类型
select bin(54) #输出 110110
- hex(BIGINT a),hex(STRING a),hex(BINARY a):计算十六进制a的STRING类型,如果a为STRING类型就转换成字符相对应的十六进制
select hex(54) #输出 36
select hex('bigdata') #输出 62696764617461
- unhex(STRING a):hex的逆方法
select unhex(62696764617461) #输出 bigdata
- conv(BIGINT num, INT from_base, INT to_base), conv(STRING num, INT from_base, INT to_base):将GIGINT/STRING类型的num从from_base进制转换成to_base进制
SELECT CONV('a',16,2) 输出1010
- abs(DOUBLE a):计算a的绝对值
- pmod(INT a, INT b),pmod(DOUBLE a, DOUBLE b):a对b取模
select mod(-9,4) #输出 3
- sin(DOUBLE a), sin(DECIMAL a):求a的正弦值
- asin(DOUBLE a), asin(DECIMAL a):求a的反正弦值
- cos(DOUBLE a), cos(DECIMAL a):求余弦值
- acos(DOUBLE a), acos(DECIMAL a):求反余弦值
- tan(DOUBLE a), tan(DECIMAL a):求正切值
- atan(DOUBLE a), atan(DECIMAL a):求反正切值
- degrees(DOUBLE a), degrees(DECIMAL a):将弧度值转换角度值
- radians(DOUBLE a), radians(DOUBLE a):将角度值转换成弧度值
- positive(INT a), positive(DOUBLE a):返回a
- negative(INT a), negative(DOUBLE a):返回a的相反数
- sign(DOUBLE a), sign(DECIMAL a):如果a是正数则返回1.0,是负数则返回-1.0,否则返回0.0;就是数学里的符号函数
- e():数学常数e
- pi():数学常数pi
- factorial(INT a):求a的阶乘
Returns the factorial of a (as of Hive 1.2.0). Valid a is [0…20].
- cbrt(DOUBLE a):求a的立方根
Returns the cube root of a double value (as of Hive 1.2.0).
- shiftleft(TINYINT|SMALLINT|INT a, INT b),shiftleft(BIGINT a, INT b):按位左移
Bitwise left shift (as of Hive 1.2.0). Shifts a b positions to the left.
Returns int for tinyint, smallint and int a. Returns bigint for bigint a.
- shiftright(TINYINT|SMALLINT|INT a, INTb),shiftright(BIGINT a, INT b):按拉右移
Bitwise right shift (as of Hive 1.2.0). Shifts a b positions to the right.
Returns int for tinyint, smallint and int a. Returns bigint for bigint a.
- shiftrightunsigned(TINYINT|SMALLINT|INTa, INT b),shiftrightunsigned(BIGINT a, INT b):无符号按位右移(<<<)
Bitwise unsigned right shift (as of Hive 1.2.0). Shifts a b positions to the right.
Returns int for tinyint, smallint and int a. Returns bigint for bigint a.
- greatest(T v1, T v2, …):求最大值
Returns the greatest value of the list of values (as of Hive 1.1.0). Fixed to return NULL when one or more arguments are NULL, and strict type restriction relaxed, consistent with “>” operator (as of Hive 2.0.0).
select greatest(12,34,56) #输出 56
- least(T v1, T v2, …):求最小值
Returns the least value of the list of values (as of Hive 1.1.0). Fixed to return NULL when one or more arguments are NULL, and strict type restriction relaxed, consistent with “<” operator (as of Hive 2.0.0).
集合函数
- size(Map<K.V>)、size(Array):返回map或者数组的长度
# array 长度 3
select size(array('2018',2348,'2019',948534,'2020',9483543))
# map 长度 3
select size(map('2018',2348,'2019',948534,'2020',9483543))
- map_keys(Map<K.V>):返回map中的所有key
select map_keys(map('2018',2348,'2019',948534,'2020',943543))
结果:
["2018","2019","2020"]
- map_values(Map<K.V>):返回map中的所有value
select map_values(map('2018',2348,'2019',948534,'2020',943543))
结果:
[2348,948534,943543]
- array_contains(Array, value):如该数组Array包含value返回true,否则返回false
select array_contains(array('aa','bb','cc'),'cc')
结果:
true
- sort_array(Array) :按自然顺序对数组进行排序并返回(升序)
select sort_array(array(4,46,15,6,84,64,89))
结果:
[4,6,15,46,64,84,89]
类型转换函数
- binary(string|binary):将输入的值转换成二进制
- cast(expr as type):将expr转换成type类型。如果转换未成功,则返回null。如果转换(expr为布尔值),Hive对非空字符串返回true。
Converts the results of the expression expr to . For example, cast(‘1’ as BIGINT) will convert the string ‘1’ to its integral representation. A null is returned if the conversion does not succeed. If cast(expr as boolean) Hive returns true for a non-empty string.
select cast('a' as bigint) #输出 null
select cast(3>2 as boolean) #输出 true
日期函数
- from_unixtime(bigint unixtime[, string format])
Converts the number of seconds from unix epoch (1970-01-01 00:00:00 UTC) to a string representing the timestamp of that moment in the current system time zone in the format of “1970-01-01 00:00:00”.
- 将时间的秒值转换成format格式(format可为“yyyy-MM-dd hh:mm:ss”,“yyyy-MM-dd hh”,“yyyy-MM-dd hh:mm”等等)
select from_unixtime(1250111000,"yyyy-MM-dd") #输出 2009-08-12
- unix_timestamp(),unix_timestamp(string date),unix_timestamp(string date, string pattern)
# 获取本地时区下的时间戳
select unix_timestamp() #输出 1598527984
#将格式为yyyy-MM-dd HH:mm:ss的时间字符串转换成时间戳
select unix_timestamp('2009-03-20 11:30:01') #输出 1237563001
#将指定时间字符串格式字符串转换成Unix时间戳,如果格式不对返回0
select unix_timestamp('2009-03-20', 'yyyy-MM-dd') #输出 1237521600
- to_date(string timestamp):返回时间字符串的日期部分
select to_date("1970-01-01 00:00:00") #输出 1970-01-01
- year(string date):返回时间字符串的年份部分
select year("1970-01-01 00:00:00") #输出 1970
- quarter(date/timestamp/string):返回当前时间属性哪个季度
select quarter("1970-01-01 00:00:00") #输出 1
- month(string date):返回时间字符串的月份部分
select month("1970-01-01 00:00:00") #输出 1
- day(string date),dayofmonth(date):返回时间字符串的天
select day("1970-01-01 00:00:00") #输出 1
select dayofmonth("1970-04-01 00:00:00") #输出 1
- hour(string date):返回时间字符串的小时,范围为0-23
select hour("1970-01-01 00:00:00") #输出 0
- minute(string date):返回时间字符串的分钟
select minute("1970-01-01 00:07:00") #输出 7
- second(string date):返回时间字符串的秒
select second("1970-01-01 00:07:09") #输出 9
- weekofyear(string date):返回时间字符串位于一年中的第几个周内
select weekofyear("1970-11-01 00:07:09") #输出 44
- datediff(string enddate, string startdate):计算开始时间startdate到结束时间enddate相差的天数
select datediff('2009-03-01', '2009-02-27') #输出 2
- date_add(string startdate, int days):从开始时间startdate加上days
select date_add('2009-03-01', 1) #输出 2009-03-02
- date_sub(string startdate, int days):从开始时间startdate减去days
select date_sub('2009-03-01', 1) #输出 2009-02-28
- from_utc_timestamp(timestamp, string timezone):如果给定的时间戳并非UTC,则将其转化成指定的时区下时间戳
select from_utc_timestamp('1970-01-01 08:00:00','PST') #输出 1970-01-01 00:00:00.0
- to_utc_timestamp(timestamp, string timezone):如果给定的时间戳指定的时区下时间戳,则将其转化成UTC下的时间戳
select to_utc_timestamp('1970-01-01 08:00:00','PST') #输出 1970-01-01 16:00:00.0
- current_date:返回当前时间日期
select current_date #输出 2020-08-27
- current_timestamp:返回当前时间戳
select current_timestamp #输出 2020-08-27 08:00:10.427
- add_months(string start_date, int num_months):返回当前时间下再增加num_months个月的日期。
如果start_date是月份的最后一天,或者结果月份的天数少于start_date的day组件,那么结果就是结果月份的最后一天。否则,结果具有与start_date相同的day组件。 - last_day(string date):返回这个月的最后一天的日期,忽略时分秒部分(HH:mm:ss)
- next_day(string start_date, string day_of_week) :返回当前时间的下一个星期X所对应的日期
select next_day('2015-01-14', 'TU') #输出 2015-01-20
- trunc(string date, string format):返回时间的最开始年份或月份,注意所支持的格式为MONTH/MON/MM, YEAR/YYYY/YY
select trunc("2016-06-26",'MM') #输出 2016-06-01
select trunc("2016-06-26",'YY') #输出 2016-06-01
- months_between(date1, date2):返回date1与date2之间相差的月份,如date1>date2,则返回正,如果date1<date2,则返回负,否则返回0.0
select months_between('1997-02-28 10:30:00', '1996-10-30') #输出 3.94959677
- date_format(date/timestamp/string ts, string fmt):按指定格式返回时间date
select date_format("2016-06-22","MM-dd") #输出 06-22
条件函数
- if(boolean testCondition, T valueTrue, T valueFalseOrNull)
如果testCondition 为true就返回valueTrue,否则返回valueFalseOrNul(valueTrue,valueFalseOrNull为泛型)
select if(2>1,1,0) #输出 1
- nvl(T value, T default_value)
如果value值为NULL就返回default_value,否则返回value
select nvl(null,'a') #输出 a
- COALESCE(T v1, T v2, …)
返回第一非null的值,如果全部都为NULL就返回NULL
select coalesce(null,958,5) #输出 958
- CASE a WHEN b THEN c [WHEN d THEN e] … [ELSE f] END
如果a=b就返回c,[a=d就返回e],否则返回f
# 返回4
CASE 4 WHEN 5 THEN 5 WHEN 4 THEN 4 ELSE 3 END
- CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END
如果a=ture就返回b,[c= ture就返回d],否则返回e
# 返回5
CASE WHEN 5>0 THEN 5 WHEN 4>0 THEN 4 ELSE 0 END
# 返回0
CASE WHEN 5<0 THEN 5 WHEN 4<0 THEN 4 ELSE 0 END
- isnull( a ):如果a为null就返回true,否则返回false
- isnotnull ( a ):如果a为非null就返回true,否则返回false
字符函数
- ascii(string str):返回str中首个ASCII字符的整数值
select ascii('aac') #输出97
- base64(binary bin):将二进制bin转换成64位的字符串
- concat(string|binary A, string|binary B…):对二进制字节码或字符串按次序进行拼接
select concat('foo', 'bar') #输出foobar
- context_ngrams(array<array<string>>, array<string>, int K, int pf):与ngram类似,但context_ngram()允许你预算指定上下文(数组)来去查找子序列,详情N-gram模型和神经语言模型
- concat_ws(string SEP, string A, string B…):与concat()类似,但使用指定的分隔符进行分隔
select concat_ws(',','foo', 'bar') #输出foo,bar
- concat_ws(string SEP, array<string>):拼接Array中的元素并用指定分隔符进行分隔
select concat_ws(',',array('henry','rose','jack')) #输出 henry,rose,jack
- decode(binary bin, string charset):使用指定的字符集charset将二进制值bin解码成字符串,支持的字符集有:‘US-ASCII’, ‘ISO-8859-1’, ‘UTF-8’, ‘UTF-16BE’, ‘UTF-16LE’, ‘UTF-16’,如果任意输入参数为NULL都将返回NULL
- encode(string src, string charset):使用指定的字符集charset将字符串编码成二进制值,支持的字符集有:‘US-ASCII’, ‘ISO-8859-1’, ‘UTF-8’, ‘UTF-16BE’, ‘UTF-16LE’, ‘UTF-16’,如果任一输入参数为NULL都将返回NULL
select decode(encode('ab发斯蒂芬','gbk'),'gbk') #输出 ab发斯蒂芬
- find_in_set(string str, string strList):返回以逗号分隔的字符串中str出现的位置,如果参数str为逗号或查找失败将返回0,如果任一参数为NULL将返回NULL,位置从1开始
# 返回3
select find_in_set('adsf','ads,sd,adsf,adsf,a')
# 返回0
select find_in_set(',','ads,sd,adsf,adsf,a')
- format_number(number x, int d):将数值X转换成"#,###,###.##"格式字符串,并保留d位小数,如果d为0,将进行四舍五入且不保留小数
select format_number(12.265,2) #输出 12.26
- get_json_object(string json_string, string path)
从指定路径上的JSON字符串抽取出JSON对象,并返回这个对象的JSON格式,如果输入的JSON是非法的将返回NULL,注意此路径上JSON字符串只能由数字 字母 下划线组成且不能有大写字母和特殊字符,且key不能由数字开头,这是由于Hive对列名的限制
#原数据:
jsontest.id jsontest.line
1 {"name":"zs","age":"18","gender":"男"}
2 {"name":"ls","age":"19","gender":"女"}
3 {"name":"ww","age":"20","gender":"男"}
# 查询
select id,
get_json_object(line,'$.name') name,
get_json_object(line,'$.age') age,
get_json_object(line,'$.gender') gender
from jsontest
# 结果
id name age gender
1 zs 18 男
2 ls 19 女
3 ww 20 男
- in_file(string str, string filename):如果文件名为filename的文件中有一行数据与字符串str匹配成功就返回true
- instr(string str, string substr):查找字符串str中子字符串substr出现的位置,如果查找失败将返回0,如果任一参数为Null将返回null,注意位置为从1开始的
select instr('asdfgh','s')
- length(string A):返回字符串的长度
- locate(string substr, string str[, int pos]):查找字符串str中的pos位置后字符串substr第一次出现的位置
# 返回 19
select locate('are','we are family, we are happy',10)
- lower(string A) lcase(string A):将字符串A的所有字母转换成小写字母
- lpad(string str, int len, string pad):从左边开始对字符串str使用字符串pad填充,最终len长度为止,如果字符串str本身长度比len大的话,将去掉多余的部分
select lpad('',6,'*') #输出 ******
- ltrim(string A):去掉字符串A左边的空格
- ngrams(array<array>, int N, int K, int pf):返回出现次数TOP K的的子序列,n表示子序列的长度
- parse_url(string urlString, string partToExtract [, string keyToExtract]):返回从URL中抽取指定部分的内容,参数url是URL字符串,而参数partToExtract是要抽取的部分,这个参数包含(HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, and USERINFO
# 查询
select parse_url('https://s.weibo.com/weibo?q=%234%E4%BF96%AF%E6%9C%BA%E6%9E%84%23&Refer=top','PROTOCOL'),
parse_url('https://s.weibo.com/weibo?q=%234%E4%BF96%AF%E6%9C%BA%E6%9E%84%23&Refer=top','HOST'),
parse_url('https://s.weibo.com/weibo?q=%234%E4%BF96%AF%E6%9C%BA%E6%9E%84%23&Refer=top','PATH'),
parse_url('https://s.weibo.com/weibo?q=%234%E4%BF96%AF%E6%9C%BA%E6%9E%84%23&Refer=top','QUERY'),
parse_url('https://s.weibo.com/weibo?q=%234%E4%BF96%AF%E6%9C%BA%E6%9E%84%23&Refer=top','REL'),
parse_url('https://s.weibo.com/weibo?q=%234%E4%BF96%AF%E6%9C%BA%E6%9E%84%23&Refer=top','FILE'),
parse_url('https://s.weibo.com/weibo?q=%234%E4%BF96%AF%E6%9C%BA%E6%9E%84%23&Refer=top','AUTHORITY'),
parse_url('https://s.weibo.com/weibo?q=%234%E4%BF96%AF%E6%9C%BA%E6%9E%84%23&Refer=top','USERINFO')
结果:
_c0 _c1 _c2 _c3 _c4 _c5 _c6 _c7
https s.weibo.com /weibo q=%234%E4%BF96%AF%E6%9C%BA%E6%9E%84%23&Refer=top null /weibo?q=%234%E4%BF96%AF%E6%9C%BA%E6%9E%84%23&Refer=top s.weibo.com null
- printf(String format, Obj… args):按照printf风格格式输出字符串
- regexp_extract(string subject, string pattern, int index):抽取字符串subject中符合正则表达式pattern的第index个部分的子字符串,注意些预定义字符的使用,如第二个参数如果使用’\s’将被匹配到s,’\\s’才是匹配空格
select regexp_extract('henry@qq.com','(\\w{3,})@([0-9a-z]{2,})\.(com|cn|org|edu)',3)
结果:com
- regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT):按照Java正则表达式PATTERN将字符串INTIAL_STRING中符合条件的部分成REPLACEMENT所指定的字符串,如里REPLACEMENT这空的话,抽符合正则的部分将被去掉 如:regexp_replace(“foobar”, “oo|ar”, “”) = ‘fb.’ 注意些预定义字符的使用,如第二个参数如果使用’\s’将被匹配到s,’\\s’才是匹配空格
select regexp_replace('2020/08/27','/','-')
结果:2020-08-27
- repeat(string str, int n):重复输出n次字符串str
- reverse(string A):反转字符串
- rpad(string str, int len, string pad):从右边开始对字符串str使用字符串pad填充,最终len长度为止,如果字符串str本身长度比len大的话,将去掉多余的部分
- rtrim(string A):去掉字符串右边出现的空格
- sentences(string str, string lang, string locale):字符串str将被转换成单词数组
select sentences('Hello there! How are you?')
结果:
[["Hello","there"],["How","are","you"]]
- space(int n):返回n个空格
- split(string str, string pat):按照正则表达式pat来分割字符串str,并将分割后的数组字符串的形式返回
select split('Hello there! How are you?',' ')
结果:
["Hello","there!","How","are","you?"]
- str_to_map(text[, delimiter1, delimiter2]):将字符串str按照指定分隔符转换成Map,第一个参数是需要转换字符串,第二个参数是键值对之间的分隔符,默认为逗号;第三个参数是键值之间的分隔符,默认为"="
select str_to_map('2018,2348;2019,948534;2020,9483543',';',',')
结果:
{"2019":"948534","2018":"2348","2020":"9483543"}
- substr(string|binary A, int start) substring(string|binary A, int start):对于字符串A,从start位置开始截取字符串并返回
select substr('footbar',4)
结果:
tbar
- substr(string|binary A, int start, int len) substring(string|binary A, int start, int len):对于二进制/字符串A,从start位置开始截取长度为length的字符串并返回
select substr('footbar',4,2)
结果:
tb
- substring_index(string A, string delim, int count):截取第count分隔符之前的字符串,如count为正则从左边开始截取,如果为负则从右边开始截取
select substring_index('footbar','o',1)
结果:
f
- translate(string|char|varchar input, string|char|varchar from, string|char|varchar to):将input出现在from中的字符串替换成to中的字符串
select translate("MOBIN","BIN","M")
结果:
MOM
- trim(string A):将字符串A前后出现的空格去掉
- unbase64(string str):将64位的字符串转换二进制值
- upper(string A),ucase(string A):将字符串A中的字母转换成大写字母
- initcap(string A):将字符串A转换第一个字母大写其余字母小写的字符串
- levenshtein(string A, string B):计算两个字符串之间的差异大小
select levenshtein('kitten', 'sitting')
结果:3
- soundex(string A):将普通字符串转换成soundex字符串
Returns soundex code of the string (as of Hive 1.2.0). For example, soundex(‘Miller’) results in M460…
聚合函数
- count(*), count(expr), count(DISTINCT expr[, expr…])
count(*) - Returns the total number of retrieved rows, including rows containing NULL values.
统计总行数,包括含有NULL值的行
count(expr) - Returns the number of rows for which the supplied expression is non-NULL.
统计提供非NULL的expr表达式值的行数
count(DISTINCT expr[, expr]) - Returns the number of rows for which the supplied expression(s) are unique and non-NULL. Execution of this can be optimized with hive.optimize.distinct.rewrite.
统计提供非NULL且去重后的expr表达式值的行数
- sum(col), sum(DISTINCT col)
Returns the sum of the elements in the group or the sum of the distinct values of the column in the group.
sum(col),表示求指定列的和,sum(DISTINCT col)表示求去重后的列的和
- min(col)
Returns the minimum of the column in the group.
求指定列的最小值
- max(col)
Returns the maximum value of the column in the group.
求指定列的最大值
- variance(col), var_pop(col)
Returns the variance of a numeric column in the group.
求指定列数值的方差
- var_samp(col)
Returns the unbiased sample variance of a numeric column in the group.
求指定列数值的样本方差
- stddev_pop(col)
Returns the standard deviation of a numeric column in the group.
求指定列数值的标准偏差
- stddev_samp(col)
Returns the unbiased sample standard deviation of a numeric column in the group.
求指定列数值的样本标准偏差
- covar_pop(col1, col2)
Returns the population covariance of a pair of numeric columns in the group.
求指定列数值的协方差
- covar_samp(col1, col2)
Returns the sample covariance of a pair of a numeric columns in the group.
求指定列数值的样本协方差
- corr(col1, col2)
Returns the Pearson coefficient of correlation of a pair of a numeric columns in the group.
返回两列数值的相关系数
- percentile(BIGINT col, p)
Returns the exact pth percentile of a column in the group (does not work with floating point types). p must be between 0 and 1. NOTE: A true percentile can only be computed for integer values. Use PERCENTILE_APPROX if your input is non-integral.
返回col的p%分位数
表生成函数
- explode(array<TYPE> a)
For each element in a, generates a row containing that element.
对于a中的每个元素,将生成一行且包含该元素
- explode(ARRAY)
Returns one row for each element from the array..
每行对应数组中的一个元素
- explode(MAP)
Returns one row for each key-value pair from the input map with two columns in each row: one for the key and another for the value. (As of Hive 0.8.0.).
每行对应每个map键-值,其中一个字段是map的键,另一个字段是map的值
``
- posexplode(ARRAY)
Behaves like explode for arrays, but includes the position of items in the original array by returning a tuple of (pos, value). (As of Hive 0.13.0.).
与explode类似,不同的是还返回各元素在数组中的位置
- stack(INT n, v_1, v_2, …, v_k)
reaks up v_1, ..., v_k into n rows. Each row will have k/n columns. n must be constant..
把M列转换成N行,每行有M/N个字段,其中n必须是个常数
select stack(5,'aa','bb','cc','dd','ee','ff','gg','hh','ii','jj')
结果:
col0 col1
aa bb
cc dd
ee ff
gg hh
ii jj
- json_tuple(jsonStr, k1, k2, …)
Takes a set of names (keys) and a JSON string, and returns a tuple of values. This is a more efficient version of the get_json_object UDF because it can get multiple keys with just one call..
从一个JSON字符串中获取多个键并作为一个元组返回,与get_json_object不同的是此函数能一次获取多个键值
#原数据:
jsontest.id jsontest.line
1 {"name":"zs","age":"18","gender":"男"}
2 {"name":"ls","age":"19","gender":"女"}
3 {"name":"ww","age":"20","gender":"男"}
select id,t.name,t.age,t.gender
from jsontest
lateral view json_tuple(line,'name','age','gender')t as name,age,gender
结果:
id t.name t.age t.gender
1 zs 18 男
2 ls 19 女
3 ww 20 男
- parse_url_tuple(url, p1, p2, …)
This is similar to the parse_url() UDF but can extract multiple parts at once out of a URL. Valid part names are: HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, USERINFO, QUERY:<KEY>..
返回从URL中抽取指定N部分的内容,参数url是URL字符串,而参数p1,p2,....是要抽取的部分,这个参数包含HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, USERINFO, QUERY:<KEY>
select parse_url_tuple('https://s.weibo.com/weibo?q=%234%E4%BF96%AF%E6%9C%BA%E6%9E%84%23&Refer=top','PROTOCOL','HOST','PATH','QUERY','REL','FILE','AUTHORITY','USERINFO')
结果:
c0 c1 c2 c3 c4 c5 c6 c7
https s.weibo.com /weibo q=%234%E4%BF96%AF%E6%9C%BA%E6%9E%84%23&Refer=top null /weibo?q=%234%E4%BF96%AF%E6%9C%BA%E6%9E%84%23&Refer=top s.weibo.com null
- inline(ARRAY<STRUCT[,STRUCT]>)
Explodes an array of structs into a table. (As of Hive 0.10.).
将结构体数组提取出来并插入到表中