Hive函數大全(含例子)之數據屏蔽函數、雜項函數、XML解析函數

目錄

一、數據屏蔽函數 Data Masking Functions

二、雜項函數 Misc. Functions

三、XML解析函數 XPathUDF

四、相關文章

五、下期預告


一、數據屏蔽函數 Data Masking Functions

mask(string str[, string upper[, string lower[, string number]]])

返回結果: 將字符串str中的大寫字母替換爲upper(默認爲X),小寫字母替換爲lower(默認爲x),數字替換爲number(默認爲n)

返回類型: string

select mask('Hello Uncle Bean! 1024'); -- 結果爲 Xxxxx Xxxxx Xxxx! nnnn
select mask('Hello Uncle Bean! 1024', 'A', 'a', '*'); -- 結果爲 Aaaaa Aaaaa Aaaa! ****

mask_first_n(string str[, int n])

返回結果: 屏蔽字符串str的前n個字符

返回類型: string

select mask_first_n('Hello Uncle Bean!', 5); -- 結果爲 Xxxxx Uncle Bean!

mask_last_n(string str[, int n])

返回結果: 屏蔽字符串str的後n個字符

返回類型: string

select mask_last_n('Hello Uncle Bean!', 4); -- 結果爲 Hello Uncle Xxxx!

mask_show_first_n(string str[, int n])

返回結果: 字符串str的前n位不屏蔽,其他屏蔽

返回類型: string

select mask_show_first_n('Hello Uncle Bean!', 5); -- 結果爲 Hello Xxxxx Xxxx!

mask_show_last_n(string str[, int n])

返回結果: 字符串str的後n位不屏蔽,其他屏蔽

返回類型: string

select mask_show_last_n('Hello Uncle Bean!', 4); -- 結果爲 Xxxxx Xxxxx Bean!

mask_hash(string|char|varchar str)

返回結果: 返回基於str的哈希值(對於非字符類型返回NULL)

返回類型: string

select mask_hash('Hello Uncle Bean!'); -- 結果爲 c4db6bf1917509938e67a712305385f9
select mask_hash(1024); -- 結果爲 NULL

二、雜項函數 Misc. Functions

java_method(class, method[, arg1[, arg2..]])

返回結果: 調用Java類的方法

返回類型: varies

select java_method('java.lang.Math', 'max', 2, 3); -- 結果爲 3
select java_method('java.lang.Math', 'floor', 2.6); -- 結果爲 2.0

reflect(class, method[, arg1[, arg2..]])

返回結果: 通過使用反射匹配參數簽名來調用Java方法,同java_method

返回類型: varies

select reflect('java.lang.Math', 'max', 2, 3); -- 結果爲 3
select reflect('java.lang.Math', 'floor', 2.6); -- 結果爲 2.0

hash(a1[, a2...])

返回結果: 返回哈希值

返回類型: int

select hash('a'); -- 結果爲 97
select hash('b'); -- 結果爲 98
select hash('a', 'b'); -- 結果爲 3105
select hash('ab'); -- 結果爲 3105

current_user()

返回結果: 從配置的驗證器管理器返回當前用戶名

返回類型: string

select current_user(); -- 結果爲 bi

logged_in_user()

返回結果: 從會話狀態返回當前用戶名

返回類型: string

select logged_in_user(); -- 結果爲 bi

current_database()

返回結果: 返回當前數據庫名

返回類型: string

select current_database(); -- 結果爲 default

md5(string/binary)

返回結果: 返回32位小寫的md5

返回類型: string

select md5('Uncle Bean'); -- 結果爲 78ea5737920d1add07c24b4e6e68b182

sha1(string/binary) sha(string/binary)

返回結果: 計算字符串或二進制參數的SHA-1摘要,並將該值作爲十六進制字符串返回

返回類型: string

select sha1('Uncle Bean'); -- 結果爲 52f7b5cafcd87862da11a0e96bf7322e14410c43
select sha('Uncle Bean'); -- 結果爲 52f7b5cafcd87862da11a0e96bf7322e14410c43
select sha(encode('Uncle Bean', 'utf8')); -- 結果爲 52f7b5cafcd87862da11a0e96bf7322e14410c43

crc32(string/binary)

返回結果: 計算字符串或二進制參數的循環冗餘校驗值

返回類型: bigint

select crc32('Uncle Bean'); -- 結果爲 175227052
select crc32('UncleBean'); -- 結果爲 653937854

sha2(string/binary, int)

返回結果: 計算字符串或二進制參數的SHA-2摘要(第2個參數用於選擇算法標準,包括224、256、384、512及0,0即代表256)

返回類型: string

select sha2('Uncle Bean', 0); -- 結果爲 f6630c5033a7fa32605bc6141552206d4cb9f5bbc5bf5912478ba998d15c50c2
select sha2('Uncle Bean', 256); -- 結果爲 f6630c5033a7fa32605bc6141552206d4cb9f5bbc5bf5912478ba998d15c50c2
select sha2('Uncle Bean', 512); -- 結果爲 39649450bf7af2bae0e54db4d0ef357ec55f76d4380d7210f9427937383c018c58ae1acbb1c50b612154ae5c9c7daefdfdb587ae1376e46096824d034cb1361e

aes_encrypt(input string/binary, key string/binary)

返回結果: 使用AES進行加密,祕鑰長度key可以爲128、192或者256

返回類型: binary

select base64(aes_encrypt('ABC', '1234567890123456')); -- 結果爲 y6Ss+zCYObpCbgfWfyNWTw==

aes_decrypt(input binary, key string/binary)

返回結果: 使用AES進行解密,祕鑰長度key可以爲128、192或者256

