1. 程式人生 > >hive支援sql大全(收藏版)

hive支援sql大全(收藏版)

hive操作資料庫還是比較方便的,因此才會有hbase與hive整合。下面我們hive的強大功能吧。為了增強閱讀性,下面提幾個問題:
hive支援哪些運算子?
hive是否支援左右連線?
hive如何擷取字串?
hive提供了那些系統函式?


目錄 一、關係運算:... 4 1. 等值比較: =. 4 2. 不等值比較: <>. 4 3. 小於比較: <. 4 4. 小於等於比較: <=. 4 5. 大於比較: >. 5 6. 大於等於比較: >=. 5 7. 空值判斷: IS NULL. 5 8. 非空判斷: IS NOT NULL. 6 9. LIKE比較: LIKE. 6 10. JAVA的LIKE操作: RLIKE. 6 11. REGEXP操作: REGEXP. 7 二、數學運算:... 7 1. 加法操作: +. 7 2. 減法操作: - 7 3. 乘法操作: *. 8 4. 除法操作: /. 8 5. 取餘操作: %.. 8 6. 位與操作: &.. 9 7. 位或操作: |. 9 8. 位異或操作: ^. 9 9.位取反操作: ~. 10 三、邏輯運算:... 10 1. 邏輯與操作: AND.. 10 2. 邏輯或操作: OR. 10 3. 邏輯非操作: NOT. 10 四、數值計算... 11 1. 取整函式: round. 11 2. 指定精度取整函式: round. 11 3. 向下取整函式: floor. 11 4. 向上取整函式: ceil 12 5. 向上取整函式: ceiling. 12 6. 取隨機數函式: rand. 12 7. 自然指數函式: exp. 13 8. 以10為底對數函式: log10. 13 9. 以2為底對數函式: log2. 13 10. 對數函式: log. 13 11. 冪運算函式: pow.. 14 12. 冪運算函式: power. 14 13. 開平方函式: sqrt. 14 14. 二進位制函式: bin. 14 15. 十六進位制函式: hex. 15 16. 反轉十六進位制函式: unhex. 15 17. 進位制轉換函式: conv. 15 18. 絕對值函式: abs. 16 19. 正取餘函式: pmod. 16 20. 正弦函式: sin. 16 21. 反正弦函式: asin. 16 22. 餘弦函式: cos. 17 23. 反餘弦函式: acos. 17 24. positive函式: positive. 17 25. negative函式: negative. 17 五、日期函式... 18 1. UNIX時間戳轉日期函式: from_unixtime. 18 2. 獲取當前UNIX時間戳函式: unix_timestamp. 18 3. 日期轉UNIX時間戳函式: unix_timestamp. 18 4. 指定格式日期轉UNIX時間戳函式: unix_timestamp. 18 5. 日期時間轉日期函式: to_date. 19 6. 日期轉年函式: year. 19 7. 日期轉月函式: month. 19 8. 日期轉天函式: day. 19 9. 日期轉小時函式: hour. 20 10. 日期轉分鐘函式: minute. 20 11. 日期轉秒函式: second. 20 12. 日期轉周函式: weekofyear. 20 13. 日期比較函式: datediff 21 14. 日期增加函式: date_add. 21 15. 日期減少函式: date_sub. 21 六、條件函式... 21 1. If函式: if 21 2. 非空查詢函式: COALESCE. 22 3. 條件判斷函式:CASE. 22 4. 條件判斷函式:CASE. 22 七、字串函式... 23 1. 字串長度函式:length. 23 2. 字串反轉函式:reverse. 23 3. 字串連線函式:concat. 23 4. 帶分隔符字串連線函式:concat_ws. 23 5. 字串擷取函式:substr,substring. 24 6. 字串擷取函式:substr,substring. 24 7. 字串轉大寫函式:upper,ucase. 24 8. 字串轉小寫函式:lower,lcase. 25 9. 去空格函式:trim.. 25 10. 左邊去空格函式:ltrim.. 25 11. 右邊去空格函式:rtrim.. 25 12. 正則表示式替換函式:regexp_replace. 26 13. 正則表示式解析函式:regexp_extract. 26 14. URL解析函式:parse_url 26 15. json解析函式:get_json_object. 27 16. 空格字串函式:space. 27 17. 重複字串函式:repeat. 27 18. 首字元ascii函式:ascii 28 19. 左補足函式:lpad. 28 20. 右補足函式:rpad. 28 21. 分割字串函式: split. 28 22. 集合查詢函式: find_in_set. 29 八、集合統計函式... 29 1. 個數統計函式: count. 29 2. 總和統計函式: sum.. 29 3. 平均值統計函式: avg. 30 4. 最小值統計函式: min. 30 5. 最大值統計函式: max. 30 6. 非空集合總體變數函式: var_pop. 30 7. 非空集合樣本變數函式: var_samp. 31 8. 總體標準偏離函式: stddev_pop. 31 9. 樣本標準偏離函式: stddev_samp. 31 10.中位數函式: percentile. 31 11. 中位數函式: percentile. 31 12. 近似中位數函式: percentile_approx. 32 13. 近似中位數函式: percentile_approx. 32 14. 直方圖: histogram_numeric. 32 九、複合型別構建操作... 32 1. Map型別構建: map. 32 2. Struct型別構建: struct. 33 3. array型別構建: array. 33 十、複雜型別訪問操作... 33 1. array型別訪問: A[n] 33 2. map型別訪問: M[key] 34 3. struct型別訪問: S.x. 34 十一、複雜型別長度統計函式... 34 1.      Map型別長度函式: size(Map<K.V>) 34 2.      array型別長度函式: size(Array<T>) 34 3.      型別轉換函式... 35








