Обновите столбец списка строк в базе данных Cassandra с помощью Scala - PullRequest
1 голос
/ 09 апреля 2019

Я новичок в Cassandra и Scala, я работаю над потребителем Kafka (написанным на Scala), который должен обновить поле строки на Cassandra на основе данных, которые он получает. И пока проблем нет.

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

UPDATE keyspaceName.tableName
SET fieldToChange = newValue
WHERE id = idValue
AND fieldA = '${currentRow.getString("fieldA")}'
AND fieldB = ${currentRow.getInt("fieldB")}
...
AND fieldX =  ${currentRow.getList("fieldX", classOf[String]).toString}
...

Но я получаю даже исключение:

com.datastax.driver.core.exceptions.SyntaxError: line 19:49 no viable alternative at input ']' (... 482                   AND fieldX =  [[listStringItem1]]...)

В настоящее время я не нашел ничего, что могло бы помочь мне через Интернет

1 Ответ

0 голосов
/ 09 апреля 2019

Проблема в том, что строковое представление списка в Scala не соответствует представлению Кассандры в списке , поэтому оно генерирует ошибки.

Вместо непосредственного построения оператора CQL вваш код, лучше использовать PreparedStatement и привязывать к нему переменные:

  1. сначала это ускорит выполнение, поскольку Cassandra не будет анализировать каждый оператор отдельно;
  2. будет проще связывать переменные, так как вам не нужно заботиться о соответствующем строковом представлении

Но будьте очень осторожны со Scala - драйвер Java ожидает списки, наборы, карты и базовые типы JavaНапример, ints и т. д. Вы можете посмотреть пакет java-driver-scala-extras , но вам нужно будет скомпилировать его самостоятельно, поскольку он недоступен в Maven Central.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...