2016-08-23 2 views
1

У нас есть прецедент, чтобы изменить столбец таблицы cassandra (изменить тип от Int до Long), так как он не поддерживается при переходе из Int в varInt, и мы в порядке с этим.Как перенести изменение столбца кластера классандры

Но в некоторых таблицах этот столбец является столбцом кластера, и мы не можем изменить это.

Мне любопытно, что это лучший способ справиться с этим делом.

+0

У меня такая же проблема и на странице по адресу: https://docs.datastax.com/en/cql/3.1/cql/cql_reference/cql_data_types_c.html#concept_ds_wbk_zdt_xj__cql_data_type_compatibility говорит, что int-> varint должно быть возможным. – Chobicus

+0

Ну, я проверил код Кассандры, и, похоже, документация неверна. Вы не можете изменить тип столбца кластеризации. – Chobicus

+0

В случае столбца CLUSTERING метод AlterTableStatement.validateAlter (CFMetaData, ColumnDefinition, AbstractType ) проверяет isCompatibleWith метод, который не реализован в IntegerType и Int32Type, поэтому по умолчанию используется проверка типа, которая для этих двух типов FALSE. – Chobicus

ответ

2

Вы не можете изменить кластерный столбец в Кассандре - вам нужно будет создать новую таблицу и загрузить данные в эту таблицу с помощью стороннего приложения (cqlsh COPY - самый простой или что-то вроде Spark). Если вы не можете переносить изменение имени таблицы, вам нужно будет сделать резервную копию данных, удалить старую таблицу и воссоздать ее с помощью соответствующих типов.