运行以下CQL查询时:
SELECT DISTINCT partition_key FROM table_name;
这应该是为了返回给定表使用的分区键列表。但是,默认超时设置为10秒时,它总是超时:
ReadTimeout: Error from server: code=1200 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 1, 'consistency': 'ONE'}
将超时设置更改为:
read_request_timeout_in_ms: 60000
range_request_timeout_in_ms: 60000
request_timeout_in_ms: 60000
然后运行所述查询导致几个Cassandra节点崩溃,包括协调器节点。该表具有大约> 100M的行,具有大约5000个唯一的分区键。
是否有解决方法来查找唯一的分区键列表?
答案 0 :(得分:1)
使用以下任一实用程序获取密钥列表还有另一种方法:
sstabledump -e
OR
$ bin/sstablekeys <sstable_name>
但是您需要在所有节点数据目录中运行它们并手动过滤不同的键。不是直截了当但可行!
以下是实用程序Cassandra SSTabledump和Cassandra SSTablekeys
的参考查询超时的原因是
答案 1 :(得分:1)
这个查询应该可以在现有版本的cassandra(2.1和更新版本)上运行正常,假设您使用的是支持分页/获取大小的客户端,并使用足够低的提取大小(实际限制取决于您的服务器负载) )。
使用第三方驱动程序,查找删除页面/获取大小的选项。将其设置为100,看看它是否表现得更好。
使用cqlsh,如果你有cassandra 3.0或更新版本,请尝试PAGING 100;