cassandra将令牌转换为long

cclgggtu  于 2021-06-09  发布在  Cassandra
关注(0)|答案(1)|浏览(429)

我想在一张table上运行这样的查询:

SELECT count(*) FROM mytable WHERE token(_id) >= -9220405531215751472 AND token(_id) < -9215701564955960000 AND state=true ALLOW FILTERING;

我读了一系列的代币 metadata.getTokenMap() 然后 tokenMap.getTokenRanges() . 但它将开始和结束标记作为标记对象(例如,murruit3token(9187337865070158013))!如何将其转换为long或string以便在查询中使用:

CqlSession session = builder.build();

Metadata metadata = session.getMetadata();
if (metadata.getTokenMap().isPresent()) {

   TokenMap tokenMap = metadata.getTokenMap().get();

   for(TokenRange range : tokenMap.getTokenRanges()) {

          System.out.println(range.getStart()); // output Murmur3Token(9187337865070158013)
   }
}
mfpqipee

mfpqipee1#

我发现我可以转换它!它必须转换为 Murmur3Token 显式和调用 getValue 方法。

long start,end;
String sql;

for(TokenRange range : tokenMap.getTokenRanges()) {
    start = ((Murmur3Token) range.getStart()).getValue();
    end = ((Murmur3Token) range.getEnd()).getValue();
    sql = "SELECT count(*) FROM mytable WHERE token(_id) >= "+start+" AND token(_id) < "+end+" AND state=true ALLOW FILTERING;";
    System.out.println(i +":" + sql);
}

相关问题