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

时间:2015-10-28 21:32:17

标签: cassandra alter-table user-defined-types

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

ALTER TYPE test.test_type RENAME a TO b;

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

这样的模式的表
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 [无效查询]消息=&#34;未知字段&#39; a&#39;用户定义类型test_type&#34;

的值

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

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

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

我还尝试运行ALTER TABLE来重新键入具有新类型的列,向类型frozen<test_type>的表中添加新列,甚至删除表并重新创建它(这甚至不是生产中的一种选择)。无论如何,当我从中选择时,类型保持不变。

我该如何改变这种类型?

1 个答案:

答案 0 :(得分:0)

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

重新启动cqlsh将返回您期望的值。基础表和类型已被正确修改,只是cqlsh有一个错误,在重新启动cqlsh之前它不会返回更新值。