Hive函數(shù)大全(含例子)之字符串函數(shù)(String Functions)

字符串函數(shù) String Functions

ascii(string str)

  • 返回結(jié)果: 返回字符串str首字母的十進(jìn)制ascii碼
  • 返回類型: int
  • select ascii('ABC'); -- 結(jié)果為 65

base64(binary bin)

  • 返回結(jié)果: 將二進(jìn)制轉(zhuǎn)換為base64編碼
  • 返回類型: string
  • select base64(encode('Uncle Bean', 'utf8')); -- 結(jié)果為 VW5jbGUgQmVhbg==
  • select base64(encode('Melon-and-fruit-fields', 'utf-8')); -- 結(jié)果為 TWVsb24tYW5kLWZydWl0LWZpZWxkcw====

character_length(string str)

  • character_length 可縮寫為 char_length
  • 返回結(jié)果: 返回str中包含的UTF-8字符數(shù)
  • 返回類型: int
  • select character_length('123456'); -- 結(jié)果為 6
  • select char_length('ABCDEFGHIJK'); -- 結(jié)果為 11

chr(bigint|double A)

  • 返回結(jié)果: 將數(shù)字A轉(zhuǎn)為對(duì)應(yīng)的ascii字符, 如果A大于等于256洽糟,則結(jié)果同chr(A % 256)
  • 返回類型: string
  • select chr(65); -- 結(jié)果為 A
  • select chr(65.6); -- 結(jié)果為 A
  • select chr(321); -- 結(jié)果為 A
  • select chr(321 % 256); -- 結(jié)果為 A

concat(string|binary A, string|binary B...)

  • 返回結(jié)果: 拼接字符串,函數(shù)接受任意數(shù)量的輸入
  • 返回類型: string
  • select concat('A', 'C', 'B'); -- 結(jié)果為 ACB
  • select concat(encode('A', 'utf8'), encode('C', 'utf8'), encode('B', 'utf8')); -- 結(jié)果為 ACB

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

  • 返回結(jié)果: 使用n-gram模型,通過指定array<string>坤溃,提取前K個(gè)上下文文本拍霜;pf越大,精度越高薪介,同時(shí)消耗的內(nèi)存資源也更大
  • 返回類型: array<struct<string,double>>
  • select context_ngrams(array(array('from','a'),array('from','a'),array('from','b')), array('from', null), 1); -- 結(jié)果為 [{"ngram":["a"],"estfrequency":2.0}]
  • select context_ngrams(array(array('from','a'),array('from','a'),array('from','b')), array('from', null), 2); -- 結(jié)果為 [{"ngram":["a"],"estfrequency":2.0},{"ngram":["b"],"estfrequency":1.0}]

concat_ws(string SEP, string A, string B...)

  • 返回結(jié)果: 使用指定分隔符 SEP 拼接字符串祠饺,傳入?yún)?shù)為多個(gè)字符串
  • 返回類型: string
  • select concat_ws('-', 'Melon', 'and', 'fruit', 'fields'); -- 結(jié)果為 Melon-and-fruit-fields

concat_ws(string SEP, array<string>)

  • 返回結(jié)果: 使用指定分隔符 SEP 拼接字符串,傳入?yún)?shù)為 array
  • 返回類型: string
  • select concat_ws('-', array('Melon', 'and', 'fruit', 'fields')); -- 結(jié)果為 Melon-and-fruit-fields

decode(binary bin, string charset)

  • 返回結(jié)果: 解碼(字符集 charset 包括'US-ASCII', 'ISO-8859-1', 'UTF-8', 'UTF-16BE', 'UTF-16LE', 'UTF-16')
  • 返回類型: string
  • select decode(encode('A', 'utf8'), 'UTF-8'); -- 結(jié)果為 A

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

  • 返回結(jié)果: 返回第N個(gè)傳入?yún)?shù)汁政,如果N小于1或者大于字符串參數(shù)的個(gè)數(shù)則返回NULL
  • 返回類型: string
  • select elt(2, 'Melon', 'and', 'fruit', 'fields'); -- 結(jié)果為 and
  • select elt(5, 'Melon', 'and', 'fruit', 'fields'); -- 結(jié)果為 NULL

encode(string src, string charset)

  • 返回結(jié)果: 編碼
  • 返回類型: binary
  • select encode('A','UTF-8'); -- 結(jié)果為 A
  • select encode('A','US-ASCII'); -- 結(jié)果為 A

field(val T,val1 T,val2 T,val3 T,...)

  • 返回結(jié)果: 返回val在后續(xù)參數(shù)中出現(xiàn)的位置道偷,如果val為NULL或者未找到則返回0
  • 返回類型: int
  • select field(11, 13, 12, 11); -- 結(jié)果為 3
  • select field('a', 'c', 'b', 'a'); -- 結(jié)果為 3
  • select field('d', 'c', 'b', 'a'); -- 結(jié)果為 0

