将列表列转换为 cassandra/DSE 中的集合列

Converting a list column to a set column in cassandra/DSE

在迭代新功能时,我的团队在我们的 DSE 数据库中创建了一个列表列。我们现在希望它成为一个集合列。我删除了该列并再次将其创建为设置列并收到此错误:

ALTER TABLE sometable DROP somecolumn;
ALTER TABLE sometable ADD somecolumn set<text>;

InvalidRequest: Error from server: code=2200 [Invalid query] message="Cannot add a collection with the name integrations because a collection with the same name and a different type (list) has already been used in the past"

该列中甚至没有任何数据。没有某种硬删除覆盖吗?我们可以更改名称,但我真的不喜欢如果有人尝试使用它就无法使用的名称。我必须重新制作整个 table 吗?

最好的选择是添加一个具有不同名称的备用列或创建一个新的 table。

从技术上讲,删除和重新创建列是可能的,但是如果您已经在这些列中的磁盘和备份中拥有数据,则可能会在节点崩溃时使节点重新联机时出现问题。 (您不能将一种格式的旧数据加载到具有不同格式的新列中)

如果您确实必须这样做,可以执行以下操作:

ALTER TABLE sometable DROP somecolumn;
ALTER TABLE sometable ADD somecolumn int;
ALTER TABLE sometable DROP somecolumn;
ALTER TABLE sometable ADD somecolumn set<text>;

(基于 Cassandra: Adding new column to the table 中的评论)