有没有执行通过CQL(卡桑德拉)一个JSON更新一个优雅的方式?

问题描述 投票:6回答:3

我想(理想)喜欢卡桑德拉利用纯JSON(例如,类似于“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>';”,我真的很想知道。

json cassandra datastax datastax-java-driver
3个回答
5
投票

在卡桑德拉,INSERTUPDATE是相同的操作。对于Cassandra的JSON支持,没有UPDATE能力。

也没有局部JSON更新支持,即在插入行后,则不能作为来自有效载荷JSON任何ommitted列被插入为空值(墓碑)更新使用JSON各个列。但是,您可以使用常规的INSERT / UPDATE查询。

CASSANDRA-11424试图解决这个问题。


4
投票

该功能现在在CQL 5.1可用。语法是:

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

DEFAULT UNSET选项使它只覆盖在JSON字符串中找到的值。因此,举例来说,如果你有其他的列(如栏3,column4)与数据记录,上面的INSERT语句运行时,这些列将保留其原始数据。


0
投票

你可以按照下面的查询更新卡桑德拉CQL一个JSON列

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

替换=有值按您的需求

记住:关键名称将是没有双引号和值将在单引号,如上面的例子

© www.soinside.com 2019 - 2024. All rights reserved.