【问题标题】:conditional query is not working in cql 3.0.0条件查询在 cql 3.0.0 中不起作用
【发布时间】:2014-01-23 15:18:49
【问题描述】:

我正在尝试在 cassandra CQL 中执行条件查询,但它给了我类似的错误

cqlsh:events> select * from standardevents where name=ActivityPg_view;

我正在执行上面的查询,它给了我下面的错误

错误请求:第 1:55 行在输入 ';' 处没有可行的替代方案 也许您打算使用 CQL 2?启动 cqlsh 时尝试使用 -2 选项。

cqlsh:events> select * from standardevents where name='ActivityPg_view';

我正在执行上面的查询,它给了我下面的错误

错误请求:by-columns 子句中不存在索引列 等号运算符

当我尝试使用 CQL 2 执行时

cqlsh:events> select * from standardevents where name=ActivityPg_view;

它给了我以下错误,

错误请求:在带有“equals”歌剧的 by-columns 子句中没有索引列 托

cqlsh:events> select * from standardevents where name='ActivityPg_view';

它给了我以下错误,

错误请求:在带有“equals”歌剧的 by-columns 子句中没有索引列 托 也许您打算使用 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'};

【问题讨论】:

  • 请包含来自DESCRIBE COLUMNFAMILY events.standardevents的输出
  • @AndySavage:我编辑了我的问题。

标签: cassandra cql cql3 cqlsh


【解决方案1】:

您的表 (CF) 没有名为 courseid 的字段(因此出现错误“在 where 子句中未定义名称 courseid”)。你不能查询不存在的东西。

你期待那里的那个领域吗? (如果有帮助,您对该表的 PK 称为“uuid”)您在查询正确的表吗?没什么好建议的。

编辑:更新后

您的 CQL3 尝试缺少名称周围的引号,但除此之外......在 Cassandra 中,您不能通过非键列随机查询。 Cassandra 是一个分区的行存储,它并不是真正设计用于以您尝试的方式进行查询。

您可以添加二级索引来解决此问题,但您应该知道它不像传统 SQL 中那样。拥有第二个索引将需要命中集群中的所有节点来执行查询。如果您的数据具有高基数,这也不理想。

在 Cassandra 中,一般前提是存储成本低廉,您的模型应该基于查询而不是数据。非规范化一切。例如,如果您需要按名称提取事件,那么您应该创建一个按名称作为键的表,并包含您需要的所有事件数据。这样读取它们是(本质上)和 O(1) 操作。

【讨论】:

  • @thanks AndySavage,但即使字段存在也是一样的,我用存在但结果相同的字段编辑了我的问题.. 你能再看看吗?
【解决方案2】:

为了能够通过您的姓名列进行限制,您需要为其添加二级索引。

示例

CREATE INDEX standardevents_index ON standardevents (name);

【讨论】:

    猜你喜欢
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多