Hue-hive sql常用函式詳解

pujen_yuan發表於2020-04-05

什麼是hue

HUE是一個開源的Apache Hadoop UI系統,早期由Cloudera開發,後來貢獻給開源社群。它是基於Python Web框架Django實現的。通過使用Hue我們可以通過瀏覽器方式操縱Hadoop叢集。例如put、get、執行MapReduce Job等等

hue的查詢工具

hive

hive是基於Hadoop的一個資料倉儲工具,用來進行資料提取、轉化、載入,這是一種可以儲存、查詢和分析儲存在Hadoop中的大規模資料的機制。hive資料倉儲工具能將結構化的資料檔案對映為一張資料庫表,並提供SQL查詢功能,能將SQL語句轉變成MapReduce任務來執行。Hive的優點是學習成本低,可以通過類似SQL語句實現快速MapReduce統計,使MapReduce變得更加簡單,而不必開發專門的MapReduce應用程式

Impala

Impala是Cloudera公司主導開發的新型查詢系統,它提供SQL語義,能查詢儲存在Hadoop的HDFS和HBase中的PB級大資料。已有的Hive系統雖然也提供了SQL語義,但由於Hive底層執行使用的是MapReduce引擎,仍然是一個批處理過程,難以滿足查詢的互動性。相比之下,Impala的最大特點也是最大賣點就是它的快速。

Aggregate(聚合函式)

avg (col)

返回該組中元素的平均值或該組中列的不同值的平均值

count([DISTINCT] col)

count(*)返回檢索到的行總數,包括包含空值的行。count(expr)返回所提供的表示式為非空的行數。count(DISTINCT expr[, expr])返回所提供的表示式唯一且非空的行數。可以通過hive. optimized .distinct.rewrite優化執行。

sum(col)

返回組中元素的和或組中列的不同值的和

max(col),min(col)

返回組中列的最大值,最小值

collect_set(col)

返回一組消除了重複元素的物件

Analytic(分析函式)

cume_dist()

計算一行在組中的相對位置,CUME_DIST總是返回大於0、小於或等於1的數,該數表示該行在N行中的位置

select 
    loan_amount,
    user_id,
    cume_dist() over(order by loan_amount) as rn1
	
from  fin_tmp.app_user_y where user_id='30765911715' 
複製程式碼

查詢結果如下:

loan_amount user_id rn1
700 30765911715 0.25
1100 30765911715 0.5
4800 30765911715 0.75
10000 30765911715 1
row_number () over ([partition_by_clause] order_by_clause)

返回一個遞增的整數序列,從1開始。對分割槽by子句生成的每個組重新啟動序列。輸出序列為重複的輸入值包含不同的值。因此,無論輸入值是否重複,序列都不會包含任何重複或空白。

select 
    create_time,
    user_id,
	row_number ( ) over ( PARTITION BY user_id ORDER BY create_time進行排序,執行完這個操作後對每一條資料進行順序標號,從1開始遞增,如果標號出現相同值時給不同的序號。 DESC ) rn
from fin_tmp.app_user_y
複製程式碼

對使用者表app_user_y中的user_id欄位進行分組,然後按照create_time進行排序,執行完這個操作後對每一條資料進行順序標號,從1開始遞增,如果標號出現相同值時給不同的序號。

Collection(集合函式)

array_contains(Arraya,val)

如果陣列內包含val,返回True;如果fullname這一列不是陣列形式,先用array()函式轉化下

sort_array(Array a)

根據陣列元素的自然順序對輸入陣列按升序排序並返回它

create_union(tag,val1,val2,...)

用標記引數指向的值建立一個聯合型別

map(key1, value1, ...)

建立具有給定鍵/值對的對映

named_struct(name1, val1, ...)

用給定的欄位名和值建立結構,注意:這裡的name和val只能是給定的值,用已有的列不行

struct(val1, val2, ...)

建立具有給定欄位值的結構,這裡的val可以是已有的列,也可以是給定的值

