Cassandra setFetchSize和返回的行数

时间:2017-03-13 18:13:05

标签: scala cassandra

我编写了以下程序来查询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"

2 个答案:

答案 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;

相关问题