我创建了一个包含文本类型的列,然后将其删除。然后我想创建一个具有相同名称但类型为布尔值的列。然而系统却告诉我:
Cannot re-add previously dropped column 'isyoung' of type boolean, \
incompatible with previous type text
我在Cassandra网站上没有找到任何相关信息。我已经删除了该列,但无法更改表以重新添加该列。
我不想重建我的整个桌子。如何更改列的类型?
我创建了一个包含文本类型的列,然后将其删除。然后我想创建一个具有相同名称但类型为布尔值的列。然而系统却告诉我:
Cannot re-add previously dropped column 'isyoung' of type boolean, \
incompatible with previous type text
我在Cassandra网站上没有找到任何相关信息。我已经删除了该列,但无法更改表以重新添加该列。
我不想重建我的整个桌子。如何更改列的类型?
无法更改列的数据类型。
Cassandra 3.0.11 和 3.10 ( CASSANDRA-12443 )中删除了执行此操作的功能,因为它会导致很多问题,包括节点无法启动、无法重播提交日志突变和其他数据损坏。
回想一下,在 Cassandra 中,SSTable 是不可变的——一旦写入磁盘,它们就不会更改或更新。如果允许更改列类型,则会导致现有 SSTable 中的数据不可读,因为数据不再与架构匹配。
同样,无法从备份中恢复数据,因为实时模式将不再与备份中的模式匹配。
同样,如果您尝试运行
ALTER TABLE ... TYPE
,该命令将返回类似于以下内容的错误:删除然后重新添加具有相同名称但类型不同的列也会导致相同的问题,因此它在很久以前就被禁止了(CASSANDRA-14843、CASSANDRA-14948)。干杯!