0

我在 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

我对复合键的理解有什么差距吗?

我知道 PK 是我的 RowKey 并且 (CK1,CK2,CK3) 与 Value 的组合将是我的列名

我对 Cassandra Composite 的理解是

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

请帮助我

4

2 回答 2

0

Sorry its my fault my understanding of Composite Key was correct. I have one UDF where I am overwriting this combination of (PK,CK1,CK2,CK3)

Soo in general cassandra stores based on Partition Key and combination of partition key and clustering columns gives each row.

and column names will be unique combination of Clustering columns.

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

thanks

于 2014-07-29T11:18:50.260 回答
0

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

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

你的 CQL 查询是什么?密钥空间的复制因子是多少?您为读取和写入指定什么一致性级别?可能是您的读写一致性(RC 和 WC)较低,因此您正在读取尚未写入的副本。

于 2014-07-28T13:46:58.630 回答