数据如何存储在cassandra复合键列族中

时间:2014-07-28 13:20:30

标签: cassandra apache-pig datastax-enterprise cassandra-cli cqlsh

我在DSE 3.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运行时

这是我的猪关系

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_samp时,我只能看到8600条记录,它们是(PK和CK1)的组合

这是我的计数查询

    select count(1) from tbl_samp limit 2000000;

 count
-------
  8681

我对Composite Key的理解是否存在差距?

我知道PK是我的RowKey 和(CK1,CK2,CK3)组合的值将是我的列名

我对Cassandra Composite的理解是

PK,(CK1|CK2|CK3|value:1),(CK11|CK22|CK33|value:11)
PK1,(CK111|CK222|CK333|value:111)

请帮我这个

2 个答案:

答案 0 :(得分:0)

对于您的主键PK,CK1,CK2,CK3:

分区键是PK。它决定行进入哪个分区。在一个分区内,CK1,CK2和CK3的每个独特组合定义了该列。因此,主键中的所有键都构成了唯一的引用。如果插入多个具有相同PK,CK1,CK2和CK3的条目,则最后一次写入将获胜。

你的CQL查询是什么?密钥空间的复制因素是什么?您为读取和写入指定了什么一致性级别?可能是您的读写一致(RC和WC)很低,因此您可以从尚未写入的副本中读取。

答案 1 :(得分:0)

对不起我的错 我对Composite Key的理解是正确的。 我有一个UDF,我覆盖了这个组合(PK,CK1,CK2,CK3)

一般来说,基于分区键的cassandra存储以及分区键和聚类列的组合给出了每一行。

和列名称将是Clustering列的唯一组合。

PK,(CK1|CK2|CK3|value:1),(CK11|CK22|CK33|value:11)
PK1,(CK111|CK222|CK333|value:111)

感谢