我有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]
是否可以更改此表结构的表?什么可能导致这个问题?
由于
答案 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"
如果所涉及的表是新开发工作的一部分,并且尚未发布到生产环境中,则最好删除该表,然后将其重新添加为新类型。