Complex Type(複合型別)

array(val1, val2, ...)

用給定的元素建立一個陣列

Conditional(條件函式)

assert_true(BOOLEAN condition)

如果成立返回NULL,如果不成立拋異常

select assert_true(2>1) from fin_tmp.app_user_y limit 1

select assert_true(user_id is not null) from fin_tmp.app_user_y limit 1
複製程式碼
coalesce(T v1, T v2, ...)

返回其引數中的第一個非空表示式,當你要在n個欄位中選取某一個非空值

if(BOOLEAN testCondition, T valueTrue, T valueFalseOrNull)

當testCondition為真時返回valueTrue,否則返回valueFalseOrNull

select if (2>1,2,1) from fin_tmp.app_user_y limit 1   >>2
select if (2=1,2,1) from fin_tmp.app_user_y limit 1   >>1
複製程式碼
isnotnull(a),isnull(a)

如果a不為空,則返回true,否則返回false;如果a為空,則返回true,否則返回false

nullif(a, b)

如果a=b返回NULL;否則返回一個(從Hive 2.2.0開始)

nvl(T value, T default_value)

返回預設值,如果值為空,否則返回值(如Hive 0.11)

Date(日期函式)

add_months(DATE|STRING|TIMESTAMP start_date, INT num_months)

返回start_date之後的num_months的日期(從Hive 1.1.0開始)。start_date是一個字串、日期或時間戳。num_months是一個整數。start_date的時間部分被忽略。如果start_date是一個月的最後一天,或者結果月份的天數少於start_date的day元件的天數,那麼結果就是結果月份的最後一天。否則,結果具有與start_date相同的day元件

current_date

注意沒有(),返回查詢求值開始時的當前日期(從Hive 1.2.0開始)。同一查詢中的所有current_date呼叫都返回相同的值

current_timestamp()

返回查詢求值開始時的當前時間戳(從Hive 1.2.0開始)。同一查詢中的所有current_timestamp呼叫都返回相同的值

datediff(STRING enddate, STRING startdate)

返回從起始日期到結束日期的天數:datediff('2009-03-01', '2009-02-27') = 2

date_add(DATE startdate, INT days)

新增日期日期:date_add('2008-12-31', 1) = '2009-01-01'。T = pre 2.1.0: STRING, 2.1.0 on: DATE

date_format(DATE|TIMESTAMP|STRING ts, STRING fmt)

將日期/時間戳/字串轉換為日期格式fmt指定的字串值(從Hive 1.2.0開始)。支援的格式是JavaSimpleDateFormat格式——docs.oracle.com/javase/7/do…('2015-04-08', 'y') = '2015'

date_sub(DATE startdate, INT days)

減去開始日期的天數:date_sub('2008-12-31', 1) = '2008-12-30'。T = pre 2.1.0: STRING, 2.1.0 on: DATE

day(STRING date)

返回日期或時間戳字串的日期部分:day('1970-11-01 00:00:00') = 1, day('1970-11-01') = 1

dayofmonth(STRING date)

返回日期或時間戳字串的日期部分:dayofmonth('1970-11-01 00:00:00') = 1, dayofmonth('1970-11-01') =11

from_unixtime(BIGINT unixtime [, STRING format])

將yyyy-MM-dd HH:mm:ss格式的時間字串轉換為Unix時間戳(以秒為單位),使用預設時區和預設地區,如果轉換失敗,返回0:unix_timestamp('2009-03-20 11:30:01') = 1237573801

hour(STRING date)

返回時間戳的時間:hour('2009-07-30 12:58:59') = 12, hour('12:58:59') = 12。

last_day(STRING date),minute(STRING date),month(STRING date),second(STRING date)

