lig*_*ght 17 cql cassandra datastax
我创建了一个简单的tabe:
CREATE TABLE test (
"type" varchar,
"value" varchar,
PRIMARY KEY(type,value)
);
Run Code Online (Sandbox Code Playgroud)
我在其中插入了5行:
INSERT INTO test(type,value) VALUES('test','tag1')
INSERT INTO test(type,value) VALUES('test','tag2')
INSERT INTO test(type,value) VALUES('test','tag3')
INSERT INTO test(type,value) VALUES('test','tag4')
INSERT INTO test(type,value) VALUES('test','tag5')
Run Code Online (Sandbox Code Playgroud)
我跑了SELECT * from test LIMIT 3,它按预期工作.
type | value
------+------
test | tag1
test | tag2
test | tag3
Run Code Online (Sandbox Code Playgroud)
当我跑SELECT COUNT(*) from test LIMIT 3,它产生:
count
-------
5
Run Code Online (Sandbox Code Playgroud)
不应该说3吗?
该Datastax文件似乎表明,指定LIMIT将覆盖10000默认值.为什么在这种情况下不起作用?如果重要的话,我在Cassandra 2.2.5上并通过cqlsh运行所有查询.
更新
Java驱动程序和CQLSH都经过测试,表明LIMIT确实无法按照文档中的规定运行.如果有任何Datastax员工阅读,您的意见将非常感谢.
Ral*_*alf 10
我对此的自发回应是行计数总是只在结果集中返回一行,说明找到的行数.因此任何大于1的LIMIT都不会产生影响.
但正如@light正确指出的那样,文档指出LIMIT应该适用于a count(*).并且有充分的理由.根据这篇博客文章, Cassandra无法提供任何元数据来提供数字或行,但必须检查每个分区(在每个节点上)以获得该数字.因此,这是一项非常昂贵的操作.
但是,与文档相反,当使用cqlsh或Java驱动程序(v3.0.0)查询C*2.2.4时,该LIMIT子句对报告的行数没有影响.没有10,000行的cqlsh的默认限制.如果超过10'000,则LIMIT不大于10'000.
文档和实现似乎不同步.虽然哪一个不正确但我不能说.
编辑
@Abhishek Anand引用的故障证明文档是错误的.不是行为.因此,指定限制为1将计算所有行.这是理想的行为.
Abh*_*and 10
这是cassandra中的一个Bug,版本2.2.x受其影响.
https://issues.apache.org/jira/browse/CASSANDRA-8216
他们已将其标记为已修复,但显然已将其传播到超出固定版本的版本.
无论如何,轻松,你的假设/思考是完全正确的.限制关键字必须应用于cassandra的计数(*),并且它在我正在使用的3.2.4和2.1.x版本中应该正常工作
| 归档时间: |
|
| 查看次数: |
7849 次 |
| 最近记录: |