代码之家  ›  专栏  ›  技术社区  ›  user5505266

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

  •  2
  • user5505266  · 技术社区  · 6 年前

    在迭代一个新特性时,我的团队在DSE数据库中创建了一个列表列。我们现在希望它是一个集合列。我删除了该列,并将其重新创建为集合列,出现以下错误:

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

    InvalidRequest:来自服务器的错误:code=2200[无效查询]message=“无法添加名为integrations的集合,因为过去已经使用了具有相同名称和不同类型(列表)的集合”

    列中甚至没有任何数据。是否存在某种硬删除覆盖?我们可以更改名称,但我真的不喜欢这样一个名称,如果有人试图使用它,它将不会起作用。我必须重做整张桌子吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Jay    3 年前

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

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

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

    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 )