我正在尝试在cassandra CQL中执行条件查询,但它给了我像
这样的错误cqlsh:events> select * from standardevents where name=ActivityPg_view;
我正在执行上面的查询,它给我以下错误
错误请求:第1:55行输入'没有可行的选择';' 也许你打算使用CQL 2?启动cqlsh时尝试使用-2选项。
cqlsh:事件> select * from standardevents name ='ActivityPg_view';
我正在执行上面的查询,它给我以下错误
错误请求:by-columns子句中没有索引列 平等运营商
当我尝试使用CQL 2执行
时cqlsh:events> select * from standardevents where name=ActivityPg_view;
它给了我以下错误,
错误请求:by-columns子句中没有带有“equals”opera的索引列 TOR
cqlsh:事件> select * from standardevents name ='ActivityPg_view';
它给了我以下错误,
错误请求:by-columns子句中没有带有“equals”opera的索引列 TOR 也许你打算使用CQL 3?启动cqlsh时尝试使用-3选项。
那么有人可以提出问题以及如何解决这个问题并执行条件查询吗?
cqlsh> DESCRIBE COLUMNFAMILY events.standardevents;
CREATE TABLE standardevents (
uuid timeuuid PRIMARY KEY,
data text,
name text,
time text,
tracker text,
type text,
userid text
) WITH bloom_filter_fp_chance=0.010000
AND caching='KEYS_ONLY'
AND comment=''
AND dclocal_read_repair_chance=0.000000
AND gc_grace_seconds=864000
AND read_repair_chance=0.100000
AND replicate_on_write='true'
AND populate_io_cache_on_flush='false'
AND compaction={'class': 'SizeTieredCompactionStrategy'}
AND compression={'sstable_compression': 'SnappyCompressor'};
答案 0 :(得分:5)
您的表(CF)没有名为courseid的字段(因此错误“where子句中的未定义名称courseid”)。您无法查询不存在的内容。
你期待那个领域吗? (如果有帮助,那个表的PK被称为'uuid')你在查询正确的表格吗?没有其他建议。
修改:更新后
您的CQL3尝试缺少名称周围的引号,但除此之外......在Cassandra中,您无法通过非键列随机查询。 Cassandra是一个分区行存储,它并不是真正用于以你正在尝试的方式进行查询。
您可以添加辅助索引来修复此问题,但您应该知道它与传统SQL不同。拥有第二个索引需要将群集中的所有节点都命中到查询中。如果您的数据具有高基数,那也不理想。
在Cassandra中,一般的前提是存储很便宜,您应该根据查询而不是数据来建立模型。一切都不正常。例如,如果您需要按名称提取事件,那么您应该创建一个按名称键入的表,并包含您需要的所有事件数据。这样读取它们(基本上)和O(1)操作。
答案 1 :(得分:0)
为了能够按名称列限制,您需要为其添加二级索引。
示例强>:
CREATE INDEX standardevents_index ON standardevents (name);