數學函數
下面表格中的函數爲Hive的內置數學函數,大部分當參數爲NULL時返回NULL。
返回類型 |
函數名 |
描述 |
|
round(double a) |
返回a經過四捨五入的 |
double |
round(double a, int d) |
返回a經過四捨五入,保留d位小數的DOUBLE 值 |
bigint |
floor(double a) |
返回小於等於a的最大BIGINT 值 |
bigint |
ceil(double a), ceiling(double a) |
返回大於等於a的最小BIGINT 值 |
double |
rand(), rand(int seed) |
返回一個均勻分佈在0到1之間的隨機數,指定seed將會確保產生的隨機數序列是確定的 |
double |
exp(double a), exp(decimal a) |
返回ea |
double |
ln(double a), ln(decimal a) |
返回a的自然對數值 |
double |
log10(double a), log10(decimal a) |
返回a的以10爲底的對數值 |
double |
log2(double a), log2(decimal a) |
返回a的以2爲底的對數值 |
double |
log(double base, double a) |
返回a以base爲底的對數值,除了DOUBLE 類型,還可以是DECIMAL 類型,並且兩種類型可以混合使用 |
double |
pow(double a, double p), power(double a, double p) |
返回ap |
double |
sqrt(double a), sqrt(decimal a) |
返回a的平方根 |
string |
bin(bigint a) |
返回a的二進制格式 |
string |
hex(bigint a) hex(string a) hex(binary a) |
如果參數爲整數或者二進制,返回十六進制的字符串,如果參數爲字符串,該函數將每個字符轉換爲十六進制表示,並返回結果字符串 |
binary |
unhex(string a) |
將每對字符解釋爲十六進制並轉換爲該十六進制的字節表示 |
string |
conv(bigint num, int from_base, int to_base), conv(string num, int from_base, int to_base) |
將數值從一種進製表示轉換爲另一種進制,比如從二進制轉換爲十進制 |
double |
abs(double a) |
返回a的絕對值 |
int or double |
pmod(int a, int b), pmod(double a, double b) |
返回a mod b的正數值 |
double |
sin(double a), sin(decimal a) |
返回a的正弦值,a爲弧度值 |
double |
asin(double a), asin(decimal a) |
如果1<=a<=-1,返回a的反正弦值,否則返回NULL |
double |
cos(double a), cos(decimal a) |
返回a的餘弦值,a爲弧度值 |
double |
acos(double a), acos(decimal a) |
如果-1<=a<=1,返回a的反餘弦值,否則返回NULL |
double |
tan(double a), tan(decimal a) |
返回a的正切值,a爲弧度值 |
double |
atan(double a), atan(decimal a) |
返回a的反正切值 |
double |
degrees(double a), degrees(decimal a) |
將a從弧度值轉換爲對應的角度值 |
double |
radians(double a), radians(double a) |
將a從角度值轉換爲弧度值 |
int or double |
positive(int a), positive(double a) |
返回a |
int or double |
negative(int a), negative(double a) |
返回-a |
double or int |
sign(double a), sign(decimal a) |
如果a爲正數返回1.0,若爲負數返回-1.0,否則返回0.0。參數爲DECIMAL 時返回值爲INT類型 |
double |
e() |
返回e的值 |
double |
pi() |
返回π的值 |
集合函數
下表爲Hive中的集合函數。
返回類型 |
函數名 |
描述 |
int |
size(Map<K.V>) |
返回map中的元素數量 |
int |
size(Array<T>) |
返回數組中的元素數量 |
array<K> |
map_keys(Map<K.V>) |
返回未經排序的包含map中keys的數組 |
array<V> |
map_values(Map<K.V>) |
返回未經排序的包含map中values的數組 |
boolean |
array_contains(Array<T>, value) |
如果數組包含value,返回true |
array<t> |
sort_array(Array<T>) |
將數組按照升序排序並返回 |
類型轉換函數
下表爲Hive中的類型轉換函數。
返回類型 |
函數名 |
描述 |
binary |
binary(string|binary) |
將輸入參數轉換爲binary |
<type> |
cast(expr as <type>) |
將表達式的結果expr轉換爲<type>,如果轉換不成功則返回NULL,例如cast(‘2014-08-09’ as date) |
日期函數
下表中爲Hive中的內置日期函數。
返回類型 |
函數名 |
描述 |
string |
from_unixtime(bigint unixtime[, string format]) |
將從unix時間(1970-01-01 00:00:00 UTC)開始的秒數轉換爲表示當前系統時區的時間戳,格式爲“1970-01-01 00:00:00” |
bigint |
unix_timestamp() |
返回當前Unix時間戳表示的秒數 |
bigint |
unix_timestamp(string date) |
將格式爲yyyy-MM-dd HH:mm:ss的字符串轉換爲Unix時間戳(秒),使用默認的時區和區域,如果失敗返回0 |
bigint |
unix_timestamp(string date, string pattern) |
根據指定模式將時間字符串轉換爲Unix時間戳(秒),失敗返回0 |
string |
to_date(string timestamp) |
返回時間戳字符串的日期部分,如:to_date("1970-01-01 00:00:00") = "1970-01-01" |
int |
year(string date) |
返回日期或時間戳字符串的年部分,如: year("1970-01-01 00:00:00") = 1970, year("1970-01-01") = 1970 |
int |
month(string date) |
返回日期或時間戳字符串的月部分,如: month("1970-11-01 00:00:00") = 11, month("1970-11-01") = 11 |
int |
day(string date) dayofmonth(date) |
返回日期或時間戳字符串的天部分,如:day("1970-11-01 00:00:00") = 1, day("1970-11-01") = 1 |
int |
hour(string date) |
返回時間戳的小時部分: hour('2009-07-30 12:58:59') = 12, hour('12:58:59') = 12 |
int |
minute(string date) |
返回時間戳的分鐘 |
int |
second(string date) |
返回時間戳的秒 |
int |
weekofyear(string date) |
返回時間戳的星期數,如: weekofyear("1970-11-01 00:00:00") = 44, weekofyear("1970-11-01") = 44 |
int |
datediff(string enddate, string startdate) |
返回從startdate到enddate的天數,如: datediff('2009-03-01', '2009-02-27') = 2 |
string |
date_add(string startdate, int days) |
向startdate增加指定的天數,如: date_add('2008-12-31', 1) = '2009-01-01' |
string |
date_sub(string startdate, int days) |
從startdate減去指定的天數,如: date_sub('2008-12-31', 1) = '2008-12-30' |
timestamp |
from_utc_timestamp(timestamp, string timezone) |
假設給定時間戳爲UTC時間,並將其轉換爲給定時區的時間戳 |
timestamp |
to_utc_timestamp(timestamp, string timezone) |
假設給定時間戳爲給定時區的時間,將其轉換爲UTC時間戳 |
條件函數
下表爲Hive支持的一些條件函數。
返回類型 |
函數名 |
描述 |
T |
if(boolean testCondition, T valueTrue, T valueFalseOrNull) |
如果testCondition爲真,返回valueTrue,否則返回valueFalseOrNull |
T |
COALESCE(T v1, T v2, ...) |
返回第一個不是NULL的v,若全部爲NULL,返回NULL |
T |
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END |
當a=b返回c,當a=d返回e,其它返回f |
T |
CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END |
當a=true返回b,當c=true返回d,其它返回e |
字符串函數
下表爲Hive內置的字符串函數。
返回類型 |
函數名 |
描述 |
int |
ascii(string str) |
返回str第一個字符串的數值 |
string |
base64(binary bin) |
將二進制參數轉換爲base64字符串 |
string |
concat(string|binary A, string|binary B...) |
返回將A和B按順序連接在一起的字符串,如:concat('foo', 'bar') 返回'foobar' |
array<struct<string,double>> |
context_ngrams(array<array<string>>, array<string>, int K, int pf) |
從一組標記化的句子中返回前k個文本 |
string |
concat_ws(string SEP, string A, string B...) |
類似concat() ,但使用自定義的分隔符SEP |
string |
concat_ws(string SEP, array<string>) |
類似concat_ws() ,但參數爲字符串數組 |
string |
decode(binary bin, string charset) |
使用指定的字符集將第一個參數解碼爲字符串,如果任何一個參數爲null,返回null。可選字符集爲: 'US_ASCII', 'ISO-8859-1', 'UTF-8', 'UTF-16BE', 'UTF-16LE', 'UTF-16' |
binary |
encode(string src, string charset) |
使用指定的字符集將第一個參數編碼爲binary ,如果任一參數爲null,返回null |
int |
find_in_set(string str, string strList) |
返回str在strList中第一次出現的位置,strList爲用逗號分隔的字符串,如果str包含逗號則返回0,若任何參數爲null,返回null。如: find_in_set('ab', 'abc,b,ab,c,def') 返回3 |
string |
format_number(number x, int d) |
將數字x格式化爲'#,###,###.##',四捨五入爲d位小數位,將結果做爲字符串返回。如果d=0,結果不包含小數點或小數部分 |
string |
get_json_object(string json_string, string path) |
從基於json path的json字符串中提取json對象,返回json對象的json字符串,如果輸入的json字符串無效返回null。Json 路徑只能有數字、字母和下劃線,不允許大寫和其它特殊字符 |
boolean |
in_file(string str, string filename) |
如果str在filename中以正行的方式出現,返回true |
int |
instr(string str, string substr) |
返回substr在str中第一次出現的位置。若任何參數爲null返回null,若substr不在str中返回0。Str中第一個字符的位置爲1 |
int |
length(string A) |
返回A的長度 |
int |
locate(string substr, string str[, int pos]) |
返回substr在str的位置pos後第一次出現的位置 |
string |
lower(string A) lcase(string A) |
返回字符串的小寫形式 |
string |
lpad(string str, int len, string pad) |
將str左側用字符串pad填充,長度爲len |
string |
ltrim(string A) |
去掉字符串A左側的空格,如:ltrim(' foobar ')的結果爲'foobar ' |
array<struct<string,double>> |
ngrams(array<array<string>>, int N, int K, int pf) |
從一組標記化的Returns the top-k 句子中返回前K個N-grams |
string |
parse_url(string urlString, string partToExtract [, string keyToExtract]) |
返回給定URL的指定部分,partToExtract的有效值包括HOST,PATH, QUERY, REF, PROTOCOL, AUTHORITY,FILE和USERINFO。例如: parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST') 返回 'facebook.com'.。當第二個參數爲QUERY時,可以使用第三個參數提取特定參數的值,例如: parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'QUERY', 'k1') 返回'v1' |
string |
printf(String format, Obj... args) |
將輸入參數進行格式化輸出 |
string |
regexp_extract(string subject, string pattern, int index) |
使用pattern從給定字符串中提取字符串。如: regexp_extract('foothebar', 'foo(.*?)(bar)', 2) 返回'bar' 有時需要使用預定義的字符類:使用'\s' 做爲第二個參數將匹配s,'s'匹配空格等。參數index是Java正則匹配器方法group()方法中的索引 |
string |
regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT) |
使用REPLACEMENT替換字符串INITIAL_STRING中匹配PATTERN的子串,例如: regexp_replace("foobar", "oo|ar", "") 返回'fb' |
string |
repeat(string str, int n) |
將str重複n次 |
string |
reverse(string A) |
將字符串A翻轉 |
string |
rpad(string str, int len, string pad) |
在str的右側使用pad填充至長度len |
string |
rtrim(string A) |
去掉字符串A右側的空格,如: rtrim(' foobar ') 返回 ' foobar' |
array<array<string>> |
sentences(string str, string lang, string locale) |
將自然語言文本處理爲單詞和句子,每個句子在適當的邊界分割,返回單詞的數組。參數lang和local爲可選參數,例如: sentences('Hello there! How are you?') 返回( ("Hello", "there"), ("How", "are", "you") ) |
string |
space(int n) |
返回n個空格的字符串 |
array |
split(string str, string pat) |
用pat分割字符串str,pat爲正則表達式 |
map<string,string> |
str_to_map(text[, delimiter1, delimiter2]) |
使用兩個分隔符將文本分割爲鍵值對。第一個分隔符將文本分割爲K-V 對,第二個分隔符分隔每個K-V 對。默認第一個分隔符爲“,“,第二個分隔符爲= |
string |
substr(string|binary A, int start) substring(string|binary A, int start) |
返回A從位置start直到結尾的子串 |
string |
substr(string|binary A, int start, int len) substring(string|binary A, int start, int len) |
返回A中從位置start開始,長度爲len的子串,如: substr('foobar', 4, 1) 返回 'b' |
string |
translate(string input, string from, string to) |
將input中出現在from中的字符替換爲to中的字符串,如果任何參數爲null,結果爲null |
string |
trim(string A) |
去掉字符串A兩端的空格 |
binary |
unbase64(string str) |
將base64字符串轉換爲二進制 |
string |
upper(string A) ucase(string A) |
返回字符串A的大寫形式 |
聚合函數
下表爲Hive內置的聚合函數。
返回類型 |
函數名 |
描述 |
BIGINT |
count(*) count(expr) count(DISTINCT expr[, expr_.]) |
count(*) – 返回檢索到的行的總數,包括含有NULL值的行。count(expr) – 返回expr表達式不是NULL的行的數量count(DISTINCT expr[, expr]) – 返回expr是唯一的且非NULL的行的數量 |
DOUBLE |
sum(col) sum(DISTINCT col) |
對組內某列求和(包含重複值)或者對組內某列求和(不包含重複值) |
DOUBLE |
avg(col), avg(DISTINCT col) |
對組內某列元素求平均值者(包含重複值或不包含重複值) |
DOUBLE |
min(col) |
返回組內某列的最小值 |
DOUBLE |
max(col) |
返回組內某列的最大值 |
DOUBLE |
variance(col), var_pop(col) |
返回組內某個數字列的方差 |
DOUBLE |
var_samp(col) |
返回組內某個數字列的無偏樣本方差 |
DOUBLE |
stddev_pop(col) |
返回組內某個數字列的標準差 |
DOUBLE |
stddev_samp(col) |
返回組內某個數字列的無偏樣本標準差 |
DOUBLE |
covar_pop(col1, col2) |
返回組內兩個數字列的總體協方差 |
DOUBLE |
covar_samp(col1, col2) |
返回組內兩個數字列的樣本協方差 |
DOUBLE |
corr(col1, col2) |
返回組內兩個數字列的皮爾遜相關係數 |
DOUBLE |
percentile(BIGINT col, p) |
返回組內某個列精確的第p位百分數,p必須在0和1之間 |
array<double> |
percentile(BIGINT col, array(p1 [, p2]...)) |
返回組內某個列精確的第p1,p2,……位百分數,p必須在0和1之間 |
DOUBLE |
percentile_approx(DOUBLE col, p [, B]) |
返回組內數字列近似的第p位百分數(包括浮點數),參數B控制近似的精確度,B值越大,近似度越高,默認值爲10000。當列中非重複值的數量小於B時,返回精確的百分數 |
array<double> |
percentile_approx(DOUBLE col, array(p1 [, p2]...) [, B]) |
同上,但接受並返回百分數數組 |
array<struct {'x','y'}> |
histogram_numeric(col, b) |
使用b個非均勻間隔的箱子計算組內數字列的柱狀圖(直方圖),輸出的數組大小爲b,double類型的(x,y)表示直方圖的中心和高度 |
array |
collect_set(col) |
返回消除了重複元素的數組 |
array |
collect_list(col) |
返回允許重複元素的數組 |
INTEGER |
ntile(INTEGER x) |
該函數將已經排序的分區分到x個桶中,併爲每行分配一個桶號。這可以容易的計算三分位,四分位,十分位,百分位和其它通用的概要統計 |
內置 Table-Generating函數(UDTF)
正常的用戶定義函數,如concat,輸入一個單行然後輸出一個單行,但table-generating函數將一個單輸入行轉換爲多個輸出行。下表爲Hive內置的table-generating函數。
返回類型 |
函數名 |
描述 |
N rows |
explode(ARRAY) |
參數列爲數組類型,將數組數據中的每個元素做爲一行返回 |
N rows |
explode(MAP) |
將輸入map中的每個鍵值對轉換爲兩列,一列爲key,另一列爲value,然後返回新行 |
|
inline(ARRAY<STRUCT[,STRUCT]>) |
分解struct數組到表中 |
Array Type |
explode(array<TYPE> a) |
對於數組a中的每個元素,該函數產生包含該元素的行For |
元組 |
json_tuple(jsonStr, k1, k2, ...) |
參數爲一組鍵k1,k2……和JSON字符串,返回值的元組。該方法比 |
元組 |
parse_url_tuple(url, p1, p2, ...) |
該方法同 |
N rows |
posexplode(ARRAY) |
行爲與參數爲數組的explode方法相似,但包含項在原始數組中的位置,返回(pos,value)的二元組 |
|
stack(INT n, v_1, v_2, ..., v_k) |
將v_1, ..., v_k 分爲n行,每行包含n/k列,n必須爲常數 |
使用語法”SELECT udtf(col) AS colAlias...”有以下幾點限制:
- 在SELECT中不允許再有其他表達式:不支持SELECT pageid, explode(adid_list) AS myCol...
- UDTF不能夠嵌套使用:不支持SELECT explode(explode(adid_list)) AS myCol...
- 不支持GROUP BY /CLUSTER BY / DISTRIBUTE BY / SORT BY:不支持SELECT explode(adid_list) AS myCol ... GROUP BY myCol