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

6g8kf2rb  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(354)

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

请帮帮我

sqougxex

sqougxex1#

对不起,是我的错,我对复合键的理解是正确的。我有一个自定义项,我正在覆盖(pk,ck1,ck2,ck3)的组合
soo一般基于cassandra存储分区键,并结合分区键和聚类列给出每一行。
而列名将是唯一的聚类列组合。

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

谢谢

9gm1akwq

9gm1akwq2#

对于主键pk,ck1,ck2,ck3:
分区密钥是pk。它决定行进入哪个分区。在分区内,ck1、ck2和ck3的每个唯一组合定义了列。因此,主键中的所有键组成一个唯一的引用。如果插入多个具有相同pk、ck1、ck2和ck3的条目,则最后一次写入将获胜。
你的cql查询是什么?密钥空间的复制因子是多少?您为读写操作指定的一致性级别是什么?可能是您的读写一致性(rc和wc)很低,所以您正在读取尚未写入的副本。

相关问题