簡體   English   中英

Hive中的日期格式轉換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM