hive到redshift日期/时间转换

zte4gxcn  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(478)

我最近将hadoop中存储的数据移动到redshift,hadoop数据中的时间字段存储为字符串。在redshift中,字段是varchar(20)。hadoop中日期字符串的格式是“yyyy-mm-dd hh-mi-ss”。
我试图找到红移中两个时间字段之间的时间差(以秒为单位),但似乎无法正确格式化日期。我知道如何使用datediff函数,但无法将传入的日期字符串从hadoop正确格式化为redshift。使用to_date(trans_time,'yyyy-mm-dd hh:mi:ss)函数只返回'yyyy-mm-dd'形式的值,其余的小时、分钟、秒将被截断。
有什么想法吗?
我能让这个工作,似乎相当麻烦和低效。。。

select
trans_time, 
datediff(second, '2015-05-31 00:00:00', 
    cast(to_date(trans_time, 'YYYY-MM-DD') 
            || ' ' || 
            split_part(trans_time, '-', 4) 
            || ':' || 
            split_part(trans_time, '-', 5) 
            || ':' || 
            split_part(trans_time, '-', 6) AS TIMESTAMP)) 
from <table_name>;
628mspwn

628mspwn1#

我能想到的最好的答案是用timestamp列而不是varchar重新设计我的表。在我必须指定的复制功能中,

timeformat 'YYYY-MM-DD-HH-MI-SS'

相关问题