如何使用Cequel(Rails)生成删除语句

时间:2015-05-07 14:31:39

标签: ruby-on-rails ruby-on-rails-4 cql3 cequel

我想用Cequel生成DELETE statement

DELETE FROM users where pk = 'jsmith' and cc < 100;

让我们说我的用户模型看起来像这样

class Users
    include Cequel::Record

    key :pk, :bigint, { partition: true } # partition key
    key :cc, :timestamp, { order: :desc } # clustering column

end

现在,我正在使用一个简单的where子句迭代行并逐个销毁它们,我知道这不是正确的方法,但是我无法找到一种方法来生成正确的声明一次删除它们。

如何使用Users模型生成上述CQL语句。

编辑:还发布了here

1 个答案:

答案 0 :(得分:0)

关于smaller-than部分,不允许在DELETE语句中的主键部分使用它。

 ~ cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.1.2 | CQL spec 3.2.0 | Native protocol v3]
Use HELP for help.
cqlsh:db_development> DELETE FROM users WHERE pk = 'jsmith' AND cc < 100 ;
code=2200 [Invalid query] message="Invalid operator < for PRIMARY KEY part cc"
cqlsh:db_development> DELETE FROM users WHERE pk = 'jsmith' AND cc = 100 ;
cqlsh:db_development>

delete_all方法会创建DELETE语句 这是如何使用它:

irb(main):036:0> Users.where(pk: 'jsmith').where(cc: 100).delete_all
CQL (2ms) DELETE FROM users WHERE pk = 'jsmith' AND cc = 100
=> #<Cassandra::Result:0x3fdb891da8cc @rows=[] @last_page=true>
irb(main):037:0>

由于我在cc之后有更多的聚类列,因此迭代cc给出了一个更有效的解决方案,而不是遍历cc下的每个其他聚类列。

关于github的更多解释:https://github.com/cequel/cequel/issues/237