hive字符串函数总结

常用的字符串函数由上到下排列,最后的几个函数由于没有理解或者由于版本原因没有给出例子

简介

函数名

返回类型

函数描述

举例

结果

字符串长度

length(string A)

int

返回字符串A的长度

select length('abcedfg');

7

字符串反转

reverse(string A)

string

返回字符串A的反转结果

select reverse('abcedfg');

gfdecba

字符串切割

split(string str, string pat)

array

按照pat字符串分割str,会返回分割后的字符串数组

select split('a,b,c,d,e,f,g', ',');

[“a”,“b”,“c”,“d”,“e”,“f”,“g”]

字符串连接

concat(string A, string B…)

string

返回字符串连接后结果

select concat('abc', 'def', 'gh');

abcdefgh

带分隔符的字符串连接

concat_ws(string SEP, string A, string B)

string

返回输入字符串以SEP为分隔符的拼接后的结果

select concat_ws(',','abc','def','gh');

abc,def,gh

带分隔符的字符串连接

concat_ws(string SEP, array)

string

返回输入字符串数组以SEP为分隔符的拼接后的结果

select concat_ws(',',array('abc', 'def', 'gh'));

abc,def,gh

字符串截取

substr(string A, int start)

substring(string A, int start)

string

返回字符串A从start位置到结尾的字符串

select substr('abcde',3);<br />select substring('abcde', 3);<br />select substr('abcde',-1);

cde

cde

e

字符串截取

substr(string A, int start, int len)

substring(string A, int start, int len)

string

返回字符串A从start位置,长度为len的字符串

select substr('abcde',3,2);<br />select substring('abcde', 3, 2);<br />select substr('abcde',-3, 2);

cd

cd

cd

字符串转大写

upper(string A)

ucase(string A)

string

返回字符串A的大写格式

select upper('abCdEF');<br />select ucase('abCdEF');

ABCDEF

字符串转小写

lower(string A)

lcase(string A)

string

返回字符串A的小写格式

select lower('abCdEF');<br />select lcase('abCdEF');

abcdef

首字母大写其余字母小写

initcap(string A)

string

返回一个新字符串,每个单词的首字母大写,其他字母小写,每个单词由空格分隔

select initcap('abCdEF');

Abcdef

去两边空格

trim(string A)

string

去除字符串A两边的空格

select length(' ab cd ef ');<br />select length(trim(' ab cd ef '));

12

8

去左边空格

ltrim(string A)

string

去除字符串A左边的空格

select length(' ab cd ef ');<br />select length(ltrim(' ab cd ef '));

12

10

去右边空格

rtrim(string A)

string

去除字符串A右边的空格

select length(' ab cd ef ');<br />select length(rtrim(' ab cd ef '));

12

10

将字符串转为map

str_to_map(text[, delimiter1, delimiter2])

map<string, string>

使用两个分隔符将文本拆分为键值对。Delimiter1 将文本分成 KV 对,Delimiter2 拆分每个 KV 对。默认分隔符是“,”用于 delimiter1,“:”用于 delimiter2。

select str_to_map("aa:1,bb:2");<br />select str_to_map("aa:1,bb:2", ',', ':');

{“aa”:“1”,“bb”:“2”}

使用正则替换字符串

regexp_replace(string A, string B, string C)

string

将字符串A中的符合java正则表达式B的部分替换为C[有些需要转义字符]

select regexp_replace('a1b2c3', 'a1', 'd4');<br />select regexp_replace('foobar', 'oo|ar', '');

d4b2c3

fb

使用正则提取字符串

regexp_extract(string subject, string pattern, int index)

string

将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符

select regexp_replace('a\nb\nc3', '\n', '0');<br />select regexp_replace('a1b2c3', '[1-9]', '0');

a0b0c3

a0b0c0

URL解析函数

parse_url(string urlString, string partToExtract [, string keyToExtract])

string

返回URL中指定的部分,partToExtract的有效值为 [HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, USERINFO],还可以提供keyToExtract作为第三个参数提取partToExtract为QUERY中特定的值

select parse_url('https://www.baidu.com', 'HOST');<br />select parse_url('https://www.baidu.com?user=root', 'QUERY', 'user');

