需要在 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格式更改为日期时间,使其所有小时、分钟、秒部分均为零。

为此,我尝试了两件事:

  • 通过在 SUBSTRING 之外使用 todate(( 函数,但在Pig 中不支持。如果没有子字符串存在,那么我可以使用ToDate函数。
  • 我使用了下面的计算方法并使用它,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 并且应该采用日期时间格式?

如果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;

(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;

相关内容

  • 没有找到相关文章

最新更新