Cassandra-无法重新添加之前删除的计数器列

时间:2018-12-11 08:42:18

标签: cassandra alter-table cqlsh

我需要将TABLE更改计数器列更改为int。

删除和添加之前的表:

CREATE TABLE <table_name> (
    id text PRIMARY KEY,
    questions_asked counter);

为此,我尝试先删除计数器列:

ALTER TABLE <table_name> DROP questions_asked;

比起我,我试图添加与int相同名称的新列:

ALTER TABLE <table_name> ADD questions_asked int;

我收到以下错误:

  

InvalidRequest:来自服务器的错误:代码= 2200 [无效查询]   message =“无法重新添加之前删除的计数器列   Questions_asked”

此外,如果我尝试给该列重新命名,则会出现此错误:

  

ConfigurationException:无法添加非计数器列   (question_asked)在计数器列族中

如果我要对具有不同类型的列执行此序列-假设更改放置文本并添加int,它将正常工作。

对此行为的解释是什么? 为什么下垂计数器列后似乎仍在内存中?

1 个答案:

答案 0 :(得分:0)

问题是您试图更改counter列的类型,或将非计数器类型的新列添加到带有计数器的表中。在Cassandra中,表可能仅包含计数器类型或其他类型,但是您不能将非计数器类型与计数器类型混合使用,除非非计数器类型的值仅在主键中。

您可以在documentation中找到更多信息。

获取表结构后更新:

根据CASSANDRA-8099,您不能添加类型不兼容的列,并且counter与任何内容都不兼容。关于使用新名称添加-该表已被标记为包含计数器,并且不能用于非计数器类型。

为什么不简单地删除表并以正确的结构重新创建?