【问题标题】:Cassandra UUID from a date来自日期的 Cassandra UUID
【发布时间】:2018-10-21 11:52:12
【问题描述】:

如何从 Java 中的日期创建 Cassandra TimeUUID?

我知道如何使用toDate(timeuuid) 函数做相反的事情,但是我们如何做相反的事情呢?

类似于QueryBuilder.now() 函数,除了我不希望现在作为日期。我需要一个较早的日期。

【问题讨论】:

    标签: java cassandra cql datastax-java-driver


    【解决方案1】:

    minTimeuuid()maxTimeuuid() 函数可以转换与timeuuid 兼容的类UUID 值。

    cqlsh:test>create table aaa (id timeuuid primary key, t text);
    cqlsh:test> insert into aaa(id,t) values(minTimeuuid('2018-05-11 10:00+0000'), 't');
    cqlsh:test> SELECT * from aaa;
    
     id                                   | t
    --------------------------------------+---
     1119d000-5502-11e8-8080-808080808080 | t
    

    更多详情请见documentation

    更新:也可以通过 QueryBuilder 使用 Java 中的这些函数,如下所示:

    QueryBuilder.select().fcall("minTimeuuid", your-value)...
    

    【讨论】:

    • 谢谢,这是CQLSH接口,我正在寻找Java解决方案
    • 您可以通过 java 驱动程序语句运行相同的命令...或者您正在寻找查询生成器?
    • 我正在寻找查询生成器。 Java 中的 Anythink 都可以
    • 您可以只使用准备好的语句,而不必对所有事情都使用查询生成器...但也可以使用查询生成器,请参阅更新示例(虽然未测试)
    【解决方案2】:
    UUIDs.startOf(new Date().getTime())
    

    应该从 Java 中的给定日期返回 UUID v4

    【讨论】:

    • 确实如此,但是当我这样做时: UUID u = UUIDs.startOf(new Date().getTime());日期 d = new Date(u.timestamp());日期在 4357863 年的某个地方
    • 请注意,此时间戳仅应用于查询,并且对于根据 com.datastax.oss.driver.api.core.uuid.Uuids.startOf 的文档进行插入来说不够独特 - 请参阅 timeBased方法来解释如何做到这一点。
    猜你喜欢
    • 2015-11-28
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2013-07-14
    • 2022-10-17
    • 2017-06-17
    • 2010-12-29
    相关资源
    最近更新 更多