如何使用CID向Cassandra插入只使用主键的表,使用UPDATE?

时间:2014-05-14 14:39:06

标签: hadoop cassandra cql

我需要向Cassandra插入新行,到只有主键列的表,例如:

CREATE TABLE users (
  user_id bigint,
  website_id bigint,
  PRIMARY KEY (user_id, website_id)
)

显而易见的方法是INSERT:

 INSERT INTO users(user_id, website_id) VALUES(1,2);  

但是我想使用Hadoop CqlOutputFormat来做,而CqlRecordWriter只支持UPDATE语句。这通常不是问题,因为UPDATE在理论上在语义上与INSERT相同。 (如果给定的主键不存在,它将创建行)。 但是在这里......我不知道如何构建UPDATE语句 - 似乎CQL没有 支持我的情况,其中有非主键列。看看我尝试了什么:

> update users set where user_id=3 and website_id=2 ;      
Bad Request: line 1:18 no viable alternative at input 'where'

> update users set website_id=2  where user_id=3;                                                                                                                              
Bad Request: PRIMARY KEY part website_id found in SET part

> update users set website_id=2  where user_id=3 and website_id=2;                                                                                                             
Bad Request: PRIMARY KEY part website_id found in SET part

> update users set website_id=2,user_id=1;
Bad Request: line 1:40 mismatched input ';' expecting K_WHERE

关于如何解决它的一些想法? 非常感谢。

2 个答案:

答案 0 :(得分:3)

不确定是否可以使用此类更新执行此操作。但是为什么不创建一个你永远不会用于其他任何东西的新的虚拟列?然后你可以做

update users set dummy=1 where user_id=3 and website_id=2;

答案 1 :(得分:0)

如您所述,您无法更新Cassandra中的主键值。作为解决方案,您还可以删除该行并插入一个具有正确值的新行。它比创建两行不正确更简单一些。