如何使用update将cql插入cassandra,插入到只有主键的表中?

fcg9iug3  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(479)

我需要将新行插入到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

如何解决这个问题?非常感谢。

e5nqia27

e5nqia271#

如前所述,不能在cassandra中更新主键值。作为一种解决方案,您还可以删除该行并插入一个新的具有正确值的行。它只是比用一个错误的行创建两行要干净一点。

tnkciper

tnkciper2#

不知道你是否可以这样做更新。但是为什么不创建一个新的虚拟列,而不用于其他任何东西呢?那你就可以了

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

相关问题