find_in_set(string str, string strList)

  • 返回結(jié)果: 返回str在strList中出現(xiàn)的位置,未找到或者str中包含逗號(hào)則返回0(strList是一個(gè)用逗號(hào)隔開的字符串)
  • 返回類型: int
  • select find_in_set('and', 'Melon,and,fruit,fields'); -- 結(jié)果為 2
  • select find_in_set('And', 'Melon,and,fruit,fields'); -- 結(jié)果為 0
  • select find_in_set('and,', 'Melon,and,fruit,fields'); -- 結(jié)果為 0
  • select find_in_set(NULL, 'Melon,and,fruit,fields'); -- 結(jié)果為 NULL

format_number(number x, int d)

  • 返回結(jié)果: 格式化數(shù)字x為包含d個(gè)小數(shù)位的數(shù)字记劈,并用千分位表示
  • 返回類型: string
  • select format_number(1234.16, 1); -- 結(jié)果為 1,234.2
  • select format_number(1234.14, 1); -- 結(jié)果為 1,234.1

get_json_object(string json_string, string path)

  • 返回結(jié)果: 提取json對(duì)象值
  • 返回類型: string
  • select get_json_object('{"key":"value"}', '$.key'); -- 結(jié)果為 value
  • select get_json_object('[{"key":"value"}, {"key":"value2"}]', '$[1].key'); -- 結(jié)果為 value2
  • select get_json_object('["value3"]', '$[0]'); -- 結(jié)果為 value3

in_file(string str, string filename)

  • 返回結(jié)果: 如果str是文件filename里面的一行則返回true勺鸦,否則返回false
  • 返回類型: boolean
  • select in_file('123', 'hdfs:/tmp/test/test.csv'); -- 結(jié)果為 true
  • select in_file('12', 'hdfs:/tmp/test/test.csv'); -- 結(jié)果為 false
  • /tmp/test/test.csv為hdfs上的文件,有兩行數(shù)據(jù)目木,第一行為123换途,第二行為456

instr(string str, string substr)

  • 返回結(jié)果: 返回substr在str中第一次出現(xiàn)的位置,未出現(xiàn)則返回0(如果參數(shù)為NULL則返回NULL刽射;位置從1開始)
  • 返回類型: int
  • select instr('1234', '23'); -- 結(jié)果為 2
  • select instr('1234', '2345'); -- 結(jié)果為 0
  • select instr('1234', NULL); -- 結(jié)果為 NULL
  • select instr(NULL, '23'); -- 結(jié)果為 NULL

length(string A)

  • 返回結(jié)果: 返回字符串A的長度
  • 返回類型: int
  • select length('123'); -- 結(jié)果為 3
  • select length(''); -- 結(jié)果為 0
  • select length(NULL); -- 結(jié)果為 NULL

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

  • 返回結(jié)果: 返回substr在str的pos-1位后第一次出現(xiàn)的位置
  • 返回類型: int
  • select locate('12', '1212'); -- 結(jié)果為 1
  • select locate('12', '1212', 1); -- 結(jié)果為 1
  • select locate('12', '1212', 2); -- 結(jié)果為 3

lower(string A) lcase(string A)

  • 返回結(jié)果: 返回小寫的字符串A
  • 返回類型: string
  • select lower('Aa'); -- 結(jié)果為 aa
  • select lcase('Aa'); -- 結(jié)果為 aa

lpad(string str, int len, string pad)

  • 返回結(jié)果: 使用pad填充字符串str的左邊军拟,使其長度變?yōu)閘en;如果字符串str的長度大于len誓禁,則str將被截?cái)嘈赶ⅲ蝗绻鹥ad為空字符或者NULL,則返回NULL
  • 返回類型: string
  • select lpad('123', 5, '0'); -- 結(jié)果為 00123
  • select lpad('123', 2, '0'); -- 結(jié)果為 12
  • select lpad('123', 5, ''); -- 結(jié)果為 NULL

ltrim(string A)

  • 返回結(jié)果: 去掉字符串A左邊的空格
  • 返回類型: string
  • select ltrim(' 123 3 '); -- 結(jié)果為 '123 3 '

ngrams(array<array<string>>, int N, int K, int pf)

  • 返回結(jié)果: 提取前K個(gè)N-gram(N-gram就是一個(gè)長度為N的詞語組成的序列)
  • 返回類型: array<struct<string,double>>
  • select ngrams(array(array('from','a'),array('from','a'),array('from','b')), 2, 1); -- 結(jié)果為 [{"ngram":["from","a"],"estfrequency":2.0}]
  • select ngrams(array(array('from','a'),array('from','a'),array('from','b')), 1, 1); -- 結(jié)果為 [{"ngram":["from"],"estfrequency":3.0}]

