Cassandra表具有timeuuid
数据类型列,那么如何查看以纳秒为单位的timeuuid
类型的值?
timeuuid:
49cbda60-961b-11e8-9854-134d5b3f9cf8
49cbda60-961b-11e8-9854-134d5b3f9cf9
如何将此时间转换为纳秒 需要选择语句,例如:
select Dateof(timeuuid) from the table a;
答案 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毫微秒)。这可能会长时间溢出,因此可能需要使用其他方法。