我编写了以下程序来查询cassandra中名为Foo的表中的行。该表有431行。
val session = getDevTestSession()
val stmt = session.prepare("select * from foo where token(id) > ? and token(id) <= ?")
val ps = stmt.bind(new Long(Long.MIN_VALUE), new Long(Long.MAX_VALUE))
.setFetchSize(1000)
.setConsistencyLevel(ConsistencyLevel.ONE)
val resultSet = session.execute(ps)
val iterator = resultSet.iterator()
var rowCount = 0
var expireCount = 0
while(!resultSet.isFullyFetched) {
resultSet.fetchMoreResults()
val row = iterator.next()
if (row != null) {
rowCount += 1
}
}
println(s"total number of rows ${rowCount}")
session.close()
该程序返回0行。
我更改了程序并设置了
.setFetchSize(1)
现在程序返回了所有431行。
我将程序更改为
.setFetchSize(100)
现在程序只返回了400行。
我想要的是,如果获取大小为100,但剩余行数仅为31,那么程序应返回31行而不返回空结果。似乎如果行数小于fetchSize那么它会返回空,而不是返回任何可用的行。
我的cassandra驱动程序是
"com.datastax.cassandra" % "cassandra-driver-core" % "3.1.4"
答案 0 :(得分:2)
!isFullyFetched()从不保证结果集不会耗尽(你应该调用isExhausted()来验证它)。
isExhausted()
返回此ResultSet是否有更多结果。
来源:https://docs.datastax.com/en/drivers/java/2.0/com/datastax/driver/core/ResultSet.html
答案 1 :(得分:1)
行数可通过以下方式计算:
val cql = "select id from tableStudent"
val resultSet = cassandraSession.execute(cql)
val rowCount = resultSet.getAvailableWithoutFetching
&#34; getAvailableWithoutFetching将给出cql执行返回的行数&#34;