我在DSE3.2.4中遇到了一些特殊的问题,这是我的表结构,
CREATE TABLE tbl_samp (
PK text,
CK1 varint,
CK2 text,
CK3 varint,
value float,
PRIMARY KEY (PK, CK1, CK2, CK3)
) WITH
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds=864000 AND
read_repair_chance=0.100000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
compaction={'class': 'SizeTieredCompactionStrategy'} AND
compression={'sstable_compression': 'SnappyCompressor'};
我使用cqlstorage()将大量数据从pig转储到cassandra;
我有大约112万个不同的组合(pk,ck1,ck2,ck3)
所以当我跑完Pig的时候
这是我的Pig亲戚
reqDataCQL = foreach reqData generate TOTUPLE(TOTUPLE('PK',PK), TOTUPLE('CK1',CK1), TOTUPLE('Ck2',CK2), TOTUPLE('CK3',Ck3)), TOTUPLE(value);
store reqDataCQL into 'cql://MyKeyspace/tbl_samp?output_query=update+MyKeyspace.tbl_samp+set+value+%3D+%3F' using CqlStorage();
我可以看到以下内容
Input(s):
Successfully read 34327 records from: "/user/k/Input.txt"
Successfully read 4 records from: "cql://MyKeySpace/mappingtable"
Output(s):
Successfully stored 1128902 records in: "cql://MyKeySpace/tbl_samp?output_query=update+conflux.to1+set+value+%3D+%3F"
但是当我查询tbl\u samp表时,我只能看到8600条记录,它们是(pk和ck1)的组合
这是我的计数查询
select count(1) from tbl_samp limit 2000000;
count
-------
8681
我对复合键的理解有差距吗?
我知道pk是我的行键,(ck1,ck2,ck3)和value的组合将是我的列名
我对Cassandra的理解是
PK,(CK1|CK2|CK3|value:1),(CK11|CK22|CK33|value:11)
PK1,(CK111|CK222|CK333|value:111)
请帮帮我
2条答案
按热度按时间sqougxex1#
对不起,是我的错,我对复合键的理解是正确的。我有一个自定义项,我正在覆盖(pk,ck1,ck2,ck3)的组合
soo一般基于cassandra存储分区键,并结合分区键和聚类列给出每一行。
而列名将是唯一的聚类列组合。
谢谢
9gm1akwq2#
对于主键pk,ck1,ck2,ck3:
分区密钥是pk。它决定行进入哪个分区。在分区内,ck1、ck2和ck3的每个唯一组合定义了列。因此,主键中的所有键组成一个唯一的引用。如果插入多个具有相同pk、ck1、ck2和ck3的条目,则最后一次写入将获胜。
你的cql查询是什么?密钥空间的复制因子是多少?您为读写操作指定的一致性级别是什么?可能是您的读写一致性(rc和wc)很低,所以您正在读取尚未写入的副本。