一、關係運算:1. 等值比較: =          語法:A=B          操作型別:所有基本型別          描述如果表示式A與表示式B相等,則為TRUE;否則為FALSE          舉例:          hive>select 1 from lxw_dual where 1=1;          1 2. 不等值比較: <>          語法: A <> B 操作型別: 所有基本型別 描述: 如果表示式A為NULL,或者表示式B為NULL,返回NULL;如果表示式A與表示式B不相等,則為TRUE;否則為FALSE 舉例: hive> select1 from lxw_dual where 1 <> 2; 1 3. 
小於比較: <
         語法: A < B 操作型別: 所有基本型別 描述: 如果表示式A為NULL,或者表示式B為NULL,返回NULL;如果表示式A小於表示式B,則為TRUE;否則為FALSE 舉例: hive> select1 from lxw_dual where 1 < 2; 1
4. 小於等於比較: <= 語法: A <= B 操作型別: 所有基本型別 描述: 如果表示式A為NULL,或者表示式B為NULL,返回NULL;如果表示式A小於或者等於表示式B,則為TRUE;否則為FALSE 舉例: hive> select1 from lxw_dual where 1 <= 1; 1 5. 大於比較
: >
語法: A > B 操作型別: 所有基本型別 描述: 如果表示式A為NULL,或者表示式B為NULL,返回NULL;如果表示式A大於表示式B,則為TRUE;否則為FALSE 舉例: hive> select1 from lxw_dual where 2 > 1; 1
6. 大於等於比較: >= 語法: A >= B 操作型別: 所有基本型別 描述: 如果表示式A為NULL,或者表示式B為NULL,返回NULL;如果表示式A大於或者等於表示式B,則為TRUE;否則為FALSE 舉例: hive> select1 from lxw_dual where 1 >= 1; 1
注意:String的比較要注意(常用的時間比較可以先to_date之後再比較) hive> select* from lxw_dual; OK 201111120900:00:00     2011111209
hive> selecta,b,a<b,a>b,a=b from lxw_dual; 201111120900:00:00     2011111209      false  true    false
7. 空值判斷: IS NULL 語法: A IS NULL 操作型別: 所有型別 描述: 如果表示式A的值為NULL,則為TRUE;否則為FALSE 舉例: hive> select1 from lxw_dual where null is null; 1
8. 非空判斷: IS NOTNULL 語法: A IS NOT NULL 操作型別: 所有型別 描述: 如果表示式A的值為NULL,則為FALSE;否則為TRUE 舉例: hive> select1 from lxw_dual where 1 is not null; 1
9. LIKE比較: LIKE 語法: A LIKE B 操作型別: strings 描述: 如果字串A或者字串B為NULL,則返回NULL;如果字串A符合表示式B   的正則語法,則為TRUE;否則為FALSE。B中字元”_”表示任意單個字元,而字元”%”表示任意數量的字元。 舉例: hive> select1 from lxw_dual where 'football' like 'foot%'; 1 hive> select1 from lxw_dual where 'football' like 'foot____'; 1 注意:否定比較時候用NOT ALIKE B hive> select1 from lxw_dual where NOT 'football' like 'fff%'; 1
10. JAVALIKE操作: RLIKE 語法: A RLIKE B 操作型別: strings 描述: 如果字串A或者字串B為NULL,則返回NULL;如果字串A符合JAVA正則表示式B的正則語法,則為TRUE;否則為FALSE。 舉例: hive> select1 from lxw_dual where 'footbar’ rlike '^f.*r$’; 1 注意:判斷一個字串是否全為數字: hive>select 1from lxw_dual where '123456' rlike '^\\d+$'; 1 hive> select1 from lxw_dual where '123456aa' rlike '^\\d+$';
11. REGEXP操作: REGEXP 語法: A REGEXP B 操作型別: strings 描述: 功能與RLIKE相同 舉例: hive> select1 from lxw_dual where 'footbar' REGEXP '^f.*r$'; 1 二、數學運算:1. 加法操作: + 語法: A + B 操作型別:所有數值型別 說明:返回A與B相加的結果。結果的數值型別等於A的型別和B的型別的最小父型別(詳見資料型別的繼承關係)。比如,int + int 一般結果為int型別,而int + double 一般結果為double型別 舉例: hive> select1 + 9 from lxw_dual; 10 hive> createtable lxw_dual as select 1 + 1.2 from lxw_dual; hive>describe lxw_dual; _c0     double
2. 減法操作: - 語法: A – B 操作型別:所有數值型別 說明:返回A與B相減的結果。結果的數值型別等於A的型別和B的型別的最小父型別(詳見資料型別的繼承關係)。比如,int – int 一般結果為int型別,而int – double 一般結果為double型別 舉例: hive> select10 – 5 from lxw_dual; 5 hive> createtable lxw_dual as select 5.6 – 4 from lxw_dual; hive>describe lxw_dual; _c0     double
3. 乘法操作: * 語法: A * B 操作型別:所有數值型別 說明:返回A與B相乘的結果。結果的數值型別等於A的型別和B的型別的最小父型別(詳見資料型別的繼承關係)。注意,如果A乘以B的結果超過預設結果型別的數值範圍,則需要通過cast將結果轉換成範圍更大的數值型別 舉例: hive> select40 * 5 from lxw_dual; 200
4. 除法操作: / 語法: A / B 操作型別:所有數值型別 說明:返回A除以B的結果。結果的數值型別為double 舉例: hive> select40 / 5 from lxw_dual; 8.0
注意:hive中最高精度的資料型別是double,只精確到小數點後16位,在做除法運算的時候要特別注意 hive>select ceil(28.0/6.999999999999999999999) from lxw_duallimit 1;    結果為4 hive>select ceil(28.0/6.99999999999999) from lxw_dual limit1;            結果為5
5. 取餘操作: % 語法: A % B 操作型別:所有數值型別 說明:返回A除以B的餘數。結果的數值型別等於A的型別和B的型別的最小父型別(詳見資料型別的繼承關係)。 舉例: hive> select 41 % 5 from lxw_dual; 1 hive> select 8.4 % 4 from lxw_dual; 0.40000000000000036 注意:精度在hive中是個很大的問題,類似這樣的操作最好通過round指定精度 hive> select round(8.4 % 4 , 2) from lxw_dual; 0.4 6. 位與操作: & 語法: A & B 操作型別:所有數值型別 說明:返回A和B按位進行與操作的結果。結果的數值型別等於A的型別和B的型別的最小父型別(詳見資料型別的繼承關係)。 舉例: hive> select 4 & 8 from lxw_dual; 0 hive> select 6 & 4 from lxw_dual; 4
7. 位或操作: | 語法: A | B 操作型別:所有數值型別 說明:返回A和B按位進行或操作的結果。結果的數值型別等於A的型別和B的型別的最小父型別(詳見資料型別的繼承關係)。 舉例: hive> select 4 | 8 from lxw_dual; 12 hive> select 6 | 8 from lxw_dual; 14
8. 位異或操作: ^ 語法: A ^ B 操作型別:所有數值型別 說明:返回A和B按位進行異或操作的結果。結果的數值型別等於A的型別和B的型別的最小父型別(詳見資料型別的繼承關係)。 舉例: hive> select 4 ^ 8 from lxw_dual; 12 hive> select 6 ^ 4 from lxw_dual; 2
9.位取反操作: ~ 語法: ~A 操作型別:所有數值型別 說明:返回A按位取反操作的結果。結果的數值型別等於A的型別。 舉例: hive> select ~6 from lxw_dual; -7 hive> select ~4 from lxw_dual; -5 三、邏輯運算:1. 邏輯與操作: AND 語法: A AND B 操作型別:boolean 說明:如果A和B均為TRUE,則為TRUE;否則為FALSE。如果A為NULL或B為NULL,則為NULL 舉例: hive> select 1 from lxw_dual where 1=1 and 2=2; 1
2. 邏輯或操作: OR 語法: A OR B 操作型別:boolean 說明:如果A為TRUE,或者B為TRUE,或者A和B均為TRUE,則為TRUE;否則為FALSE 舉例: hive> select 1 from lxw_dual where 1=2 or 2=2; 1
3. 邏輯非操作: NOT 語法: NOT A 操作型別:boolean 說明:如果A為FALSE,或者A為NULL,則為TRUE;否則為FALSE 舉例: