使用Cassandra时,在cqlsh
中输入:
cqlsh:info> SELECT count(*) FROM info.customerinfo WHERE KEY = 'ds10128832';
并得到以下结果:
count
-------
10000
Default LIMIT of 10000 was used. Specify your own LIMIT clause to get more results.
基本上我想查找rowkey
ds10128832
中已存储的列数。
输出是否意味着我在该密钥中存储了10000列,并且由于LIMIT为10000,因此无法向其中添加更多列?如果达到10000,更多列将不会插入该键?如果是,我该如何改变这种情况?我必须设置LIMIT
吗?因为我要存储很多列,所以我不想拥有LIMIT
。
答案 0 :(得分:4)
Cassandra术语在分区和行之间产生差异。查询结果表明分区键ds10128832中有10000行。
实际上,正如catpaws指出的那样,默认限制为10000,因此可能有更多行具有该分区键。要计算其余部分,您需要指定更高的LIMIT子句,例如:
cqlsh:信息> SELECT count(*)FROM info.customerinfo WHERE KEY ='ds10128832'LIMIT 100000 ;
如果在查询过程中发现您一直在达到限制,则可能需要向上增加限制数。
在你的问题中,你提到计算COLUMNS,我已经回答了关于ROWS的问题。我希望我不会误解你的意图。在内部,Cassandra根据您的排序键存储“行”作为列(实际上是列集),这是我假设您所指的。在这种情况下,术语很重要。 catpaws提到有2B列限制,这包括基于排序键和行的所有子列,这将有助于限制。每个行都会提供一些实际(内部)列,这些列等于架构中不是主键的值的数量。
例如,如果你的表是
CREATE TABLE info.customerinfo( 关键文字, 帐号文字, 电邮文字, 屏幕名称文字, 主要关键(关键,帐户) );
然后,上面的计数将计算分区键“ds10128832”上的“帐户”行数。每个(密钥,帐户)组合将是一个唯一的逻辑行,它将(内部)为两列:一列用于电子邮件,一列用于屏幕名称。在点击Cassandra强加的栏目中的2B限制之前,每个customerinfo“key”可以假设拥有1B这样的帐户。
编辑:达到限制将引发异常。
答案 1 :(得分:1)
分区(行)中的最大列数为2B。输出中的默认LIMIT意味着cqlsh将其显示的结果数限制为10000.输出中的默认LIMIT在此页面中说明:http://www.datastax.com/documentation/cql/3.1/cql/cql_reference/select_r.html?scroll=reference_ds_d35_v2q_xj__specifying-rows-returned-using-limit
在Cassandra 2.1.1中,您可以在cqlsh中使用查询分页来以100行的方式输出查询,然后提示更多:http://www.datastax.com/documentation/cql/3.1/cql/cql_reference/paging.html
此页面列出了CQL内容(例如分区中的列)具有硬上限:http://www.datastax.com/documentation/cql/3.1/cql/cql_reference/refLimits.html。
select表达式中使用的COUNT(*)返回与查询匹配的行数:http://www.datastax.com/documentation/cql/3.1/cql/cql_reference/select_r.html?scroll=reference_ds_d35_v2q_xj__counting-returned-rows