Hadoop 如何使用UPDATE将CQL插入Cassandra,只插入主键的表?

Hadoop 如何使用UPDATE将CQL插入Cassandra,只插入主键的表?,hadoop,cassandra,cql,Hadoop,Cassandra,Cql,我需要将新行插入Cassandra,插入到只有主键列的表中,例如: CREATE TABLE users ( user_id bigint, website_id bigint, PRIMARY KEY (user_id, website_id) ) 显而易见的方法是插入: INSERT INTO users(user_id, website_id) VALUES(1,2); 但我想使用Hadoop CqlOutputFormat和CqlRecordWriter来实现这一点

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

CREATE TABLE users (
  user_id bigint,
  website_id bigint,
  PRIMARY KEY (user_id, website_id)
)
显而易见的方法是插入:

 INSERT INTO users(user_id, website_id) VALUES(1,2);  
但我想使用Hadoop CqlOutputFormat和CqlRecordWriter来实现这一点,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
如何解决这个问题?
非常感谢。

不确定这样的更新是否可以做到这一点。但是为什么不创建一个新的虚拟列,而不用于其他任何内容呢?那你就可以做了

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

正如您所解释的,您不能在Cassandra中更新主键值。作为解决方案,您还可以删除该行并插入一个具有正确值的新行。它只是比创建两行一行更简洁

我就是这么做的。我不喜欢这个解决方案,但找不到更好的。感谢您的帮助:)如果它让您感觉更好,那么无论是否在您的CQL中,虚拟列都存在。