我如何更改用户定义的类型并让它在我的表中传播?
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 重新启动。
我正在尝试使用重命名的字段更新 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 重新启动。