Cassandra timeuuid色谱柱至纳秒精度

时间:2019-02-19 15:47:44

标签: cassandra nanotime timeuuid

Cassandra表具有timeuuid数据类型列,那么如何查看以纳秒为单位的timeuuid类型的值?

timeuuid:

49cbda60-961b-11e8-9854-134d5b3f9cf8
49cbda60-961b-11e8-9854-134d5b3f9cf9

如何将此时间转换为纳秒 需要选择语句,例如:

select Dateof(timeuuid) from the table a;

1 个答案:

答案 0 :(得分:2)

驱动程序UUIDs.unixTimestamp(UUID id)中有一个实用程序方法,该方法可返回可转换为Date对象的普通纪元时间戳。

值得指出的是,从UUID开始的ns精度不一定有意义。类型1的uuid包含一个时间戳,该时间戳是自公历1582年10月15日午夜首次采用公历以来的100纳秒间隔。但是驱动程序需要一个1ms的时间戳(精度实际上取决于操作系统,甚至可以达到10ms或40ms的精度),并保留一个单调计数器来填充剩余的10000个未使用的精度,但是如果在1ms内有超过10k的值(注意:性能限制最终将阻止这种情况)。这具有更高的性能,并且可以保证没有重复项,尤其是在分布式系统中,计算机中低于ms的时间精度几乎没有意义。

因此,如果从纯粹的CQL角度看,没有UDF就无法做到这一点,那么无论如何,超出ms值都没有太大价值,因此dateOf应该足够了。如果您真的想要它

CREATE OR REPLACE FUNCTION uuidToNS (id timeuuid)
  CALLED ON NULL INPUT RETURNS bigint
  LANGUAGE java AS '
    return id.timestamp();
  ';

将从1582年10月15日开始为您提供100ns。要将其从epoc转换为纳秒,请将其乘以100转换为毫微秒,并加上历元时间的差值(-12219292800L * 1_000_000_000毫微秒)。这可能会长时间溢出,因此可能需要使用其他方法。