【问题标题】:Cassandra/CQL: How to ALTER column1 type?Cassandra/CQL:如何更改 column1 类型?
【发布时间】:2014-10-22 11:07:38
【问题描述】:

我有许多由 trift API 创建的现有 Cassandra 2.0.0 CF,并且希望将来使用 Datastax DevCenter 1.1.1 和 CQL3,因此我尝试将列类型从 blob-s 更改为更有用的东西。在特定的 CF 中,所有键和值都只是文本(行键是进程名称,单元名称是某种文本格式的时间戳,值是当时捕获的字符串)。我已成功将“key”类型和“value”类型更改为“text”,但“column1”类型让我遇到了问题。

从 DevCenter 运行 alter table 命令时:

alter table mycfname."MyTableName" 
    alter column1 type text;

我正在弹出:

无法在“测试”上执行 CQL 脚本:java.lan.AssertationError

在其他论坛上也有人问过类似的问题,但从未得到回答。

有什么想法吗?

问候卓然

【问题讨论】:

  • 您能否包括运行desc table mycfname."MyTableName" 的完整输出以及您在alter table 命令后收到的完整异常?

标签: cassandra cql3 datastax


【解决方案1】:

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

不允许对列类型进行这些更改:

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

【讨论】:

  • 感谢您指出这一点(来自 CQL ALTER TABLE 文档)。虽然我会在更改“键”类型(效果很好,我可以将键视为文本)时预期会出现同样的问题,但总的来说这是有道理的。这意味着从 trift 到 CQL 的转换将更加费力(可能需要将数据复制到新表中)并且在某些情况下不值得这样做。
  • 如果您正在运行 DSE,您可以使用 spark one liner 魔术将数据移动到新的列族(使用新类型)。
  • 我们使用 Cassandra 社区版,我刚刚安装了 DS Enterprise 来使用它。感谢您的火花提示。
猜你喜欢
  • 2018-08-25
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 2013-08-01
  • 2019-01-25
  • 2012-02-07
相关资源
最近更新 更多