www.baidu.comroot

JSON解析函数

get_json_object(string json_string, string path)

string

解析json的字符串(json_string),返回path指定的内容

select get_json_object('{"store":{"fruit":[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}], "bicycle":{"price":19.95,"color":"red"} },"email":"amy@only_for_json_udf_test.net","owner":"amy"}','$.owner');

amy

n个空格字符串

space(int n)

string

返回长度为n的空格字符串

select space(10);select length(space(10));

10

重复字符串

repeat(string str, int n)

string

返回重复n次后的str字符串

select repeat('abc', 3);

abcabcabc

首字符的ASCII码

ascii(string str)

int

返回字符串str第一个字符的ASCII码

select ascii('abc');

97 → ‘a’

向左补全

lpad(string str, int len, string pad)

string

返回 str,对str用 pad 左填充,长度为 len。如果 str 比 len 长,则返回值将缩短为 len 个字符。如果填充字符串为空,则返回值为空。

select lpad('abc', 10, '0');

0000000abc

向右补全

rpad(string str, int len, string pad)

string

返回 str,对str用 pad 右填充,长度为 len。如果 str 比 len 长,则返回值将缩短为 len 个字符。如果填充字符串为空,则返回值为空。

select rpad('abc', 10, '0');

abc0000000

在集合中查找字符串

fine_in_set(string str, string strList)

int

返回str在strList第一次出现的位置,其中strList是用逗号分隔的字符串。如果任一参数为null,则返回null。如果str中包含任何逗号,则返回0。

select find_in_set('ab', 'ef,ab,cd,e');<br />select find_in_set('12', 'ef,ab,cd,e');

2

0

返回某个字符串

elt(int N, string str1, string str2, string str3…)

string

返回索引号N处的字符串。例如 elt(2,‘hello’,‘world’) 返回 ‘world’。如果 N 小于 1 或大于参数数量,则返回 NULL。

select elt(2, 'hello', 'world', 'hive');<br />select elt(4, 'hello', 'world', 'hive');<br />select elt(0, 'hello', 'world', 'hive');

2

null

null

格式化数字

format_number(int X, int d)

string

将数字 X 格式化为类似 ‘#,###,###.##’ 的格式,四舍五入到 d 位小数,并将结果作为字符串返回。如果 d 为 0,则结果没有小数点或小数部分。

select format_number(123, 1);<br />select format_number(123456789, 5);

123.0

123,456,789.00000

查找第一次出现的子字符串

intstr(string str, string substr)

int

返回str中第一次出现substr的位置,位置是从1开始而不是基于0的,若是str中不存在substr则返回0,若是任一参数为null结果都为null。

从pos位置查找字符串

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

int

返回位置 pos 之后 str 中第一次出现 substr 的位置。使用它可以查找第n次输出substr的位置。

select locate('a', 'babbaa');<br />select locate('a', 'babbaa', 3);

2

5

断句

sentences(string str, string lang, string locale)

array<array>

将一串自然语言文本标记为单词和句子,其中每个句子在适当的句子边界处断开并作为单词数组返回。‘lang’ 和 ‘locale’ 是可选参数。例如,句子(‘Hello there! How are you?’) 返回 ( (“Hello”, “there”), (“How”, “are”, “you”) )。(‘lang’ 和 ‘locale’ 未理解)

select sentences('hello world! I\'m coming');

[[“hello”,“world”],[“I’m”,“coming”]]

context_ngrams(array<array>, array, int K, int pf)

array<struct<string,double>>

给定一串“上下文”,从一组标记化的句子中返回前 k 个上下文 N-gram。有关详细信息,请参阅StatisticsAndDataMining

translate(string input, string from, string to)

string

通过用from字符串中的相应字符替换字符串中存在的字符来翻译输入to字符串。如果此 UDF 的任何参数为 NULL,则结果也为 NULL。

levenshtein(string A, string B)

int

计算两个字符之间的levenshtein距离。。例如, levenshtein(‘kitten’, ‘sitting’) 结果为 3。

quote(String text)

string

hive-4.0.0才有的。返回带引号的字符串。若输入的是null输出也是null。