用scala更新cassandra db中的字符串列表列

bxfogqkk  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(281)

我是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]]...)

我目前还没有找到任何可以帮助我通过网络

m528fe3b

m528fe3b1#

问题是scala对列表的字符串表示与cassandra对列表的表示不匹配,因此会产生错误。
与其直接在代码中构造cql语句,不如使用preparedstatement并将变量绑定到它:
首先,它会加速执行,因为cassandra不会单独解析每个语句;
绑定变量会更容易,因为您不需要关心相应的字符串表示
但是使用scala时要非常小心—java驱动程序需要java的列表、集合、Map和基类型,如int等。。您可以查看java驱动程序scala extras包,但您需要自己编译它,因为它在maven central上不可用。

相关问题