Cassandra - изменение типов запрещено

У меня есть кластер Cassandra (2 узла), и я пытаюсь изменить тип столбца value на карту.

После выполнения ALTER TABLE "keyspace"."table" ALTER value TYPE Map; в cqlsh я получил ошибку, что изменение не разрешено. (Таблица пуста)

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]

Можно ли изменить таблицу для этой структуры таблицы? Что может вызвать эту проблему?

Спасибо


person 4EACH    schedule 15.10.2017    source источник


Ответы (2)


К сожалению, такое изменение не поддерживается в Cassandra. Для справки о типах данных CQL и поддерживаемых преобразованиях см. Документация Datastax.

Я не знаю, сработает ли это, но вы можете попробовать удалить столбец, а затем создать его снова?

person Fredrik Nordström    schedule 31.10.2017

К сожалению, удаление и повторное добавление столбца работает только в определенных случаях, когда задействованные типы схожи по своей природе.

Большие изменения, например, изменение с int на boolean вызовут ошибку в следующем виде:

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

Если рассматриваемая таблица является частью новой разработки и не была выпущена в производство, возможно, вам лучше удалить таблицу и повторно добавить ее нового типа.

person Marco    schedule 18.09.2020