【问题标题】:In cassandra cqlsh, how do I select from map<ascii, ascii> in a table?在 cassandra cqlsh 中,如何从表中的 map<ascii, ascii> 中进行选择?
【发布时间】:2015-09-19 05:32:36
【问题描述】:

基本上我的桌子是这样设置的:

CREATE TABLE points (
  name ascii,
  id varint,
  attributes map<ascii, ascii>,
  PRIMARY KEY (name, id)
)

如果我运行以下 SELECT 语句,我会返回:

SELECT id, attributes from points limit 5;

   id | attributes
  ----+------------------------------------------
    1 | {STATION/Name: ABC, Type: 2, pFreq: 101}
    2 | {STATION/Name: ABC, Type: 1, pFreq: 101}
    3 | {STATION/Name: DEF, Type: 1, pFreq: 103}
    4 | {STATION/Name: GHI, Type: 2, pFreq: 105}
    5 | {STATION/Name: GHI, Type: 1, pFreq: 105}

我想做的是能够根据属性内部的信息形成一个 WHERE 子句。类似于以下语句:

SELECT id FROM points WHERE name = 'NAME' AND attributes['pFreq'] = 101;

但是,当我运行它时,我收到以下错误:

Bad Request: line 1:56 no viable alternative at input '['

我看了this的讨论,好像还不支持,这是真的吗?或者有没有办法过滤属性信息?

这是我正在使用的版本:

[cqlsh 4.1.1 | Cassandra 2.0.7 | CQL spec 3.1.1 | Thrift protocol 19.39.0]

【问题讨论】:

    标签: cassandra cql3 cqlsh thrift-protocol


    【解决方案1】:

    是的,你可以使用 CONTAINS:

    SELECT * FROM points WHERE attributes CONTAINS 101;
    

    【讨论】:

    • 当我使用 CONTAINS 时,我收到以下错误:错误请求:第 1:104 行在输入 'CONTAINS' 处没有可行的替代方案
    • 可以用map代替ascii吗?还是强制使用ascii?
    • 在点(属性)上创建索引返回“错误请求:尚不支持集合索引”。所以这似乎是我问题的根源。除了将 pFreq 拆分为自己的架构部分之外,不确定是否有解决方法。
    • 你能把你的 cassandra 版本升级到 cassandra 大于 2.1 吗?我在 dsc-cassandra-2.1.4 中创建了一个索引,并且工作正常
    • 我想这取决于我的开发人员,哈哈。但感谢您的信息。我不知道他们为什么会以这样一种方式架构表,我们在功能存在之前无法读取项目。哦,好吧!
    猜你喜欢
    • 2013-07-18
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 2017-09-06
    • 2023-03-28
    相关资源
    最近更新 更多