octet_length(string str)

  • 返回結(jié)果: 返回以UTF-8編碼保存字符串str所需的八位字節(jié)數(shù)
  • 返回類型: int
  • select octet_length('AAA1'); -- 結(jié)果為 15

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

  • 返回結(jié)果: 解析url(partToExtract包括HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, 以及USERINFO)
  • 返回類型: string
  • select parse_url('https://github.com/TheUncleWhoGrowsBeans/Melon-and-fruit-fields', 'HOST'); -- 結(jié)果為 github.com
  • select parse_url('https://github.com/TheUncleWhoGrowsBeans/Melon-and-fruit-fields', 'PATH'); -- 結(jié)果為 /TheUncleWhoGrowsBeans/Melon-and-fruit-fields
  • select parse_url('http://hostname.com/path?k1=v1&k2=v2#ref1', 'REF'); -- 結(jié)果為 ref1
  • select parse_url('http://hostname.com/path?k1=v1&k2=v2#ref1', 'QUERY', 'k2'); -- 結(jié)果為 v2

printf(String format, Obj... args)

  • 返回結(jié)果: 返回printf-style的字符串
  • 返回類型: string
  • select printf('%s%d歲了', 'Uncle Bean', 1); -- 結(jié)果為 Uncle Bean1歲了

quote(String text)

  • 返回結(jié)果: 返回帶引號(hào)的字符串
  • 返回類型: string
  • select quote('Uncle Bean'); -- 結(jié)果為 'Uncle Bean'

regexp_extract(string subject, string pattern, int index)

  • 返回結(jié)果: 正則提取
  • 返回類型: string
  • select regexp_extract('http://hostname.com/path?k1=v1&k2=v2#ref1', 'http://([0-9a-zA-z]+.[0-9a-zA-z]+)/', 1); -- 結(jié)果為 hostname.com

regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)

  • 返回結(jié)果: 正則替換
  • 返回類型: string
  • select regexp_replace('我1不23要456數(shù)7890字', '[0-9]+', ''); -- 結(jié)果為 我不要數(shù)字

repeat(string str, int n)

  • 返回結(jié)果: 返回重復(fù)n次str后的字符串
  • 返回類型: string
  • select repeat('a', 3); -- 結(jié)果為 aaa

replace(string A, string OLD, string NEW)

  • 返回結(jié)果: 替換
  • 返回類型: string
  • select replace('123123', '123', 'haha'); -- 結(jié)果為 hahahaha

reverse(string A)

  • 返回結(jié)果: 反轉(zhuǎn)字符串A
  • 返回類型: string
  • select reverse('1234'); -- 結(jié)果為 4321

rpad(string str, int len, string pad)

  • 返回結(jié)果: 使用pad填充字符串str的右邊现横,使其長度變?yōu)閘en漓拾;如果字符串str的長度大于len,則str將被截?cái)嘟潇簦蝗绻鹥ad為空字符或者NULL骇两,則返回NULL
  • 返回類型: string
  • select rpad('123', 5, '0'); -- 結(jié)果為 12300
  • select rpad('123', 2, '0'); -- 結(jié)果為 12
  • select rpad('123', 5, ''); -- 結(jié)果為 NULL

rtrim(string A)

  • 返回結(jié)果: 去掉字符串A右邊的空格
  • 返回類型: string
  • select rtrim('1 123 '); -- 結(jié)果為 1 123

sentences(string str, string lang, string locale)

  • 返回結(jié)果: 將自然語言文本串標(biāo)記為單詞和句子(分詞)
  • 返回類型: array<array<string>>
  • select sentences('Hello Bean! How are you?'); -- 結(jié)果為 [["Hello","Bean"],["How","are","you"]]

space(int n)

  • 返回結(jié)果: 返回n個(gè)空格的字符串
  • 返回類型: string
  • select concat('->', space(3), '<-'); -- 結(jié)果為 -> <-

split(string str, string pat)

  • 返回結(jié)果: 使用指定分隔符pat拆分字符串str
  • 返回類型: array
  • select split('123123', '2'); -- 結(jié)果為 ["1","31","3"]
  • select split('123123', '12'); -- 結(jié)果為 ["","3","3"]

str_to_map(text[, delimiter1, delimiter2])

  • 返回結(jié)果: 將字符串轉(zhuǎn)換為map
  • 返回類型: map<string,string>
  • select str_to_map('k1:v1,k2:v2'); -- 結(jié)果為 {"k1":"v1","k2":"v2"}

