什麼是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
原創文章首發於 軟體測試微課堂 公眾號