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