Запрос метаданных Cassandra на наличие вторичного индекса

Используя версию 3 драйвера Cassandra Java, как определить, имеет ли столбец вторичный индекс?

Используя версию 2 драйвера, я мог просто проверить, ColumnMetadata.getIndex() возвращает ненулевое значение. Но этот метод был удален:

Это связано с тем, что в Cassandra 3.0 полностью переработаны вторичные индексы... К сожалению, нет простого способа восстановить функциональность, предоставляемую удаленным методом


person Raedwald    schedule 17.05.2016    source источник
comment
Я отвечаю на свой вопрос, как это поощряется.   -  person Raedwald    schedule 17.05.2016


Ответы (1)


Авторы драйвера Cassandra признают, что это критическое изменение. Невозможно определить, имеет ли столбец индекс, используя доступные метаданные, потому что реализация индекса может делегировать произвольный класс Java: вторичные индексы больше не являются единственным видом индекса.

Вы можете обойти это, используя согласованную схему именования для вторичных индексов или используя схему именования по умолчанию для вторичных индексов, а затем запросив метаданные таблицы таблицу столбца, чтобы увидеть, есть ли в ней index с ожидаемым имя. схема именования по умолчанию<table_name>_<column_name>_idx.

person Raedwald    schedule 17.05.2016
comment
В качестве альтернативы вы можете перебрать все индексы данной таблицы и для каждого из них проверить их целевой атрибут (docs.datastax.com/en/drivers/java/3.0/com/datastax/driver/core/). Атрибут target — это необработанный фрагмент CQL, который идет сразу после предложения CREATE INDEX ON. Для простых вторичных индексов он должен содержать имя индексируемого столбца. - person adutra; 17.05.2016
comment
@adutra Я изначально думал об этом, но не смог найти никакой документации, описывающей атрибут target, поэтому я пришел к выводу, что использование name было бы самым безопасным. - person Raedwald; 17.05.2016