我需要哪种版本的Hive具有小数点后6位以上的时间戳?

我需要哪种版本的Hive具有小数点后6位以上的时间戳?,hive,timestamp,hiveql,Hive,Timestamp,Hiveql,我需要使用哪个版本的Hive: 它列出了一种将字符串转换为给定格式的时间戳的方法,但它似乎不起作用,与此功能相关的Jira故事似乎从未发布过 有人知道吗?介绍了一种使用SQL:2016兼容格式而不是当前使用的格式的方法,同时它应该提供转换非标准时间戳格式的简单方法。 我发现这个孩子是在4.0版本中发布的 如果您的蜂巢

我需要使用哪个版本的Hive:

它列出了一种将字符串转换为给定格式的时间戳的方法,但它似乎不起作用,与此功能相关的Jira故事似乎从未发布过

有人知道吗?

介绍了一种使用SQL:2016兼容格式而不是当前使用的格式的方法,同时它应该提供转换非标准时间戳格式的简单方法。 我发现这个孩子是在4.0版本中发布的

如果您的蜂巢<4.0,您可以做什么:

  • 标准时间戳格式为“yyyy-MM-dd-HH:MM:ss.sss”(精度高达9位)。如果您有此格式的字符串,则可以使用
    时间戳(str)
    转换(str as timestamp)
    将其转换为时间戳,但在大多数情况下,您不需要显式转换,而是隐式转换,精度不会丢失,您可以将此类字符串插入时间戳列并与时间戳进行比较,而无需转换

  • 对于非标准格式的纳秒时间戳,需要进行转换。 这里的问题是
    date\u format
    方法不起作用,因为它需要标准格式的时间戳
    from_unixtime(unix_timestamp(str,format))
    不起作用,因为
    unix_timestamp
    函数返回秒,而不是纳秒,在此转换后,毫秒和纳秒将丢失

  • 非标准格式的解决方案是从字符串中提取毫秒或纳秒,使用unix_时间戳(str,format)以秒为单位应用转换,将结果与毫秒串联,然后使用timestamp()或cast转换为时间戳(最后一步不是必需的)

    演示(Hive 2.3.6):

    结果:

    original_string                 timestamp_converted
    16AUG2001:23:46:32.123456789    2001-08-16 23:46:32.123456789
    
    正如你所见,它的工作精度为纳秒。我使用final timestamp(string)转换只是为了表明生成的字符串与timestamp兼容,您可以省略显式转换timestamp(string)

  • 如果您最初有以毫秒为单位的bigint unix时间戳,并希望将其转换为配置单元时间戳,请参阅以下方法:

  • 如果您有类似于“2019-11-02T20:18:00.123Z”的字符串,请参阅: 如果可以使用regexp\u replace轻松地将字符串转换为标准格式,则此方法有效


  • Hive支持纳秒精度的时间戳,您可以使用其他方法进行转换,请参阅我的回答您使用的Hive版本是什么?我使用的是2.3.3,在小数秒内的精度似乎不能超过6位,当然不能达到9位(那太好了!)@emberfly我使用的是2.3。6@emberfly这个时间戳('2001-08-16 23:46:32.123456789')-也不起作用?那就错了version@emberfly请阅读以下内容:Hive2.3.2与9配合使用效果良好digits@emberfly你用的是什么客户机?也许是客户的问题。我在色调和曲波乐GUI中进行了测试
    original_string                 timestamp_converted
    16AUG2001:23:46:32.123456789    2001-08-16 23:46:32.123456789