Cassandra C#驱动程序只返回前5000行



我试图从Cassandra表中获取所有记录,但只获得了5000行。有没有办法把所有的结果都制成一张表?

以下是版本详细信息:
这是驱动程序版本3.11.0
我的服务器版本是[cklsh 5.0.1|Cassandra 3.11.4|CQL规范3.4.4|Native protocol v4]

下面是我的代码

//Create a cluster instance using 3 cassandra nodes.
var cluster = Cluster.Builder()
.AddContactPoints("xx.xx.xx.xx")
.Build();
var session = cluster.Connect("keyspace");
var rs = session.Execute("select * from table ALLOW FILTERING");
ini i=0;
foreach (var row in rs)
{
i++;
}

i的值始终为5000。我试图实现分页来获取所有数据,但没能做到

while (!rs.IsFullyFetched)
{
rs.FetchMoreResults();
foreach (var row in rs)
{
i++;
}
}

我仍然得到相同的结果

同时尝试跟随URLhttps://docs.datastax.com/en/developer/csharp-driver/3.13/features/paging/但这也不起作用,因为我没有使用任何过滤器
但是当我尝试引入过滤器时,结果是0行。

var ps = session.Prepare("select * from table where state = ? ALLOW FILTERING");
//// Set the page size at statement level.
var statement = ps.Bind("xyz").SetPageSize(1000);
var rs = session.Execute(statement);
var i = 0;
foreach (var row in rs)
{
i++;
}

有特定状态的记录,但没有得到任何数据。记录数为零
早些时候我的驱动程序版本也有问题
查询Cassandra表单C#没有显示结果

默认情况下,fetchsize设置为5000,以保护应用程序不在单个响应中意外检索到大型结果集,也许你可以使用.setFetchSize(int(属性

我想您已经知道C#驱动程序默认启用了分页(AutoPage = true(,默认页面大小为5000(DefaultPageSize = 5000(。

我认为你的测试的问题是你在循环中使用RowSet.IsFullyFetched属性作为条件:

while (!rs.IsFullyFetched)
{
...
}

尝试将其替换为RowSet.IsExhausted()方法:

while (!rs.IsExhausted())
{
rs.FetchMoreResults();
foreach (var row in rs)
{
i++;
}
}

RowSet.IsExhausted()返回真/假,这取决于是否有更多类似于IsFullyFetched的结果,但不同之处在于它将寻呼更多结果。干杯

最新更新