如何从两个纪元时间戳计算 hh:mm:ss 中 hh:mm:ss 的差异?
Posted
技术标签:
【中文标题】如何从两个纪元时间戳计算 hh:mm:ss 中 hh:mm:ss 的差异?【英文标题】:How to calculate the difference in hh:mm:ss in hive from two epoch timestamps? 【发布时间】:2018-03-05 19:04:26 【问题描述】:我在配置单元表 T1 的两列中有两个纪元格式的时间戳。它们实际上代表作业开始时间和结束时间。我想计算作业运行的持续时间。因此,我将纪元时间转换为时间戳数据类型并减去它们。这给了我“dd hh:mm:ss:ms”的输出。假设输出将进入表 T2 中的列“持续时间”,该列是 ddl 中的时间戳数据类型。但是,当我将这些数据写入表 T2 时,当 mapreduce 阶段进行到一半时,作业会出现错误,提示“未知数据类型:interval_day_time”。我无法在 ddl 中使用“interval_day_time”数据类型,因为即使这样也会给我一个错误。
还有其他方法吗?
【问题讨论】:
您将错误的数据类型放入时间戳。您应该将持续时间转换为秒或分钟,然后将其保存到整数数据类型列中。 请发布查询和示例数据。 我会将其保留为纪元时间并减去它们,这就是运行所需的秒数。然后,如果您想知道花了多少小时,只需除以 3600。手动减去日期时间可能需要考虑的一件事是夏令时到来时,您不必担心纪元时间。 How to calculate Date difference in Hive的可能重复 【参考方案1】:取决于您希望如何存储“持续时间”字段。 DATE_DIFF 函数可用于计算两个时间戳日期之间的差异(以天为单位)。然后可以将这个以天为单位的值转换为小时、分钟或秒。
【讨论】:
【参考方案2】:好吧,我无法绕过它。所以我创建了自己的宏,它使用数学公式以小时、分钟和秒为单位计算时间,并以字符串形式输出值。
【讨论】:
以上是关于如何从两个纪元时间戳计算 hh:mm:ss 中 hh:mm:ss 的差异?的主要内容,如果未能解决你的问题,请参考以下文章
如何将长口头日期时间转换为雪花中的时间戳(YYYY-MM-DD HH:MM:SS)?
如何在Java中以字符串格式获取当前时间戳? “yyyy.MM.dd.HH.mm.ss”
时间戳(精确到毫秒)转yyyy-mm-dd hh:mm:ss
如何在进行选择查询时将 YYYY-MM-DD HH:mm:ss 中的时间戳转换为 Hive 中的 YYYY-MM-DD HH:mm:ss.SSS?