Как сгенерировать оператор удаления с помощью Cequel (Rails)

Я хочу сгенерировать оператор DELETE с помощью Cequel:

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.

РЕДАКТИРОВАТЬ: также размещены здесь

1 ответ

Решение

О 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 один, перебирая ccs дает мне более эффективное решение, чем итерация по всем остальным столбцам кластеризации в cc.

Еще несколько объяснений на github: https://github.com/cequel/cequel/issues/237

Другие вопросы по тегам