[英]Date Format Conversion in Hive
我是sql / hive的新手。 首先,我使用以下命令將txt文件加載到配置單元中:
drop table if exists Tran_data;
create table Tran_data(tran_time string,
resort string, settled double)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';
Load data local inpath 'C:\Users\me\Documents\transaction_data.txt' into table Tran_Data;
txt文件中的變量tran_time
如下所示:10-APR-2014 15:01。 加載此Tran_data表后,我嘗試將tran_time
轉換為“標准”格式,以便我可以使用tran_time
作為join
鍵將此表連接到另一個表。 所需的日期格式為'yyyymmdd'。 我搜索了在線資源,發現了這個: unix_timestamp(substr(tran_time,1,11),'dd-MMM-yyyy')
基本上,我這樣做: unix_timestamp('10-APR-2014','dd-MMM-yyyy')
。 但是,輸出為“NULL”。
所以我的問題是:如何將日期格式轉換為“標准”格式,然后進一步將其轉換為'yyyymmdd'格式?
from_unixtime(unix_timestamp('20150101' ,'yyyyMMdd'), 'yyyy-MM-dd')
我目前的Hive版本:Hive 0.12.0-cdh5.1.5
我使用下面的配置日期函數將第一列中的datetime轉換為第二列中的日期。 希望這可以幫助!
select inp_dt, from_unixtime(unix_timestamp(substr(inp_dt,0,11),'dd-MMM-yyyy')) as todateformat from table;
inp_dt todateformat
2015年3月12日07:24:55 2015-03-12 00:00:00
unix_timestamp函數會將給定的字符串日期格式轉換為unix時間戳,以秒為單位,但不像這種格式dd-mm-yyyy。
您需要編寫自己的自定義udf,以將給定的字符串日期轉換為您需要的格式,因為Hive沒有任何預定義的函數。 我們有to_date函數將時間戳轉換為日期,剩下的所有unix_timestamp函數都無法解決您的問題。
select from_unixtime(unix_timestamp('01032018' ,'MMddyyyy'), 'yyyyMMdd');
輸入格式:mmddyyyy
01032018
查詢后輸出:yyyymmdd
20180103
為了幫助將來的人:
以下功能應該適用於我的情況
TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP('10 -APR-2014' , 'DD-MMM-YYYY'))
unix_timestamp('2014-05-01','dd -mmm-yyyy')將起作用,你的輸入字符串應采用這種格式為hive yyyy-mm-dd或yyyy-mm-dd hh:mm:ss
當您嘗試使用'01 -MAY-2014'時,配置單元將不會將其理解為日期字符串
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.