返回日期所屬的月份的最後一天(從Hive 1.1.0開始)。日期是一個格式為'yyyy-MM-dd HH:mm:ss'或'yyyy-MM-dd'的字串。last_day('1970-11-01 00:11:00') = 1970-11-30 返回日期或時間戳字串的分鐘數:minute('1970-11-01 00:00:00') = 00, minute('1970-11-01 00:12:00') = 12 返回日期或時間戳字串的月份部分:month('1970-11-01 00:00:00') = 11, month('1970-11-01') = 11 返回日期或時間戳字串的分鐘數:second('1970-11-01 00:00:01') = 01

months_between(DATE|TIMESTAMP|STRING date1, DATE|TIMESTAMP|STRING date2)

返回日期date1和date2之間的月數(從Hive 1.2.0開始)。如果date1晚於date2,則結果為正數。如果date1早於date2,則結果為負。如果date1和date2是一個月的相同天數或兩個月的最後幾天,那麼結果總是一個整數。否則,UDF根據31天的月份計算結果的小數部分,並考慮date1和date2時間元件的差異。date1和date2型別可以是“yyyy-MM-dd”或“yyyy-MM-dd HH:mm:ss”格式的日期、時間戳或字串。結果四捨五入到小數點後八位。例如:months_between('1997-02-28 10:30:00', '1996-10-30') = 3.94959677

next_day(STRING start_date, STRING day_of_week)

返回比start_date晚的第一個日期,並將其命名為day_of_week(從Hive 1.2.0開始)。start_date是一個字串/日期/時間戳。day_of_week是指2個字母、3個字母或一週中某一天的全稱(如Mo、tue、FRIDAY)。start_date的時間部分被忽略。例如:next_day('2020-03-31','Monday') = 2020-04-06;及返回下週的的週一

quarter(DATE|TIMESTAMP|STRING a)

獲取日期、時間戳或字串在一年中的季度數,範圍為1到4。示例:quarter('2015-04-08') = 2

to_date(STRING timestamp)

返回時間戳字串的日期部分,例如to_date('1970-01-01 00:00:00')=1970-01-01

weekofyear(STRING date)

返回時間戳字串的週數:weekofyear('1970-11-01 00:00:00') = 44, weekofyear('1970-11-01') = 44。

year(STRING date)

返回日期或時間戳字串的年份部分:year('1970-01-01 00:00:00') = 1970, year('1970-01-01') = 1970

Mathematical(數學函式)

abs(DOUBLE a)

返回絕對值

ceil(DOUBLE a)

返回等於或大於a的最小BIGINT值

floor(DOUBLE a)

返回等於或小於a的最大BIGINT值

rand([INT seed])

返回一個從0到1均勻分佈的隨機數(從行到行變化)。指定種子將確保生成的隨機數序列是確定的

round(DOUBLE a [, INT d])

返回四捨五入的BIGINT值a或a的四捨五入到d位小數

Misc(型別函式)

aes_decrypt(BINARY input, STRING|BINARY key)

使用AES(從Hive 1.3.0開始)解密輸入。可以使用128、192或256位的金鑰長度。如果安裝了Java Cryptography Extension (JCE)無限強度管轄策略檔案,則可以使用192和256位金鑰。如果引數為NULL或鍵長度不屬於允許的值之一,則返回值為NULL。例如:aes_decrypt(unbase64('y6Ss+zCYObpCbgfWfyNWTw=='), '1234567890123456') =' ABC'。

aes_encrypt(STRING|BINARY input, STRING|BINARY key)

使用AES加密輸入(從Hive 1.3.0開始)。可以使用128、192或256位的金鑰長度。如果安裝了Java Cryptography Extension (JCE)無限強度管轄策略檔案,則可以使用192和256位金鑰。如果引數為NULL或鍵長度不屬於允許的值之一,則返回值為NULL。例如:base64(aes_encrypt('ABC', '1234567890123456')) =' y6Ss+zCYObpCbgfWfyNWTw=='。

crc32(STRING|BINARY a)

為字串或二進位制引數計算迴圈冗餘校驗值並返回bigint值(從Hive 1.3.0開始)。例如:crc32('ABC') = 2743272264。

current_database()

返回當前資料庫名

current_user()

返回當前使用者名稱

