Cassandra 包含查询错误

Cassandra Contains query error

我是 Cassandra 的新手,正在尝试弄清楚如何使用 Cassandra 获得一个简单的包含查询。

我的table看起来像这样

CREATE TABLE events (
  timekey text,
  id timeuuid,
  event_types list<text>,
  PRIMARY KEY ((timekey), id)
)

我的查询:

cqlsh> select count(1) from events where event_types contains 'foo';

**Bad Request: line 1:46 no viable alternative at input 'contains'**

对这个错误有什么想法吗?

此外,是否可以在一个查询中查询多个 event_types。我看不出有什么方法可以用 Contains 来做到这一点。在常规 sql

中与此等效的内容

关系型 SQL 示例:

select count(1) from events where event_types in ('foo', 'bar')

几件事。首先,当我创建您的模式时,插入一行,我收到与您不同的错误消息:

aploetz@cqlsh:Whosebug2> CREATE TABLE events (
              ...   timekey text,
              ...   id timeuuid,
              ...   event_types list<text>,
              ...   PRIMARY KEY ((timekey), id)
              ... );
aploetz@cqlsh:Whosebug2> INSERT INTO events (timekey, id, event_types) 
    VALUES ('1', now(),['foo','bar']);
aploetz@cqlsh:Whosebug2> select count(1) from events where event_types contains 'foo';
InvalidRequest: code=2200 [Invalid query] message="No secondary indexes on the restricted
    columns support the provided operators: "

要使其正常工作,您需要在 event_types 集合上创建二级索引。当然,集合的二级索引是 new feature as of Cassandra 2.1。由于您的错误消息不同,我猜测您需要升级到 2.1。

我现在在我的沙盒中使用 2.1.5,所以当我在 event_types 上创建索引时,这个有效:

aploetz@cqlsh:Whosebug2> CREATE INDEX eventTypeIdx ON events(event_types);
aploetz@cqlsh:Whosebug2> select count(1) from events where event_types contains 'foo';

 count
-------
     1

(1 rows)

尽管这可能有效,但已知大型表或大型集群中的二级索引性能不佳。我预计集合的二级索引会表现得更差,所以请将其作为警告。

Also Is it possible to query for multiple event_types in one single query?

有很多方法可以做到这一点,但由于上述性能问题,我建议不要这样做。我在这里回答了类似的问题,如果您有兴趣: