--=======================
查看內置的函數
--=======================
hive 不需要進入什么內置數據庫, 即可使用 show functions 命令列出所有內置的函數.
show functions; -- hive僅顯示函數的名稱, 沒有參數和返回值信息.
desc function function_name ; -- 該命令能顯示函數的具體用途.
impala 支持java/c++編寫udf, impala也內置了很多udf, 查看內置udf的方法是, 先進入 _impala_builtins 數據庫, 再使用 show functions 命令.
use _impala_builtins;
show functions;
implala 的 show functions 會顯示完整的函數簽名信息.
--=======================
幾個常用的功能函數
--=======================
cast(expr AS type), 類型轉換函數, 比如將number轉成string, 或相反.
typeof(), 該函數可以用來檢查其他函數返回值類型, hive 沒有對應的函數.
version(), 返回 impalad 的版本.
pid(), client 連接到 impalad 的 pid.
user(), 返回連接連接 impalad 的 linux username.
effective_user(), 一般情況下和和 user() 結果相同, 如果啟用了 delegation, effective_user() 返回代理 user id.
uuid(), 返回一個唯一的 guid 值.
impala 沒有 sequence 概念, 但我們可以使用 concat(cast(unix_timestamp() as string),uuid()), 前面加上了時間戳, 可以保證大概的順序.
--=======================
常用條件函數
--=======================
coalesce(type v1, type v2, ...) --返回第一個非null的參數
decode() -- 同Oracle的decode()函數
if(boolean condition, type ifTrue, type ifFalseOrNull) --如果第一參數為true,結果為第2個參數, 否則為第三個參數.
ifnull(type a, type ifNull) -- 同nvl().
isnull(type a, type ifNull) --同nvl().
nullif(expr1,expr2) -- 如果兩參數相等, 返回null.
nullifzero(numeric_expr) --如果參數為0, 返回null.
nullvalue(expression) --如果為null, 返回true.
nvl(type a, type ifNull) --如果第一個參數為null, 結果為第二個參數, 否則為第一個參數.
nvl2(type a, type ifNull, type ifNotNull) --如果第一個參數為null, 結果為第2個參數, 否則為第3個參數.
zeroifnull(numeric_expr)
nonnullvalue(expression)
isfalse(boolean)
isnotfalse(boolean)
isnottrue(boolean)
istrue(boolean)