這里整理一下Hive常見的時間函式和日期函式和用法,作為平時資料處理程序的一個檢索和記錄,
平時在資料處理程序中,如果不經常使用時間函式,一時間遇到一些時間上的處理,難免會想不起來,
hive本身提供的時間函式已經很豐富了,基本上能滿足我們所有的需求,一些特殊需求也可以通過增加一些數學邏輯實作出來,
接下來看一下類別的日期和時間函式的使用方式,
1.時間戳和日期相互轉換函式
具體執行結果在后面備注標注出來,主要為時間戳轉換為日期函式,和將日期轉換為時間戳函式
-- 1.時間戳轉化為日期函式
-- from_unixtime(bigint unixtime[, string format]) 其中第一個引數必須為bigint型別
select from_unixtime(1661084482) -- 2022-08-21 20:21:22
select from_unixtime(1661084482, 'yyyy-MM-dd') -- 2022-08-21
select from_unixtime(1661084482, 'yyyyMMdd') -- 20220821
select from_unixtime(1661084482,'yyyy-MM-dd HH:mm:ss') -- 2022-08-21 20:21:22
-- 2.將日期轉換為時間戳
select unix_timestamp('2022-08-21 20:21:22') -- 1661084482
select unix_timestamp('20220821','yyyyMMdd') -- 1661011200
select unix_timestamp('2022-08-21', 'yyyy-MM-dd') -- 1661011200
2.獲取當前天的相關函式
獲取當天時間的三種方式,注意格式,其中current_timestamp回傳的時間為UTC時間,
-- 回傳當天三種方式,格式有一定的不同
select current_date -- 2023-06-14
select current_timestamp -- 回傳時分秒 2023-06-14 07:56:14.28
select from_unixtime(unix_timestamp()) -- 2023-06-14 15:56:14
3.日期格式化函式
日期格式化函式,需要什么格式,后面寫什么格式的日期字串描述,to_date僅有一種格式回傳結果
-- 需要什么格式,后面寫什么格式的日期字串描述
select date_format('2022-08-21 20:21:22', 'yyyy-MM-dd') -- 2022-08-21
select date_format('2022-08-21 20:21:22', 'yyyyMMdd') -- 20220821
select date_format('2022-08-21', 'yyyy-MM-dd HH:mm:ss') -- 2022-08-21 00:00:00
-- 獲取時間日期的日期部分
select to_date('2022-08-21 20:21:22') -- 2022-08-21
4.獲取年、月、日、天、小時、分鐘、秒、周數、星期幾、季節函式
hive提供了靈活獲取年、月、日、天、小時、分鐘、秒、周數、星期幾、季節的函式,最后面還提供了一個通過數學函式轉換獲取季度的邏輯,可以看出其實部分函式如果版本不支持,我們可以通過其他方式曲線獲取,當然,不提倡,可讀性差,
-- 獲取年
select year('2022-08-21 20:21:22') -- 2022
-- 獲取月
select month('2022-08-21 20:21:22') -- 8
-- 獲取當前天
select day('2022-08-21 20:21:22') -- 21
-- 每月第幾天,同day()
select dayofmonth('2022-08-21 20:21:22') -- 21
-- 獲取當前小時
select hour('2022-08-21 20:21:22') -- 20
-- 獲取當前分鐘
select minute('2022-08-21 20:21:22') -- 21
-- 獲取當前秒
select second('2022-08-21 20:21:22') -- 22
-- 活躍當前日期是本年第幾周
select weekofyear('2022-08-21 20:21:22') -- 31
-- 獲取當前天是本周第幾天,計算日歷是從星期天為本周第一天開始計算,如果想要計算星期1為第一天,可以在當前天加1天再去計算,
select dayofweek('2022-08-21 20:21:22') -- 1
-- 獲取當前日期是第幾季度
select quarter('2022-08-21 20:21:22') -- 3
-- 如果有hive因版本不支持部分函式,可以通過數學轉換計算,例如當前是第幾季度,
select ceil(month('2022-08-21 20:21:22')/3) -- 季節 3 數學轉換
5.日期和月份的加減相關函式
獲取日期和月份的加減操作,靈活處理日期和月份增加減少,日期月份之間互相求差值,
-- 日期增加日
select date_add('2022-08-21',10) -- 增加日 2022-08-31
-- 日期減少日
select date_sub('2022-08-21',10) -- 減少日 2022-08-11
-- 月增加
select add_months('2022-08-21',2) -- 增加月 2022-10-21
-- 月減少
select add_months('2022-08-21',-1) -- 減少月 2022-07-21
-- 兩個日期相減函式
select datediff('2022-08-23', '2022-08-21') -- 2
-- 兩個月份相減
select months_between('2022-08-21', '2022-07-25') -- 0.871
6.獲取一些指定特殊日期的函式
主要是獲取指定日期的月初(月末)、年初(年末)日期和獲取指定日期的下個星期幾的日期
-- 獲取指定日期的月初(月末)、年初(年末)日期
select last_day('2023-06-13') -- 月末 2023-06-30
select trunc('2023-06-13', 'MM') -- 月初 2023-06-01
select trunc('2023-06-13', 'YY') -- 年初 2023-01-01
select date_sub(add_months(trunc('2023-06-13', 'YY'),12),1) -- 年末 2023-12-31
-- 獲取指定日期的下個星期幾的日期
select next_day('2023-06-13', 'MO') -- 2023-06-19
select next_day('2023-06-13', 'TU') -- 2023-06-20
select next_day('2023-06-13', 'WE') -- 2023-06-14
select next_day('2023-06-13', 'TH') -- 2023-06-15
select next_day('2023-06-13', 'FR') -- 2023-06-16
select next_day('2023-06-13', 'SA') -- 2023-06-17
select next_day('2023-06-13', 'SU') -- 2023-06-18
7.時區轉換函式操作
時區轉換函式有很多需要注意的點,其也可以聯合使用,簡單說一下時區,UTC是世界標準時間,
東一區 GMT+1,東八區GMT+8以此類推,西一區GMT-1,西七區GMT-7以此類推,
時間戳沒有時區屬性,同一時刻時間戳一致,
-- 將utc時間轉換為東八區時間,輸入為utc時間字串,結果為東八區時間字串
select from_utc_timestamp('2023-06-14 15:56:14','GMT+8') -- 2023-06-14 23:56:14
-- 將utc時間戳轉換為東八區時間,輸入為utc時間戳,結果為東八區時間字串,時間戳沒有時區屬性,同一時刻時間戳一致
select from_utc_timestamp(cast(1686729374000 as bigint),'GMT+8') -- 2023-06-14 15:56:14
-- 將指定時區時間轉換成utc時間
select to_utc_timestamp('2023-06-14 15:56:14','GMT+8') -- 2023-06-14 07:56:14
-- 將指定時區時間的時間戳轉換成utc時間(這種使用方式不常見,是錯誤的,只是在某些時刻進行資料轉換用,不建議使用)
select to_utc_timestamp(cast(1686729374000 as bigint),'GMT+8') -- 2023-06-13 23:56:14
-- 正確的轉換時間戳為utc時間的方式
select to_utc_timestamp(cast(1686729374000 as bigint),'UTC')
以上內容為日期時間函式的常見使用方法及注意事項,有需要可以收藏,
一些函式可以搭配使用,滿足生產環境中的時間需求,
下一期:HiveSQL在使用聚合類函式的時候性能分析和解讀
按例,歡迎點擊此處關注我的個人公眾號,交流更多知識,
后臺回復關鍵字 hive,隨機贈送一本魯邊備注版珍藏大資料書籍,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/555232.html
標籤:其他
下一篇:返回列表
