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