[TOC]
# 內置函數
內容較多,見《Hive官方文檔》
`https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF`
測試各種內置函數的快捷方法:
1. 創建一個dual表
~~~
create table dual(id string);
~~~
load一個文件(一行,一個空格)到dual表
~~~
select substr('angelababy',2,3) from dual;
~~~
# 日期函數
UNIX時間戳轉日期函數: from_unixtime
獲取當前UNIX時間戳函數: unix_timestamp
日期轉UNIX時間戳函數: unix_timestamp
指定格式日期轉UNIX時間戳函數: unix_timestamp
日期時間轉日期函數: to_date
日期轉年函數: year
日期轉月函數: month
日期轉天函數: day
日期轉小時函數: hour
日期轉分鐘函數: minute
日期轉秒函數: second
日期轉周函數: weekofyear
日期比較函數: datediff
日期增加函數: date_add
日期減少函數: date_sub
**UNIX 時間戳轉日期函數 : from_unixtime**
語法:` from_unixtime(bigint unixtime[, string format])`
返回值: string
說明: 轉化UNIX時間戳(從1970-01-01 00:00:00 UTC到指定時間的秒數)到當前時區的時間格式
舉例:
~~~
hive> select from_unixtime(1323308943,'yyyyMMdd') from dual;
20111208
~~~
**獲取當前 UNIX 時間戳函數 : unix_timestamp**
語法: unix_timestamp()
返回值: bigint
說明: 獲得當前時區的UNIX時間戳
舉例:
~~~
hive> select unix_timestamp() from dual;
1323309615
~~~
**日期轉 UNIX 時間戳函數 : unix_timestamp**
語法: unix_timestamp(string date)
返回值: bigint
說明: 轉換格式為`"yyyy-MM-dd HH:mm:ss"`的日期到UNIX時間戳。如果轉化失敗,則返回0。
舉例:
~~~
hive> select unix_timestamp('2011-12-07 13:01:03') from dual;
1323234063
~~~
**指定格式日期轉 UNIX 時間戳函數 : unix_timestamp**
語法: unix_timestamp(string date, string pattern)
返回值: bigint
說明: 轉換pattern格式的日期到UNIX時間戳。如果轉化失敗,則返回0。
舉例:
~~~
hive> select unix_timestamp('20111207 13:01:03','yyyyMMdd HH:mm:ss') from dual;
1323234063
~~~
**日期時間轉日期函數 : to_date**
語法: to_date(string timestamp)
返回值: string
說明: 返回日期時間字段中的日期部分。
舉例:
~~~
hive> select to_date('2011-12-08 10:03:01') from dual;
2011-12-08
~~~
**日期轉年函數 : year**
語法: year(string date)
返回值: int
說明: 返回日期中的年。
舉例:
~~~
hive> select year('2011-12-08 10:03:01') from dual;
2011
hive> select year('2012-12-08') from dual;
2012
~~~
**日期轉月函數 : month**
語法: month (string date)
返回值: int
說明: 返回日期中的月份。
舉例:
~~~
hive> select month('2011-12-08 10:03:01') from dual;
12
hive> select month('2011-08-08') from dual;
8
~~~
**日期轉天函數 : day**
語法: day (string date)
返回值: int
說明: 返回日期中的天。
舉例:
~~~
hive> select day('2011-12-08 10:03:01') from dual;
8
hive> select day('2011-12-24') from dual;
24
~~~
**日期轉小時函數 : hour**
語法: hour (string date)
返回值: int
說明: 返回日期中的小時。
舉例:
~~~
hive> select hour('2011-12-08 10:03:01') from dual;
10
~~~
**日期轉分鐘函數 : minute**
語法: minute (string date)
返回值: int
說明: 返回日期中的分鐘。
舉例:
~~~
hive> select minute('2011-12-08 10:03:01') from dual;
3
~~~
**日期轉秒函數 : second**
語法: second (string date)
返回值: int
說明: 返回日期中的秒。
舉例:
~~~
hive> select second('2011-12-08 10:03:01') from dual;
1
~~~
**日期轉周函數 : weekofyear**
語法: weekofyear (string date)
返回值: int
說明: 返回日期在當前的周數。
舉例:
~~~
hive> select weekofyear('2011-12-08 10:03:01') from dual;
49
~~~
**日期比較函數 : datediff**
語法: datediff(string enddate, string startdate)
返回值: int
說明: 返回結束日期減去開始日期的天數。
舉例:
~~~
hive> select datediff('2012-12-08','2012-05-09') from dual;
213
~~~
**日期增加函數 : date_add**
語法: date_add(string startdate, int days)
返回值: string
說明: 返回開始日期startdate增加days天后的日期。
舉例:
~~~
hive> select date_add('2012-12-08',10) from dual;
2012-12-18
~~~
**日期減少函數 : date_sub**
語法: date_sub (string startdate, int days)
返回值: string
說明: 返回開始日期startdate減少days天后的日期。
舉例:
~~~
hive> select date_sub('2012-12-08',10) from dual;
2012-11-28
~~~
# 條件函數
If函數: if
非空查找函數: COALESCE
條件判斷函數:CASE
**If 函數 : if**
語法: `if(boolean testCondition, T valueTrue, T valueFalseOrNull)`
返回值: T
說明: 當條件testCondition為TRUE時,返回valueTrue;否則返回valueFalseOrNull
舉例:
~~~
hive> select if(1=2,100,200) from dual;
200
hive> select if(1=1,100,200) from dual;
100
~~~
**非空查找函數 : COALESCE**
語法: `COALESCE(T v1, T v2, …)`
返回值: T
說明: 返回參數中的第一個非空值;如果所有值都為NULL,那么返回NULL
舉例:
~~~
hive> select COALESCE(null,'100','50′) from dual;
100
~~~
**條件判斷函數: CASE**
語法 : `CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END`
返回值 : T
說明:如果 a 等于 b ,那么返回 c ;如果 a 等于 d ,那么返回 e ;否則返回 f
舉例:
~~~
hive> Select case 100 when 50 then 'tom' when 100 then 'mary' else 'tim' end from dual;
mary
~~~
# 字符串函數
字符串長度函數:length
字符串反轉函數:reverse
字符串連接函數:concat
帶分隔符字符串連接函數:concat_ws
字符串截取函數:substr,substring
字符串截取函數:substr,substring
字符串轉大寫函數:upper,ucase
字符串轉小寫函數:lower,lcase
去空格函數:trim
左邊去空格函數:ltrim
右邊去空格函數:rtrim
正則表達式替換函數:regexp_replace
正則表達式解析函數:regexp_extract
URL解析函數:parse_url
json解析函數:get_json_object
空格字符串函數:space
重復字符串函數:repeat
首字符ascii函數:ascii
左補足函數:lpad
右補足函數:rpad
分割字符串函數: split
集合查找函數: find_in_set
**字符串長度函數: length**
語法: length(string A)
返回值: int
說明:返回字符串A的長度
舉例:
~~~
hive> select length('abcedfg') from dual;
7
~~~
**字符串反轉函數: reverse**
語法: reverse(string A)
返回值: string
說明:返回字符串A的反轉結果999999舉例:
~~~
hive> select reverse(abcedfg’) from dual;
gfdecba
~~~
- linux
- 常用命令
- 高級文本命令
- 面試題
- redis
- String
- list
- hash
- set
- sortedSet
- 案例-推薦
- java高級特性
- 多線程
- 實現線程的三種方式
- 同步關鍵詞
- 讀寫鎖
- 鎖的相關概念
- 多線程的join
- 有三個線程T1 T2 T3,保證順序執行
- java五種線程池
- 守護線程與普通線程
- ThreadLocal
- BlockingQueue消息隊列
- JMS
- 反射
- volatile
- jvm
- IO
- nio
- netty
- netty簡介
- 案例一發送字符串
- 案例二發送對象
- 輕量級RPC開發
- 簡介
- spring(IOC/AOP)
- spring初始化順序
- 通過ApplicationContextAware加載Spring上下文
- InitializingBean的作用
- 結論
- 自定義注解
- zk在框架中的應用
- hadoop
- 簡介
- hadoop集群搭建
- hadoop單機安裝
- HDFS簡介
- hdfs基本操作
- hdfs環境搭建
- 常見問題匯總
- hdfs客戶端操作
- mapreduce工作機制
- 案列-單詞統計
- 局部聚合Combiner
- 案列-流量統計(分區,排序,比較)
- 案列-倒排索引
- 案例-共同好友
- 案列-join算法實現
- 案例-求topN(分組)
- 自定義inputFormat
- 自定義outputFormat
- 框架運算全流程
- mapreduce的優化方案
- HA機制
- Hive
- 安裝
- DDL操作
- 創建表
- 修改表
- DML操作
- Load
- insert
- select
- join操作
- 嚴格模式
- 數據類型
- shell參數
- 函數
- 內置運算符
- 內置函數
- 自定義函數
- Transform實現
- 特殊分割符處理
- 案例
- 級聯求和accumulate
- flume
- 簡介
- 安裝
- 常用的組件
- 攔截器
- 案例
- 采集目錄到HDFS
- 采集文件到HDFS
- 多個agent串聯
- 日志采集和匯總
- 自定義攔截器
- 高可用配置
- 使用注意
- sqoop
- 安裝
- 數據導入
- 導入數據到HDFS
- 導入關系表到HIVE
- 導入表數據子集
- 增量導入
- 數據導出
- 作業
- 原理
- azkaban
- 簡介
- 安裝
- 案例
- 簡介
- command類型單一job
- command類型多job工作流flow
- HDFS操作任務
- mapreduce任務
- hive腳本任務
- hbase
- 簡介
- 安裝
- 命令行
- 基本CURD
- 過濾器查詢
- 系統架構
- 物理存儲
- 尋址機制
- 讀寫過程
- Region管理
- master工作機制
- 建表高級屬性
- 與mapreduce結合
- 協處理器
- 點擊流平臺開發
- 簡介
- storm
- 簡介
- 安裝
- 集群啟動及任務過程分析
- 單詞統計
- 并行度
- ACK容錯機制
- ACK簡介