【问题标题】:Cassandra - Altering of types is not allowedCassandra - 不允许更改类型
【发布时间】:2018-03-27 03:29:14
【问题描述】:

我有 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 |卡桑德拉 3.11.0 | CQL 规范 3.4.4 |原生协议 v4]

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

谢谢

【问题讨论】:

    标签: cql3 cqlsh cassandra-3.0


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      较大的更改,例如从 int 更改为 boolean 会产生如下错误:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-15
        • 2018-10-13
        • 2018-02-01
        • 2019-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-20
        相关资源
        最近更新 更多