如何使用一个cql语句查询更多记录

时间:2017-01-04 06:14:25

标签: cassandra cql3

创作脚本:

Create Table TestTable (
  A1 ascii,
  A2 int,
  A3 int,
  A4 ascii,
  A5 int,
  A6 bigint,
  A7 bigint,
  A8 ascii,
  PRIMARY KEY ((A1, A2,A3, A4),A5)
)  WITH compression =  { 'sstable_compression' : 'DeflateCompressor', 'chunk_length_kb' : 64 }
    AND compaction =  { 'class' : 'LeveledCompactionStrategy' };

分区键是(A1,A2,A3,A4) 我想通过(A1,A2,A3)查询数据以获得更多记录 实际上,我想选择一百条记录。如果使用(A1,A2,A3,A4)作为条款条件,我只能得到10条记录 所以我打算使用less where子句条件。我知道我不仅可以使用(A1,A2,A3)作为条款条件 有没有办法实现这个查询?范围条件?或其他方式?
我只是使用一个cql语句进行测试。我不会更改数据模型。

1 个答案:

答案 0 :(得分:1)

您已经知道需要做什么:无法从部分主键获取记录。这是基本要求,因为分区键用于定位集群中的数据:它们告诉Cassandra partition 所请求的数据是什么,而分区键元组上缺少的组件意味着Cassandra无法找到请求分区。一旦Cassandra知道数据的位置,它将获取聚类键所订购的所有记录。

解决问题的方法是创建一个仅包含(A1,A2,A3)作为分区键的表,并从该表中获取记录。您可以根据需要保留两个表,但请记住,如果您的原始模型有(A1,A2,A3,A4)有原因,那么从分区键中删除A4可能会在您的群集中创建一个热点,因为更多数据将适合单个分区。