【问题标题】:How can I insert to Cassandra with CQL, to table with only primary key, using UPDATE?如何使用 UPDATE 将 CQL 插入 Cassandra,插入仅具有主键的表?
【发布时间】:2014-07-02 16:41:40
【问题描述】:

我需要向 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 仅支持 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

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

【问题讨论】:

    标签: hadoop cassandra cql


    【解决方案1】:

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

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

    【讨论】:

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

    正如您所解释的,您无法在 Cassandra 中更新主键值。作为一种解决方案,您还可以删除该行并在其中插入一个具有正确值的新行。这比创建两行不正确的行要干净一些。

    【讨论】:

      猜你喜欢
      • 2013-07-16
      • 1970-01-01
      • 2012-02-26
      • 2012-10-24
      • 2014-03-13
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      相关资源
      最近更新 更多