unix_timestamp 时间戳函数用法(hive)
一、unix_timestamp函數用法?
1、unix_timestamp() 得到當前時間戳?
2、如果參數date滿足yyyy-MM-dd HH:mm:ss形式,則可以直接unix_timestamp(string date) 得到參數對應的時間戳?
3、如果參數date不滿足yyyy-MM-dd HH:mm:ss形式,則我們需要指定date的形式,在進行轉換?
?
二、from_unixtime函數用法?
語法:from_unixtime(t1,’yyyy-MM-dd HH:mm:ss’)?
其中t1是10位的時間戳值,即1970-1-1至今的秒,而13位的所謂毫秒的是不可以的。?
對于13位時間戳,需要截取,然后轉換成bigint類型,因為from_unixtime類第一個參數只接受bigint類型。例如:?
總結
1.Hive中獲取時間戳的方式為unix_timestamp()函數,該函數只能夠精確到秒級別的時間,對于時間精確到要求高的應用則該函數并不適合。
2.Hive獲取當前時間毫秒級別的時間戳時需要使用cast函數將current_timestamp()轉為double類型并乘以1000,則得到毫秒級別的時間戳。
3.對于Hive庫中存儲的毫秒精度的時間戳,為了確保時間精度不損失則需要使用to_utc_timestamp()函數,該函數支持毫秒級別的時間錯,但需要指定當前時區(qū)。
三? LAST_DAY 函數的用法
last_day 用impala不可以,用hive可以,獲取本月月末
SELECT LAST_DAY(CONCAT('${START_DATE}','-01')) --傳入2019-02 得到 2019-02-28 --傳入2019-02-01 得到 2019-02-28?
?
Hive中TimeStamp獲取及轉換1.Hive中使用current_timestamp()函數獲取當前時間select current_timestamp(); --2019-07-04 10:17:08.429275000使用Hive的current_timestamp()函數獲取到當前的時間精確到毫秒。2.Hive中獲取當前時間戳,默認使用unix_timestamp()函數select unix_timestamp(current_timestamp()); --1562235446使用Hive的unix_timestamp()函數獲取到當前的時間戳為10位的bigint類型數值,該數值只精確到秒級別。3.Hive中將時間戳轉換為日期類型,默認使用from_unixtime ()select from_unixtime(1543735779, 'yyyy-MM-dd HH:mm:ss:SSS'); --2019-07-04 10:17:26:000上面的轉換結果可以看到時間的毫秒是無法正常獲取到,因為時間戳只是精確到秒級別的,from_unixtime()函數也只支持秒級別的時間戳轉換。4.Hive中獲取毫秒級別的時間戳select current_timestamp(), cast(current_timestamp() as double) as 'timestamp';current_timestamp() timestampcurrent_timestamp() timestamp 1 2019-07-04 10:20:34.743662000 1562235634.7436621這里可以看到獲取到了一個13位的數值,該數值精確到毫秒即為當前的時間的時間戳。5.Hive中處理毫秒級別的時間戳select to_utc_timestamp(1543736635303, 'GMT');--2018-12-02 15:43:55.303 --用impala不行使用Hive提供的to_utc_timestamp()函數將毫秒級別的時間戳轉換為相應的時間并且精確到了毫秒,與上一步獲取時間戳的時間一致。select from_unixtime(cast(substring(tistmp,1,10) as bigint),’yyyy-MM-dd HH’) tim ,count(*) cn from hour_data where …
總結
以上是生活随笔為你收集整理的unix_timestamp 时间戳函数用法(hive)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Notepad++如何更改背景色(以保护
- 下一篇: hive 字符串前有 ’ 符号