Cassandra使用Where子句

时间:2016-10-29 08:57:48

标签: collections cassandra primary-key frozen

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

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

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

我一直在寻找如何做到这一点,但我无法找到答案。

做类似

的事情
const query = 'SELECT name from rick_morty';

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

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

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

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

2 个答案:

答案 0 :(得分:0)

  

这可能吗?

是。请参阅#8 here

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

这应该有效:

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

答案 1 :(得分:0)

以下查询应该有效,

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

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