返回類型: binary

select aes_decrypt(unbase64('y6Ss+zCYObpCbgfWfyNWTw=='), '1234567890123456'); -- 結果爲 ABC

version()

返回結果: 返回Hive版本,結果包含兩部分,第一部分爲版本號,第二部分爲版本hash

返回類型: string

select version(); -- 結果爲 2.1.1-cdh6.1.0 r3b1c0c61c01a71f15051f5fd192ec7c5185b7495

surrogate_key([write_id_bits, task_id_bits])

返回結果: 用於生成代理鍵

返回類型: bigint

CREATE TABLE SURROGATE_KEY_TEST (id BIGINT DEFAULT SURROGATE_KEY());

三、XML解析函數 XPathUDF

xpath(xml string, xpath_expression string)

返回結果: 用於生成代理鍵

返回類型: array

select xpath('<a><b>b1</b><b>b2</b></a>','a/*/text()'); -- 結果爲 ["b1","b2"]
select xpath('<a><b>b1</b><b>b2</b></a>','a/*'); -- 結果爲 []
select xpath('<a><b id="foo">b1</b><b id="bar">b2</b></a>','//@id'); -- 結果爲 ["foo","bar"]
select xpath ('<a><b class="bb">b1</b><b>b2</b><b>b3</b><c class="bb">c1</c><c>c2</c></a>', 'a/*[@class="bb"]/text()'); -- 結果爲 ["b1","c1"]

xpath_string(xml string, xpath_expression string)

返回結果: 返回第一個匹配節點的文本

返回類型: string

select xpath_string ('<a><b>bb</b><c>cc</c></a>', 'a/b'); -- 結果爲 bb
select xpath_string ('<a><b>bb</b><c>cc</c></a>', 'a'); -- 結果爲 bbcc
select xpath_string ('<a><b>bb</b><c>cc</c></a>', 'a/d'); -- 結果爲空字符
select xpath_string ('<a><b>b1</b><b>b2</b></a>', '//b'); -- 結果爲 b1
select xpath_string ('<a><b>b1</b><b>b2</b></a>', '//b[2]'); -- 結果爲 b2
select xpath_string ('<a><b>b1</b><b id="b_2">b2</b></a>', 'a/b[@id="b_2"]'); -- 結果爲 b2
select xpath_string ('<a><b class="bb">b1</b><b>b2</b><b>b3</b><c class="bb">c1</c><c>c2</c></a>', 'a/*[@class="bb"]/text()'); -- 結果爲 b1

xpath_boolean(xml string, xpath_expression string)

返回結果: 如果表達式的計算結果爲true或者找到匹配節點則返回true,否則返回false

返回類型: boolean

select xpath_boolean ('<a><b>b</b></a>', 'a/b'); -- 結果爲 true
select xpath_boolean ('<a><b>b</b></a>', 'a/c'); -- 結果爲 false
select xpath_boolean ('<a><b>b</b></a>', 'a/b = "b"'); -- 結果爲 true
select xpath_boolean ('<a><b>b</b></a>', 'a/b = "c"'); -- 結果爲 false
select xpath_boolean ('<a><b>10</b></a>', 'a/b = 10'); -- 結果爲 true
select xpath_boolean ('<a><b>10</b></a>', 'a/b < 10'); -- 結果爲 false

xpath_short(xml string, xpath_expression string) xpath_int(xml string, xpath_expression string) xpath_long(xml string, xpath_expression string)

返回結果: 如果匹配的節點爲數值則返回對應數值,否則返回0(如果數值溢出,則返回對應類型的最大值)

返回類型: smallint, int, bigint

select xpath_short ('<a>10</a>', 'a'); -- 結果爲 10
select xpath_short ('<a>999999</a>', 'a'); -- 結果爲 16959
select xpath_short ('<a>10.6</a>', 'a'); -- 結果爲 10
select xpath_short ('<a>10</a>', 'a = 11'); -- 結果爲 0
select xpath_short ('<a>this 2 is not a number</a>', 'a'); -- 結果爲 0
select xpath_int ('<a><b class="odd">1</b><b class="even">2</b><b class="odd">4</b><c>8</c></a>', 'sum(a/*)'); -- 結果爲 15
select xpath_int ('<a><b class="odd">1</b><b class="even">2</b><b class="odd">4</b><c>8</c></a>', 'sum(a/b)'); -- 結果爲 7
select xpath_int ('<a><b class="odd">1</b><b class="even">2</b><b class="odd">4</b><c>8</c></a>', 'sum(a/b[@class="odd"])'); -- 結果爲 5

xpath_float(xml string, xpath_expression string) xpath_double(xml string, xpath_expression string) xpath_number(xml string, xpath_expression string)

返回結果: 如果匹配的節點爲數值則返回對應數值,不是數值則返回NaN,未匹配到返回0.0(xpath_number同xpath_double)

返回類型: float, double

select xpath_float ('<a>b</a>', 'a = 10'); -- 結果爲 0.0
select xpath_float ('<a>b</a>', 'a'); -- 結果爲 NaN
select xpath_float ('<a>3.1415926</a>', 'a'); -- 結果爲 3.1415925
select xpath_double ('<a>3.1415926</a>', 'a'); -- 結果爲 3.1415926
select xpath_double ('<a>99999999</a>', 'a'); -- 結果爲 9.9999999E7

四、相關文章

Hive函數大全(含例子)之數學函數(Mathematical Functions)

Hive函數大全(含例子)之集合函數、日期函數、條件函數

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

五、下期預告

Hive函數大全(含例子)之數據聚合函數、表生成函數

Hive函數大全(含例子)之窗口和分析函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章