我(理想情况下)喜欢使用纯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>';
”的内容,我真的很想知道这一点。
答案 0 :(得分:5)
在cassandra中,INSERT
和UPDATE
是相同的操作。对于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>;
替换=根据您的需要提供值
记住:键名将不带双引号,值将被单引号