2014-08-28 91 views
0

我有很多现有的Cassandra 2.0.0 CF由Trift API创建,并且希望将来可以使用Datastax DevCenter 1.1.1和CQL3,所以我试图将blob-s的列类型更改为更有用的内容。在特定的CF中,所有键和值都只是文本(行键是一个进程名称,单元格名称是某种文本格式的时间戳,值是当时捕获的字符串)。我已成功将“键”类型和“值”类型更改为“文本”,但“column1”类型使我成为问题。Cassandra/CQL:如何修改colium1类型?

当从DevCenter运行alter table命令时: alter table mycfname。“MyTableName”alter column1 type text; 我弹出: 无法执行'测试'上的CQL脚本:java.lan.AssertationError

类似的问题已被问到一些其他论坛,但从未回答。 有什么想法? 关注卓然

+0

您可以包含运行'desc table mycfname。“MyTableName”'的全部输出以及在alter table命令之后收到的完整异常吗? – BrianC 2014-08-29 21:32:54

回答

1

插入数据后更改列的类型可能会混淆CQL驱动程序/工具(如果新类型与数据不兼容)。存储在该列值的字节保持不变,如果现有数据不能按照新类型进行反序列化,则CQL驱动程序或接口可能会报告错误。

这些改变到列类型是不允许的:

更改聚类列的类型。 更改定义索引的列。

+0

感谢您指出这一点(来自CQL ALTER TABLE文档)。一般来说它是有道理的,但是当我改变“key”类型时,我会期待同样的问题(工作正常,我可以将键看作文本)。这意味着从trift到CQL的转换将变得非常费力(可能需要将数据复制到新表中),并且在某些情况下不值得做。 – ZoS 2014-08-31 20:13:54

+0

如果你正在运行DSE,你可以做一些火花单线魔法来将你的数据移动到一个新的列族(使用新类型)。 – phact 2014-09-02 03:16:14

+0

我们使用Cassandra社区版,并且我刚刚安装了DS Enterprise以使用它。感谢火花提示。 – ZoS 2014-09-02 08:54:46