卡桑德拉(Cassandra)中的冻结关键字

时间:2018-07-15 13:30:58

标签: cassandra

无论我是否在UDT中使用冻结关键字,它都在更新记录。

我有表用户:

CREATE TABLE demokeyspace.user (
    userid text PRIMARY KEY,
    address1 frozen<address>,
    password text,
    uname text
)

和地址类型:

CREATE TYPE demokeyspace.address (
    street text,
    city text,
    zip_code int
);

I have inserted 2 records:

Now when i update record for userid 2:

正在更新街道:“已更新的街道”以及城市和邮政编码为空

根据Cassandra,如果声明为FROZEN,则不允许更新UDT值。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

如果您使用未冻结的UDT,并且想要更新一个字段,则可以使用以下(see docs):

update user set address1.street='updated street' where userid='2';

在您的情况下,您正在使用UDT更新完整的address1字段,而UDT的内部只有一个值...

如果您使用冻结的UDT,则必须指定更新期间的所有值,就像您现在正在做的事情一样,但是要提供所有值。

如果始终要更新完整记录,则鼓励使用冻结值,但是如果需要更新部分记录,则不应使用它。