问题描述
我有 2 列:end_time
和 seconds
end_time
存储为 unix_timestamp,秒存储为字符串。我需要从 end_time
列中减去 seconds
列以获得一个新列(即 start_time
)
我对此感到很困难,因为我认为 Impala 不支持 CONVERT()
或 DATEADD()
将 seconds
转换为时间戳,然后从 { 中减去它{1}}。有关如何在 Impala 中执行此操作的任何建议?
示例:
end_time
预期结果:
end_time seconds
2020-09-02 21:12:34 65
编辑 目前的进展:
start_time
2020-09-02 21:11:29
上面给出了 CAST(CONCAT(CAST(from_timestamp(CAST(end_time AS TIMESTAMP),'yyyy-MM-dd') AS STRING),' ',CAST(to_timestamp(from_timestamp(CAST(seconds AS TIMESTAMP),'HH:mm:ss'),'HH:mm:ss') AS STRING)) as TIMESTAMP) AS updated_time
格式的秒列,带有 TIMESTAMP
的 yyyy-MM-dd。
我现在如何在不弄乱日期的情况下减去 end_time
和 end_time
?
例如我不想从 2021-01-01 中减去 2021-01-01。我希望时差来自 HH:mm:ss,而不是 yyyy-MM-dd
解决方法
其实最后是一个快速简单的解决方案:
to_timestamp(end_time,'yyyy-MM-dd HH:mm:ss') end_time
CAST(table.seconds AS INT) sec
date_sub(end_time,INTERVAL sec seconds) start_time