ОБНОВЛЕНИЕ с Cassandra CQL

Я новичок в Cassandra и пытаюсь обновить таблицу с помощью этого CQL-запроса:

UPDATE analytics SET counter = ? WHERE hash = ?;

Я работаю в PHP, используя php-драйвер DataStax, код для этого утверждения:

$statement = $session->prepare("UPDATE analytics SET counter = ? WHERE hash = ?;");
$session->execute($statement, new Cassandra\ExecutionOptions(array('arguments' => array($count, $hash))));

Стол:

CREATE TABLE IF NOT EXISTS analytics (domain VARCHAR, page VARCHAR, ip INET, attributes MAP <VARCHAR, VARCHAR>, hash VARCHAR, counter INT, date TIMESTAMP, PRIMARY KEY(hash, domain, date));

Когда я выполняю заявление, я получаю ошибкуОтсутствует обязательный первичный ключ часть домена«поэтому я добавил предложение РАЗРЕШИТЬ ФИЛЬТРИРОВАНИЕ:

UPDATE analytics SET counter = ? WHERE hash = ? ALLOW FILTERING;

Но я получаю еще одну ошибку «в строке 1:48 отсутствует EOF в разрешении».
Что не так в этих запросах?

1

Решение

Исходя из вашей ошибки, я думаю, вы создали таблицу с составным первичным ключом (хэш, домен). Чтобы обновить запись в cassandra, вы должны предоставить весь ключ, то есть оба значения, поэтому ваш запрос должен выглядеть следующим образом:

ОБНОВЛЕНИЕ аналитики SET counter = counter + 1 ГДЕ хэш =? а домен =?

Для получения дополнительной информации проверьте это http://www.datastax.com/dev/blog/a-deep-look-to-the-cql-where-clause

Это говорит: В операторах UPDATE и DELETE все столбцы первичного ключа должны быть ограничены …

0

Другие решения

Вы должны передать все первичные ключи, когда вы хотите обновить столбец. Поэтому поместите все первичные ключи в пункт where.

0

Вы действительно хотите обновить все значения счетчика для хэша независимо от даты?

Во всяком случае, будьте осторожны с индексами. При использовании индекса обязательно указывайте ключ раздела, чтобы ваш запрос совпадал только с одним разделом. В противном случае у вас будет операция на уровне кластера, которая, скорее всего, прекратит работу.

Если ваша модель данных не поддерживает запрос, но вам нужно что-то аналитическое, хорошим вариантом будет использование Apache Spark и его использование для заданий пакетного типа.

0
По вопросам рекламы [email protected]