我最近将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>;
1条答案
按热度按时间628mspwn1#
我能想到的最好的答案是用timestamp列而不是varchar重新设计我的表。在我必须指定的复制功能中,