Cassandra表有timeuuid数据类型列,那么如何查看timeuuid类型的值(以纳秒为单位)?
timeuuid:
49cbda60-961b-11e8-9854-134d5b3f9cf8
49cbda60-961b-11e8-9854-134d5b3f9cf9如何将此timeuuid转换为纳秒需要使用select语句,如下所示:
select Dateof(timeuuid) from the table a;发布于 2019-02-20 00:15:59
在driver UUIDs.unixTimestamp(UUID id)中有一个实用程序方法,它返回一个可以转换为Date对象的普通纪元时间戳。
值得注意的是,从时间UUID开始的ns精度不一定有意义。类型1 uuid包括时间戳,该时间戳是自公历在1582年10月15日午夜首次采用以来的100纳秒间隔的数目。但驱动程序采用1ms时间戳(精度实际上取决于操作系统,甚至可以是10或40ms精度),并保留一个单调计数器来填充其余10000未使用的精度,但如果在1ms内有超过10k的值,则可能最终计数到未来(注意:性能限制最终会阻止这一点)。这是更高的性能,并保证没有重复,特别是在计算机中的亚毫秒时间精度在分布式系统中是相当无意义的。
因此,如果你纯粹从CQL的角度来看,没有自定义函数是不可能做到这一点的,这并不是说在ms值之外有很大的价值,所以dateOf就足够了。如果你真的想要的话
CREATE OR REPLACE FUNCTION uuidToNS (id timeuuid)
CALLED ON NULL INPUT RETURNS bigint
LANGUAGE java AS '
return id.timestamp();
';会给你1582年10月15日的100块钱。要将其从epoc转换为纳秒,请将其乘以100以转换为nanos,并添加与纪元时间的差值(nanos中的-12219292800L* 1_000_000_000 )。这可能会溢出长整型,因此可能需要使用不同的东西。
https://stackoverflow.com/questions/54770120
复制相似问题