在我的pig代码中,变量event_date的计算如下:
SUBSTRING(case when join_start_ts is NULL or TRIM(join_start_ts)=='' then 'null' else join_start_ts end,0,10) as event_date;
event_date如下所示(例如):2018-04-30 00:00:00.0(注意:所有小时,秒,分钟应为零)
在DDL表中(在完成计算后存储event_date变量),event_date变量定义为:
........
,event_date timestamp
)
PARTITIONED BY (data_input_date string)
stored as orc
location
'${hiveconf:s3bucket}/${hiveconf:fact_path}/${hiveconf:join_failure_fact}/'
TBLPROPERTIES ("orc.compress"="snappy");
在进行计算时(如上所示)我只想将event_date格式更改为datetime,使其所有小时,分钟,秒部分都为零。
为此,我尝试了两件事:
我使用下面这个计算方法并使用它,event_date以日期时间格式出现,但它看起来像这样(例如):2018-04-30 17:03:50.798(我想要所有的时间,秒,分钟为零)
(case when join_start_ts is NULL or TRIM(join_start_ts)=='' then NULL else ToDate(join_start_ts) end) as eventdate;
我应该怎么做才能在event_date的变量计算中看起来像2018-04-30 00:00:00.0并且应该是日期时间格式?
答案 0 :(得分:0)
如果join_start_ts已经是必需的日期时间格式,但是作为字符串,那么您可以使用substring
获取日期部分,然后使用concat
' 00:00:00.0'。如果它以毫秒或不同的格式表示,则使用todate, tostring, substring, and concat
。最后将其转换回日期时间。
(case
when join_start_ts is NULL or TRIM(join_start_ts) == '' then NULL
else Concat(SubString(join_start_ts,0,11),'00:00:00.0')
end) as eventdate;
OR
(case
when join_start_ts is NULL or TRIM(join_start_ts) == '' then NULL
else Concat(SubString(ToString(ToDate(join_start_ts)),0,11),'00:00:00.0')
end) as eventdate;