带范围边界查询的Cassandra BoundStatement
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带范围边界查询的Cassandra BoundStatement相关的知识,希望对你有一定的参考价值。
我正在使用PreparedStatement和boundStatment来执行一些Cassandra查询。我正在尝试执行范围查询。这是我要创建的查询:
getAllRecordsOnIndexRange = getSession.prepare(QueryBuilder.select(documentId, documentName, documentIndex)
.from(tableName)
.where(QueryBuilder.eq(documentId,QueryBuilder.bindMarker()))
.and(QueryBuilder.gte(documentIndex, QueryBuilder.bindMarker()))
.and(QueryBuilder.lte(documentIndex, QueryBuilder.bindMarker())));
'documentId'是分区键,'documentIndex'是群集键。我希望对列documentIndex进行范围查询,例如“使用给定的documentId获取所有记录,使用documentIndex> = 3并使documentIndex <= 10”
当我想运行查询时,我打电话
public Statement buildGetAllRecordsOnIndexRange(int documentId, String documentName, int startDocumentIndex, int endDocumentIndex)
{
BoundStatement boundStatement = getAllRecordsOnIndexRange
.bind()
.setString(DOCUMENT_ID, documentId)
//how to set start and end documentIndex
databaseManager.applyReadStatementsConfiguration(boundStatement);
return boundStatement;
}
如何为上述查询设置startDocumentIndex和endDocumentIndex?
答案
我建议使用named bind markers而不是未命名 - 阅读使用它们的代码要容易得多。因此,在您的情况下,代码将如下所示:
PreparedStatement pStatement = session.prepare(QueryBuilder.select(documentId, documentName, documentIndex)
.from(tableName)
.where(QueryBuilder.eq(documentId,QueryBuilder.bindMarker("documentId")))
.and(QueryBuilder.gte(documentIndex, QueryBuilder.bindMarker("documentIndexStart")))
.and(QueryBuilder.lte(documentIndex, QueryBuilder.bindMarker("documentIndexEnd"))));
然后你可以绑定名字:
BoundStatement stmt = pStatement.bind()
.setString("documentId", startDocumentIndex)
.setInt("documentIndexStart", startDocumentIndex)
.setInt("documentIndexEnd", endDocumentIndex);
以上是关于带范围边界查询的Cassandra BoundStatement的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Cassandra 在获取数据时响应缓慢而不是拆分到不同的范围查询?
Spark Cassandra 连接器 - 分区键上的范围查询