【问题标题】:cassandra 2.0.7 cql SELECT Secific Value from mapcassandra 2.0.7 cql 从地图中选择特定值
【发布时间】:2014-07-25 06:08:55
【问题描述】:

ALTER TABLE 用户添加待办事项地图;

UPDATE users SET todo = { '1':'1111', '2':'2222', '3':'3' ,.... } WHERE user_id = 'frodo';

现在,我想运行follow cql,但是失败了,这里还有其他方法吗?

SELECT user_id, todo['1'] FROM users WHERE user_id = 'frodo';

ps:

我的地图可以改变的长度。例如: { '1':'1111', '2':'2222', '3':'3' } 或 { '1':'1111', '2':'2222', '3': '3', '4':'4444'} 或 { '1':'1111', '2':'2222', '3':'3', '4':'4444' ...}

【问题讨论】:

  • 看下面stackoverflow.com/questions/16024839/…我想它会解决你的问题。
  • 我的情况与您推荐的网址不同。我的地图可以改变的长度。例如: { '1':'1111', '2':'2222', '3':'3' } 或 { '1':'1111', '2':'2222', '3': '3', '4':'4444'} 或 { '1':'1111', '2':'2222', '3':'3', '4':'4444' ...}

标签: select map cql3 cassandra-2.0


【解决方案1】:

如果您想使用地图集合,您将受到只能选择整个集合的限制 (docs)。

我认为您可以使用referenced question 的建议,即使您的地图长度发生变化。如果您将每个 user_id 的这些键/值对存储在单独的字段中,并根据 user_idtodo_k 创建主键,您将可以在选择查询中访问它们。

例如:

CREATE TABLE users (
  user_id text,
  todo_k text,
  todo_v text,
  PRIMARY KEY (user_id, todo_k)
);

-----------------------------
| user_id | todo_k | todo_v |
-----------------------------
| frodo   | 1      | 1111   |
| frodo   | 2      | 2222   |
| sam     | 1      | 11     |
| sam     | 2      | 22     |
| sam     | 3      | 33     |
-----------------------------

然后你可以做如下查询:

select user_id,todo_k,todo_v from users where user_id = 'frodo';
select user_id,todo_k,todo_v from users where user_id = 'sam' and todo_k = 2;

【讨论】:

    猜你喜欢
    • 2015-01-10
    • 2012-06-17
    • 2016-04-14
    • 2014-03-23
    • 1970-01-01
    • 2015-04-18
    • 2013-09-13
    • 2011-12-26
    • 2018-02-21
    相关资源
    最近更新 更多