首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cassandra timeuuid列精确到纳秒

Cassandra timeuuid列精确到纳秒
EN

Stack Overflow用户
提问于 2019-02-19 23:47:44
回答 1查看 352关注 0票数 1

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

timeuuid:

代码语言:javascript
复制
49cbda60-961b-11e8-9854-134d5b3f9cf8
49cbda60-961b-11e8-9854-134d5b3f9cf9

如何将此timeuuid转换为纳秒需要使用select语句,如下所示:

代码语言:javascript
复制
select Dateof(timeuuid) from the table a;
EN

回答 1

Stack Overflow用户

发布于 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就足够了。如果你真的想要的话

代码语言:javascript
复制
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 )。这可能会溢出长整型,因此可能需要使用不同的东西。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54770120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档