Cassandra结果无法响应表中的正确行

时间:2017-08-31 09:14:06

标签: cassandra

我的Cassandra数据库未按预期响应行结果。请参阅我的Cassandra密钥空间创建的以下详细信息以及查询Count(*)

Connected to Test Cluster at 127.0.0.1:9042. [cqlsh 5.0.1 | Cassandra
3.11.0 | CQL spec 3.4.4 | Native protocol v4] Use HELP for help. cqlsh> CREATE KEYSPACE key1 WITH replication = {'class':'SimpleStrategy', 'replicationfactor' : 1};

cqlsh> CREATE TABLE Key.Transcation_CompleteMall (i text, i1 text static, i2 bigint , i3 int static, i4 decimal static, i5 bigint static, i6 decimal static, i7 decimal static, PRIMARY KEY ((i),i1));


cqlsh> COPY Key1.CompleteMall (i,i1,i2,i3,i4,i5,i6,i7) FROM '/home/gpadmin/all.csv' WITH HEADER = TRUE; Using 16 child processes

Starting copy of Key1.completemall with columns [i, i1, i2, i3, i4, i5, i6, i7]. Processed: 25461792 rows; Rate:   15162 rows/s; Avg. rate:   54681 rows/s
> **bold**25461792  rows imported from 1 files in 7 minutes and 45.642 seconds (0 skipped).

cqlsh> select count(*) from Key1.transcation_completemall; OperationTimedOut: errors={'127.0.0.1': 'Client request timeout. See Session.execute[_async](timeout)'}, last_host=127.0.0.1 cqlsh> exit


[gpadmin@hmaster ~]$ cqlsh --request-timeout=3600
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.0 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.


cqlsh> select count(*) from starhub.transcation_completemall;

 count
---------
 **bold**2865767

(1 rows)

Warnings :
Aggregation query used without partition key

cqlsh>

我只有2865767行但是复制命令显示25461792行接受了Cassandra。 all.csv文件大小为2.5G。为了评估我将表导出到另一个文件test.csv文件,我想知道它的文件大小变为252Mb。

我的问题是,Cassandra会自动删除连续的副本吗? 如果是,Cassandra如何删除表中的副本?像主键重复或分区键或类似精确的字段重复?

数据丢失的可能性

期待您宝贵的建议

预先感谢大家

2 个答案:

答案 0 :(得分:3)

Cassandra将使用相同的主键覆盖数据(理想情况下,所有数据库都不会有主键的重复值(某些抛出约束错误,而有些会覆盖数据))。

示例:

CREATE TABLE test(id int,id1 int,name text,PRIMARY KEY(id,id1))

INSERT INTO test(id,id1,name) VALUES(1,2,'test');
INSERT INTO test(id,id1,name) VALUES(1,1,'test1');
INSERT INTO test(id,id1,name) VALUES(1,2,'test2');
INSERT INTO test(id,id1,name) VALUES(1,1,'test1');

SELECT * FROM test;
 -----------------
|id  |id1  |name  |
 -----------------
|1   |2    |test2 |
 -----------------
|1   |1    |test1 |
 -----------------

上述声明在表1中只有2条记录,主键(1,1)和其他主键(1,2)。

因此,如果ii1的值重复,则数据将被覆盖。

答案 1 :(得分:0)

也许在SELECT语句中检查LIMIT选项,请参阅参考文档here

参考文档说:

指定使用LIMIT返回的行

使用LIMIT选项,您可以指定查询返回有限数量的行。

SELECT COUNT()FROM big_table LIMIT 50000; SELECT COUNT()FROM big_table LIMIT 200000; 如果数据库中有105,291行,这些语句的输出将是:50000和105,291。 cqlsh shell的默认行限制为10,000 。 Cassandra服务器和本机协议不限制可以返回的行数,但超时会停止运行查询以防止运行导致系统不稳定的格式错误的查询。