**已关闭。**此问题不符合Stack Overflow guidelines。它目前不接受回答。
这个问题似乎不是关于在help center定义的范围内编程。
2个月前关闭。
Improve this question
我创建了一个包含文本类型的列,然后删除了它。然后我想创建一个同名但类型为boolean的列。然而,系统告诉我:
Cannot re-add previously dropped column 'isyoung' of type boolean, \
incompatible with previous type text
我在Cassandra网站上没有找到任何相关信息。我已经删除了该列,但无法更改表以将该列添加回去。
我不想重建整个table。如何更改列的类型?
1条答案
按热度按时间zpjtge221#
无法更改列的数据类型。
在Cassandra 3.0.11和3.10(CASSANDRA-12443)中删除了这样做的能力,因为它会导致很多问题,包括节点无法启动,无法重播commitlog突变和其他数据损坏。
回想一下,在Cassandra中,SSTables是 * 不可变的 * -一旦写入磁盘,它们就不会更改或更新。如果允许更改列类型,则将使现有SSTables中的数据不可读,因为数据不再与模式匹配。
同样,也不可能从备份中恢复数据,因为活动模式将不再与备份中的模式匹配。
类似地,如果您尝试运行
ALTER TABLE ... TYPE
,该命令将返回类似于以下内容的错误:删除然后重新添加具有相同名称但具有不同类型的列也会导致相同的问题,因此很久以前也不允许(CASSANDRA-14843,CASSANDRA-14948)。干杯!干杯!