如何使用 Cequel 生成删除语句 (Rails)
How to generate a delete statement with Cequel (Rails)
我想用 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
关于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
s 比遍历 cc.[=19 下的每个其他聚类列给了我一个更有效的解决方案=]
关于github的更多解释:https://github.com/cequel/cequel/issues/237
我想用 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
关于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
s 比遍历 cc.[=19 下的每个其他聚类列给了我一个更有效的解决方案=]
关于github的更多解释:https://github.com/cequel/cequel/issues/237