有没有一种优雅的方式通过CQL(Cassandra)执行JSON更新?

时间:2016-07-13 03:27:19

标签: json cassandra datastax datastax-java-driver

我(理想情况下)喜欢使用纯JSON更新Cassandra中的一行(例如,类似于“INSERT INTO <table_name> JSON '<json_object_string>';”CQL语句)。但是,通过CQL UPDATE语句似乎不存在此类功能。

我考虑的一种(脑死亡)方法是删除然后重新插入相关行。然而,这种方法肯定有其缺点 - 因此,从我的考虑集中消除它。

我使用“UPDATE <table_name> SET <key1> = '<new_value1>', <key2> = '<new_value2>', ..., <keyN> = '<new_valueN>';”CQL语句实现了一个版本。但是,如果有类似“UPDATE <table_name> JSON '<new_json_object_string>';”的内容,我真的很想知道这一点。

3 个答案:

答案 0 :(得分:5)

在cassandra中,INSERTUPDATE是相同的操作。对于Cassandra的json支持,没有UPDATE能力。

也没有部分JSON更新支持,即在插入行之后,您无法使用JSON更新单个列,因为从json有效内容中省略的任何列都将作为空值(逻辑删除)插入。但是,您可以使用常规的INSERT / UPDATE查询。

CASSANDRA-11424寻求解决此问题。

答案 1 :(得分:4)

此功能现已在CQL 5.1中提供。语法是:

INSERT INTO table_name JSON '{"column1": "value1", "column2": "value2"}' DEFAULT UNSET;

DEFAULT UNSET选项使其仅覆盖在JSON字符串中找到的值。因此,例如,如果您在记录中包含其他列(例如column3,column4),那么当运行上述insert语句时,这些列将保留其原始数据。

答案 2 :(得分:0)

您可以按照以下查询来更新Casandra CQL中的JSON列

update <schema_name>.<table_name> set <COLUMN_NAME> = {amount : 4.2,iso_code: 'USD'} WHERE <COLUMN1> = <VALUE1> and <COLUMN2> = <VALUE2>;

替换=根据您的需要提供值

记住:键名将不带双引号,值将被单引号