Cassandra 将 Token 转换为 long

Cassandra convert Token to long

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

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

我通过 metadata.getTokenMap() 读取标记范围,然后 tokenMap.getTokenRanges()。但它给了我开始和结束令牌作为令牌对象(例如 Murmur3Token(9187337865070158013) )!我如何将其转换为 longString 以在查询中使用:

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)
   }
}

我找到了转换方法!它必须显式转换为 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);
}