substr(string|binary A, int start) substring(string|binary A, int start)

  • 返回結(jié)果: 截取字符串
  • 返回類型: substr
  • select substr('12345', 2); -- 結(jié)果為 2345
  • select substring('12345', 2); -- 結(jié)果為 2345

substr(string|binary A, int start, int len) substring(string|binary A, int start, int len)

  • 返回結(jié)果: 截取字符串
  • 返回類型: string
  • select substr('12345', 2, 3); -- 結(jié)果為 234
  • select substring('12345', 2, 3); -- 結(jié)果為 234

substring_index(string A, string delim, int count)

  • 返回結(jié)果: 根據(jù)delim將字符串A分為多個(gè)部分,然后根據(jù)count返回部分字符串
  • 返回類型: string
  • select substring_index('1.2.3', '.', 2); -- 結(jié)果為 1.2
  • select substring_index('1.2.3', '.', -2); -- 結(jié)果為 2.3

translate(string|char|varchar input, string|char|varchar from, string|char|varchar to)

  • 返回結(jié)果: 將出現(xiàn)在from中的每個(gè)字符替換為to中的相應(yīng)字符姜盈;若from比to長低千,那么在from中比to中多出的字符將會(huì)被刪除
  • 返回類型: string
  • select translate('abc不是ab', 'abc', 'd'); -- 結(jié)果為 d不是d
  • select translate('abc不是a,也不是b,也不是c', 'abc', 'd'); -- 結(jié)果為 d不是d,也不是,也不是

trim(string A)

  • 返回結(jié)果: 去掉字符串A左右兩邊的空格
  • 返回類型: string
  • select concat('->', trim(' 1 1 '), '<-'); -- 結(jié)果為 ->1 1<-

unbase64(string str)

  • 返回結(jié)果: base64解碼
  • 返回類型: binary
  • select unbase64('VW5jbGUgQmVhbg=='); -- 結(jié)果為 Uncle Bean

upper(string A) ucase(string A)

  • 返回結(jié)果: 返回大寫的字符串A
  • 返回類型: string
  • select upper('aa'); -- 結(jié)果為 AA
  • select ucase('aa'); -- 結(jié)果為 AA

initcap(string A)

  • 返回結(jié)果: 轉(zhuǎn)換為首字母大寫的字符串A
  • 返回類型: string
  • select initcap('the uncle who grows beans'); -- 結(jié)果為 The Uncle Who Grows Beans

levenshtein(string A, string B)

  • 返回結(jié)果: 返回兩個(gè)字符串之間的Levenshtein距離(也稱編輯距離,指的是兩個(gè)字符串之間馏颂,由一個(gè)轉(zhuǎn)換成另一個(gè)所需的最少編輯操作次數(shù))
  • 返回類型: int
  • select levenshtein('hehe', 'haha'); -- 結(jié)果為 2

soundex(string A)

  • 返回結(jié)果: 返回字符串的soundex代碼
  • 返回類型: string
  • select soundex('Uncle Bean'); -- 結(jié)果為 U524

相關(guān)文章

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末救拉,一起剝皮案震驚了整個(gè)濱河市难审,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亿絮,老刑警劉巖告喊,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件麸拄,死亡現(xiàn)場離奇詭異,居然都是意外死亡黔姜,警方通過查閱死者的電腦和手機(jī)拢切,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秆吵,“玉大人淮椰,你說我怎么就攤上這事∧杉牛” “怎么了主穗?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長烈疚。 經(jīng)常有香客問我黔牵,道長,這世上最難降的妖魔是什么爷肝? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任猾浦,我火速辦了婚禮,結(jié)果婚禮上灯抛,老公的妹妹穿的比我還像新娘金赦。我一直安慰自己,他們只是感情好对嚼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布夹抗。 她就那樣靜靜地躺著,像睡著了一般纵竖。 火紅的嫁衣襯著肌膚如雪漠烧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天靡砌,我揣著相機(jī)與錄音已脓,去河邊找鬼。 笑死通殃,一個(gè)胖子當(dāng)著我的面吹牛度液,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播画舌,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼堕担,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了曲聂?” 一聲冷哼從身側(cè)響起霹购,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朋腋,沒想到半個(gè)月后厕鹃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兢仰,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年剂碴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轻专。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忆矛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出请垛,到底是詐尸還是另有隱情催训,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布宗收,位于F島的核電站漫拭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏混稽。R本人自食惡果不足惜采驻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匈勋。 院中可真熱鬧礼旅,春花似錦、人聲如沸洽洁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饿自。三九已至汰翠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昭雌,已是汗流浹背复唤。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留城豁,地道東北人苟穆。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像唱星,于是被迫代替她去往敵國和親雳旅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容