Cassandra - 不允许改变类型

时间:2017-10-15 14:42:40

标签: cql3 cqlsh cassandra-3.0

我有Cassandra集群(2个节点),我试图将value列类型更改为Map。

在cqlsh中执行ALTER TABLE "keyspace"."table" ALTER value TYPE Map;后,我收到了一条错误,修改不允许。 (表格是空的)

CREATE TABLE "keyspace"."table" (
    key text,
    column1 bigint,
    column2 bigint,
    value text,
    PRIMARY KEY (key, column1, column2)
) WITH COMPACT STORAGE
    AND CLUSTERING ORDER BY (column1 ASC, column2 ASC)
    AND bloom_filter_fp_chance = 0.1
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.LeveledCompactionStrategy'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.SnappyCompressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.05
    AND default_time_to_live = 0
    AND gc_grace_seconds = 5
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';

[cqlsh 5.0.1 | Cassandra 3.11.0 | CQL规范3.4.4 |原生协议v4]

是否可以更改此表结构的表?什么可能导致这个问题?

由于

2 个答案:

答案 0 :(得分:1)

遗憾的是,Cassandra不支持这种改动。有关CQL数据类型和支持的转换的参考,请参阅Datastax documentation

我不知道这是否有效,但您可以尝试删除该列,然后重新创建它吗?

答案 1 :(得分:0)

不幸的是,仅在涉及的类型本质上相似的某些情况下,才能删除和重新添加该列。

较大的更改(例如,从int更改为boolean)将产生以下错误:

code=2200 [Invalid query] message="Cannot re-add previously dropped column 'MYCOLUMN' of type boolean, incompatible with previous type int"

如果所涉及的表是新开发工作的一部分,并且尚未发布到生产环境中,则最好删除该表,然后将其重新添加为新类型。