get_json_object(STRING json, STRING jsonPath)

支援JSONPath的有限版本($:Root object,。:子操作符,[]:下標操作符為陣列,*:萬用字元為[]

hash(a1[, a2...])

返回引數的雜湊值

md5(STRING|BINARY a)

計算字串或二進位制檔案的MD5 128位校驗和(從Hive 1.3.0開始)。該值以32個十六進位制數字的字串形式返回,如果引數為NULL,則返回NULL。示例:md5('ABC') = '902fbdd2b1df0c4f70b4a5d23525e9

String(字串函式)

ascii(STRING str)

返回str的第一個字元的數值

base64(BINARY bin)

將引數從二進位制轉換為以64為基數的字串

concat(STRING|BINARY a, STRING|BINARY b...)

按順序將作為引數傳入的字串或位元組連線起來,從而返回字串或位元組。例如,concat('foo', 'bar')的結果是'foobar'。注意,這個函式可以接受任意數量的輸入字串

substr(STRING|BINARY A, INT start [, INT len])

返回從起始位置到字串結束的位元組陣列的子字串或片段,或使用可選長度len。例如,substr('foobar', 4)會返回'bar'

substring(STRING|BINARY a, INT start [, INT len])

返回從起始位置到字串結束的位元組陣列的子字串或片段,或使用可選長度len。例如,substr('foobar', 4)會返回'bar'

upper(STRING a)

返回將a的所有字元轉換為大寫字母后得到的字串。例如,upper('fOoBaR')會導致'fOoBaR'

Data Masking(資料遮蔽函式)

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

返回一個隱藏的str版本(從Hive 2.1.0開始)。預設情況下,大寫字母轉換為“X”,小寫字母轉換為“X”,數字轉換為“n”。例如,mask("abcd-EFGH-8765-4321")的結果是xx- xx- nnnn-nnnn。您可以通過提供額外的引數來覆蓋掩碼中使用的字元:第二個引數控制大寫字母的掩碼字元,第三個引數控制小寫字母,第四個引數控制數字。例如,mask(“abcd - efgh - 8765 - 4321”,“U”、“l”、“#”)返回llll-UUUU - # # # # # # # #

mask_first_n(STRING str [, INT n])

返回一個掩蔽版本的str與前n個值掩蔽(如Hive 2.1.0)。將大寫字母轉換為“X”,將小寫字母轉換為“X”,將數字轉換為“n”。例如,mask_first_n(“1234-5678-8765-4321”,4)的結果是nnnn-5678-8765-4321

mask_last_n(STRING str [, INT n])

返回一個隱藏的str版本,最後n個值被隱藏(從Hive 2.1.0開始)。將大寫字母轉換為“X”,將小寫字母轉換為“X”,將數字轉換為“n”。例如,mask_last_n(“1234-5678-8765-4321”,4)的結果是1234-5678-8765-nnnn

mask_show_first_n(STRING str [, INT n])

返回一個掩碼版本的str,顯示前n個未掩碼的字元(從Hive 2.1.0開始)。將大寫字母轉換為“X”,將小寫字母轉換為“X”,將數字轉換為“n”。例如,mask_show_first_n(“1234-5678-8765-4321”,4)的結果是1234-nnnn-nnnn-nnnn

mask_show_last_n(STRING str [, INT n])

返回一個掩碼版本的str,顯示最後n個未掩碼的字元(從Hive 2.1.0開始)。將大寫字母轉換為“X”,將小寫字母轉換為“X”,將數字轉換為“n”。例如,mask_show_last_n(“1234-5678-8765-4321”,4)的結果是nnnn-nnnn-nnnn-4321

mask_hash(STRING|CHAR|VARCHAR str)

返回一個基於str的雜湊值(從Hive 2.1.0開始)。雜湊是一致的,可用於跨表連線帶遮蔽的值。這個函式對於非字串型別返回null

原創文章首發於 軟體測試微課堂 公眾號

Hue-hive sql常用函式詳解

相關文章