Hive 時間日期處理總結

最近用hive比較多,雖然效率低,可是因爲都是T+1的業務模式。因此也就不要求太多了,夠用就行。其中用的吧比較多就是時間了,因爲大數據中不少字段都不是標準的時間類型字段,因此期間涉及了不少的時間日期字段的處理,這裏作一個彙總。一遍之後查詢使用。也方便你們學習。sql

下面列舉幾個用的比較多的狀況進行說明:

得到當前日期的幾種用法:

1.先來一個比較老的,select unix_timestamp() ;數據庫

結果以下:函數

1

2.經過提示可知該用法已經被放棄了建議採用current_timestamp來替代。查結果以下:工具

2

3.若是當前時間爲int類型則須要轉義一下好比使用from_unixtime()學習

SELECT from_unixtime(unix_timestamp());

--2018-02-27 14:51:01

 

4.獲取當前日期CURRENT_DATE。代碼以下:大數據

SELECT CURRENT_DATE--2018-02-27

 

 

有關日期的函數:

1.對比日期函數,常常用於日期之間比較大小,或者計算差值,日期加減。spa

日期差值:datadiff(結束日期,開始日期),返回結束日期減去開始日期的天數。unix

日期加減:date_add(時間,增長天數),返回值爲時間天+增長天的日期;date_sub(時間,減小天數),返回日期減小天后的日期。code

執行狀況如圖所示:blog

3

  注意若是想知道相差多少個小時又怎麼去求那?咱們其實稍加改造便可。

  hour函數能夠得到時間字段的小時數和datediff來獲取兩個日期相差的天數。而後利用天數*24+hour的差值即爲所求,

  好比咱們求2018-02-27 10:00:00 與 2018-02-25 12:00:00相差多少?

 實例代碼以下:
select (hour('2018-02-27 10:00:00')-hour('2018-02-25 12:00:00')+(datediff('2018-02-27 10:00:00','2018-02-25 12:00:00'))*24) as hour_subValue

--46 

  補充一個:返回當前時間下再增長num_months個月的日期  add_months(string start_date, int num_months)

2.上面介紹了hour函數,那麼咱們也會須要其餘的時間提取,很少說直接看代碼,年月日時分秒:
select year('2018-02-27 10:00:00'),month('2018-02-27 10:00:00'),day('2018-02-27 10:00:00'),hour('2018-02-27 10:00:00'),minute('2018-02-27 10:00:00'),second('2018-02-27 10:00:00'),weekofyear('2018-02-27 10:00:00'); 

--2018    2    27    10    0    0    9

  補充:quarter,返回當前本年度第幾個季度。

3.日期轉換函數
to_date,語法: to_date(string timestamp),返回值爲string類型的日期
示例以下:
select to_date('2018-02-27 10:03:01') ;

--2018-02-27
last_day(string date),返回這個月的最後一天的日期
select  last_day('2018-02-27 10:03:01');
--2018-02-28

 next_day返回當前時間的下一個星期幾所對應的日期 。以下

select next_day('2018-02-27 10:03:01', 'TU');

--2018-03-06

  說明,輸入日期爲2-27,下個星期的週二爲03-06,若是想要知道下週一的日期就是MO,週日就是SU,以此類推。

注意:

我跟無數多小白說過,西方國家週日是每週的第一天,因此日曆和英語中都是現實週日再是週一,因此上面的下週日是3-4。注意嘍!
 

總結

    以上是我平時常常用的一些日期相關的處理和函數,比較方便,想不起來就過來掃一眼。畢竟hive用的比較少,相對於關係型數據庫的t-sql函數和方法仍是比較low的,畢竟是個轉義工具。目前主流仍是hivesql,不過慢慢的都在想sparksql之類技術的轉移了。之後有新的日期函數我會繼續想本文中進行彙總,方便你們查詢。
相關文章
相關標籤/搜索