如何将 Hive 间隔转换为秒数?

Posted

技术标签:

【中文标题】如何将 Hive 间隔转换为秒数?【英文标题】:How do I convert a Hive interval to number of seconds? 【发布时间】:2020-10-24 19:31:49 【问题描述】:

我很惊讶在 Google 上找不到任何有用的东西来解决我认为是一个简单的问题:

如何将 Hive 间隔转换为秒?

例如,假设我有一个区间:

select timestamp('2020-01-03 12:34:36') - timestamp('2020-01-01 12:34:34') diff

这会返回2 00:00:02.000000000

两天两秒。

我只想将其转换为该结果中包含的秒数。我可以将此间隔转换为秒的最简洁方法是什么?

我尝试将此间隔添加到 unix epoch date '1970-01-1' 并使用 unix_time 获取秒数,但由于某种原因它返回错误的结果。

我想我可以单独提取日、时、分、秒并将它们相加。

必须有更清洁的方法,对吧?

【问题讨论】:

【参考方案1】:

下面使用 unix_timestamp 怎么样 -

select unix_timestamp('2020-01-03 12:34:36') - unix_timestamp('2020-01-01 12:34:34') diff

它对我来说很好用。我使用的是 3.1.0.3.xxx 版本

编辑:根据下面的评论,您可以使用以下内容 -

select unix_timestamp('02 00:00:02.000000000',"dd HH:mm:ss.SSSSSSSSS") + 86400;

因此,假设时间戳差异存储在名为 diff 的列中,并且采用指定的格式并且数据类型为字符串,则一般分配如下

select unix_timestamp(diff,"dd HH:mm:ss.SSSSSSSSS") + 86400;

【讨论】:

我在问题中所做的时间戳减法只是为了达到一个间隔。我的表已经有一个间隔列。鉴于此,预先存在的间隔,我想将其转换为秒数。 @Shahbaz - 编辑并更新了我的回复以解决上述评论。 感谢您对此进行调查。据我所知,上面的选择语句都没有对“间隔”数据类型进行操作。我的表中没有字符串,只有时间戳和间隔。 @Shahbaz - 哇!不知道我们可以将区间数据类型存储在 Hive 的表中。对我来说是新的学习。

以上是关于如何将 Hive 间隔转换为秒数?的主要内容,如果未能解决你的问题,请参考以下文章

怎么将秒数转换为时间

OxyPlot 中日期时间轴上的不规则间隔

以毫秒为间隔检测秒数

vb 时间戳转换成时间

如何使用 Java 将 10ms 刻度值转换为秒?

python把日期转换为秒数