Hive to Redshift日期/时间转换

时间:2015-09-01 16:40:42

标签: hadoop hive amazon-redshift

我最近将存储在Hadoop中的数据移动到Redshift,Hadoop数据中的时间字段存储为STRING。在Redshift中,字段是VARCHAR(20)。 Hadoop中STRING日期​​的格式为" YYYY-MM-DD-HH-MI-SS"。

我试图找到Redshift中两个时间字段之间的时差(以秒为单位),但似乎无法正确格式化日期。我知道如何使用DATEDIFF函数,但无法正确格式化从Hadoop到Redshift的传入日期STRING。使用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 个答案:

答案 0 :(得分:0)

我能想到的最好的答案是使用TIMESTAMP列而不是VARCHAR重新设计我的表。在COPY函数中,我必须指定,

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