时间格式是否有数据类型hh:mm:ss在Hive中

时间:2015-09-15 10:49:34

标签: hadoop hive user-defined-functions udf

我正在处理包含不同用户的呼叫详细信息的文件。在数据文件中,有一个字段call_duration,其中包含hh:mm:ss格式的值。例如:00:49:3900:20:00

我想计算每个用户每月的总通话时长。

我没有在hive中看到可以在hh:mm:ss中存储时间格式的数据类型。 (目前我在staging表中将此数据作为字符串)。

我正在考虑编写 UDF ,将时间转换为秒,以便我可以按用户进行总和(call_duration)分组。

有没有人面临类似的情况?我应该编写一个 UDF 来获得更好的方法吗?

提前多多感谢

2 个答案:

答案 0 :(得分:0)

将持续时间存储为整数秒似乎是效率和能够进行计算的最佳选择。我认为您不需要自定义UDF来从String转换为Int。它可以通过组合现有的UDFS来完成:

Select 3600 * hours + 60 * minutes + seconds as duration_seconds
FROM (
  Select 
  cast(substr(duration,1,2) as Int) as hours, 
  cast(substr(duration,4,2) as Int) as minutes,
  cast(substr(duration,7,2) as Int) as seconds
  From(
    Select "01:02:03" as duration) a
) b;

答案 1 :(得分:0)

Hive提供内置日期功能来提取小时,分钟和秒。 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions

但是如果这些函数没有直接帮助你并且你使用内置函数的许多组合,那么我建议你编写自己的UDF(如果这是非常频繁的实用程序并且你运行了大量的行) 。您将看到查询性能差异。

希望这有帮助