我如何更改用户定义的类型并让它在我的表中传播?

How can I alter a user defined type and have it propagate through my tables?

我正在尝试使用重命名的字段更新 Cassandra 中的用户定义类型。这是我的修改声明。

ALTER TYPE test.test_type RENAME a TO b;

这很好用,DESC TYPE test.test_type 向我展示了新架构。但是我有一个 table,其架构类似于

col1 text PRIMARY KEY
col2 frozen<test_type>

这似乎没有更新。

如果我 运行 SELECT * FROM test_table 我得到旧类型字段

c1      | c2
--------+------------
value1  | {a: 'a1'}

如果我尝试插入,我将被迫使用新类型

INSERT INTO test_table (c1, c2) VALUES ('value2', {a: 'a2'});

InvalidRequest: code=2200 [Invalid query] message="Unknown field 'a' in value of user defined type test_type"

但即使我使用新类型插入,我仍然得到旧字段。

INSERT INTO test_table (c1, c2) VALUES ('value2', {b: 'a2'});
SELECT * FROM test_table;

c1      | c2
--------+------------
value1  | {a: 'a1'}
value2  | {a: 'a2'}

我还尝试 运行ning ALTER TABLE 重新键入新类型的列,将新列添加到 table 类型 frozen<test_type> ,甚至删除 table 并重新创建它(这甚至不是生产中的一个选项)。无论如何,当我从它 select 时类型保持不变。

我应该如何实际更改类型?

发现问题已记录在此 Jira 中。 https://issues.apache.org/jira/browse/CASSANDRA-9188

重新启动 cqlsh 将 return 您期望的值。底层 table 和类型已被正确修改,只是 cqlsh 有一个错误,它不会 return 更新值,直到 cqlsh 重新启动。