如何解决Cassandra将Token转换为long
我想在表上运行这样的查询:
SELECT count(*) FROM mytable WHERE token(_id) >= -9220405531215751472 AND token(_id) < -9215701564955960000 AND state=true ALLOW FILTERING;
我先按metadata.getTokenMap()
,然后按tokenMap.getTokenRanges()
读取令牌范围。但这给了我开始令牌和结束令牌作为令牌对象(例如 Murmur3Token(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)
}
}
解决方法
我发现了如何转换它!必须将其显式转换为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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。