Hue-hive sql經常使用函數詳解

什麼是hue

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

hue的查詢工具

hive

hive是基於Hadoop的一個數據倉庫工具,用來進行數據提取、轉化、加載,這是一種能夠存儲、查詢和分析存儲在Hadoop中的大規模數據的機制。hive數據倉庫工具能將結構化的數據文件映射爲一張數據庫表,並提供SQL查詢功能,能將SQL語句轉變成MapReduce任務來執行。Hive的優勢是學習成本低,能夠經過相似SQL語句實現快速MapReduce統計,使MapReduce變得更加簡單,而沒必要開發專門的MapReduce應用程序java

Impala

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

Aggregate(聚合函數)

avg (col)

返回該組中元素的平均值或該組中列的不一樣值的平均值json

count([DISTINCT] col)

count(*)返回檢索到的行總數,包括包含空值的行。count(expr)返回所提供的表達式爲非空的行數。count(DISTINCT expr[, expr])返回所提供的表達式惟一且非空的行數。能夠經過hive. optimized .distinct.rewrite優化執行。api

sum(col)

返回組中元素的和或組中列的不一樣值的和數組

max(col),min(col)

返回組中列的最大值,最小值瀏覽器

collect_set(col)

返回一組消除了重複元素的對象bash

Analytic(分析函數)

cume_dist()

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

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

查詢結果以下:app

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開始)解密輸入。可使用12八、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開始)。可使用12八、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

原創文章首發於 軟件測試微課堂 公衆號

相關文章
相關標籤/搜索