在我的pig代码中,变量事件日期的计算方式如下:
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;
事件日期如下(例如):2018-04-30 00:00:00.0(注意:所有小时、秒、分钟应为零)
在ddl表(计算完成后存储事件日期变量)中,事件日期变量定义为:
........
,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,使其所有的小时、分钟、秒部分都为零。
为此,我尝试了两件事:
通过在substring之外使用todate()函数,但pig中不支持此操作。如果不存在子字符串,那么我可以使用todate函数。
我使用了下面的计算方法,使用它,事件日期是以日期时间格式出现的,但它看起来是这样的(例如: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;
我应该怎么做才能使事件日期的变量计算看起来像2018-04-30 00:00:00.0,并且应该是日期时间格式?
1条答案
按热度按时间yqkkidmi1#
如果join\u start\u ts已经是所需的日期时间格式,但作为字符串,则可以使用
substring
去约会然后concat
'00:00:00.0'. 如果是毫秒或其他格式,则使用todate, tostring, substring, and concat
。最后把它放回过去。或