4

使用基于 maxTimeuuid 和 minTimeuuid 的查询的 Java API 是什么?我在 QueryBuilder 或其他任何地方都找不到。我正在使用 DataStax 客户端

        <artifactId>cassandra-driver-core</artifactId>
        <version>1.0.3</version>

表“a”有 2 列:1. String 类型的 id 2. TimeUuid 类型的 LMD

这就是我正在做的事情,看起来不对,当然也行不通

    Query q = QueryBuilder
    .select()
    .all()
    .from("test","a")
    .where().and(QueryBuilder.gt("LMD", "minTimeUUid('2013-11-03 14:33:50')"))
    .and(QueryBuilder.lt("LMD", "maxTimeUUId('2013-11-03 14:45:50')"));

任何指针都非常感谢

谢谢

4

2 回答 2

9

您将需要使用utils.UUIDs实用程序类从时间戳以编程方式生成最大/最小 TimeUUID,例如

final UUID min = UUIDs.startOf(lowerTimeStamp);
final UUID max = UUIDs.endOf(upperTimeStamp);
Query q = QueryBuilder
  .select()
  .all()
  .from("test","a")
  .where(QueryBuilder.gt("LMD", min))
  .and(QueryBuilder.lt("LMD", max));
于 2013-11-07T09:17:15.440 回答
2

对于更高版本的 datastax java 驱动程序,您可以使用QueryBuilder.fcall类似(这里我假设静态导入 QueryBuilder.*):

Query q = select()
  .all()
  .from("test","a")
  .where(gt("LMD", fcall("minTimeUuid", lowerTimeStamp)))
  .and(lt("LMD", fcall("minTimeUuid", upperTimeStamp)));

但重要的是使用 fcall 它与第二个参数的正确数据类型(long在这种情况下)。

V4的驱动连有QueryBuilder.minTimeUuid()QueryBuilder.maxTimeUuid()方法

于 2021-12-03T10:25:04.777 回答