首页 文章

Cassandra使用Where子句中的Collection Primary Key选择查询

提问于
浏览
1

我是Cassandra的新手,我创建了一个以冷冻集合为主键的表

cqlsh> create table rick_morty (id uuid, name text, adventure text, instigator frozen<set<text>>, PRIMARY KEY((instigator), adventure, name, id));

现在我想基于主键(发起者)查询集合中保存的所有值 . 我发现如果我只想查询1个值,我可以使用CONTAINS'contact_value',但我想查询整个集合 .

我一直在寻找如何做到这一点,但我找不到答案 .

做点什么

const query = 'SELECT name from rick_morty';

检索所有结果,但我想做...

const query = 'SELECT name from rick_morty where instigator = ["Rick", "Morty", "Beth"]';

检索与该煽动者数组相关联的所有名称列表 .

这可能吗??我是以不正当的方式创建我的 table 吗?

2 回答

  • 0

    这可能吗?

    是 . 见#8 here .

    “过滤用户定义类型的列上的数据 . 创建索引然后运行条件查询 . 在Cassandra 2.1.x中,您需要在WHERE子句中列出name列的所有组件 . ”

    这应该工作:

    SELECT name from rick_morty where instigator = { 'Rick', 'Morty', 'Beth'};
    
  • 0

    以下查询应该有效,

    SELECT name from rick_morty where instigator contains 'Rick' AND contains 'Morty';
    

    但是,这可能不是一种有效/正确的实现方式,因为集合旨在用于存储/获取给定主键的一组数据 . 因此,如果此要求是您的主要用例之一,我建议您通过将查询denormolise到另一个表中来重新设计数据模型 .

相关问题