cassandra - 如何在 Cassandra 中更新和替换 UDT 字段值?
问题描述
Cassandra 是否支持更新 UDT 字段值?像用新值替换它?
我有 user_fav_payment_method UDT,我需要用借记卡替换现金:
update user_ratings set
user_fav_payment_method{'cash'} = {'debit cards'}
where rating_id = 66;
这段代码是错误的,但我需要做类似的事情,我该怎么做?
解决方案
根据文档:
在 Cassandra 3.6 及更高版本中,仅包含非集合字段的用户定义类型可以更新单个字段值。使用 UPDATE 命令更新用户定义类型数据中的单个字段。所需的键值对在命令中定义。为了更新,UDT 必须在 CREATE TABLE 命令中定义为未冻结的数据类型。
您可以使用.
表示法仅更新非冻结 UDT 的单个字段,如下所示:
cqlsh> use test;
cqlsh:test> create type payment_method ( method text, data text);
cqlsh:test> create table users (id int primary key, pay_method payment_method);
cqlsh:test> insert into users (id, pay_method) values (1, {method: 'cash', data: 'usd'});
cqlsh:test> select * from users;
id | pay_method
----+-------------------------------
1 | {method: 'cash', data: 'usd'}
(1 rows)
cqlsh:test> update users set pay_method.method = 'card' where id = 1;
cqlsh:test> select * from users;
id | pay_method
----+-------------------------------
1 | {method: 'card', data: 'usd'}
(1 rows)
推荐阅读
- powershell - 尝试创建计划任务时出现Powershell错误?无法处理参数“参数”的参数转换
- azure-ad-b2c - 登录 Azure B2C 页面上的内容安全策略错误
- swiftui - 如何在 swiftui 中为子视图设置私有状态变量?
- javascript - 从新创建的 div 创建一个新的 div
- javascript - 如何更改数组中除第一个元素之外的所有元素以仅显示差异
- html - @media 规则的问题
- cryptography - 如果已知模数长度,如何计算 rsa 密钥的字节长度
- android - ADB 如何查找设置和提取坐标以便我可以通过编程方式执行点击?
- hive - 在 Impala 中通过正则表达式选择列?
- javascript - 检查一个 HTML 字符串是否只有元素子元素(或元素之间的空格)并且没有元素是未知的