将秒(字符串)转换为 Impala 中的时间戳

Convert seconds (string) to timestamp in Impala

我有 2 列:end_timeseconds

end_time 存储为 unix_timestamp,秒数存储为字符串。我需要从 seconds 列中减去 end_time 列以获得新列(即 start_time

我很难解决这个问题,因为我认为 Impala 不支持 CONVERT()DATEADD() 让我将 seconds 转换为时间戳,然后从 end_time 中减去它。关于如何在 Impala?

中执行此操作的任何建议

示例:

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 格式给出了秒列,其中包含 end_time.

的 yyyy-MM-dd

现在如何减去 end_timeupdated_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