Кассандра перебирает элементы множества

Мне нужно переместить данные из одной таблицы в другую, но определение таблиц немного другое:

CREATE TABLE elements (
    id timeuuid PRIMARY KEY,
    other_ids set<text>,
    name text
) 

CREATE TABLE elements_new (
    id text PRIMARY KEY,
    other_id text,
    name text
)

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

Как перебирать элементы набора в операторе cql? Я не смог найти никакой документации по этому поводу.

Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
0
0
629
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Обычно вы используете разбиение на страницы в Cassandra для итерации по запросу. Пейджинг доступен в большинстве клиентов. Драйвер Java смотрите здесь: https://docs.datastax.com/en/developer/java-driver/3.2/manual/paging/

Ответ принят как подходящий

Сделать это можно только с помощью программирования - в CQL это не поддерживается.

В зависимости от количества данных вам может потребоваться либо использовать Разъем Spark Cassandra, либо написать код, который будет проходить через все диапазоны токенов, извлекать данные и преобразовывать их в новую структуру.

Думаю, ваша новая таблица будет выглядеть так:

CREATE TABLE elements_new (
    id text,
    name text STATIC,
    other_id text,
    PRIMARY KEY ((id), other_id)
)

Тогда у каждого идентификатора будет имя и набор уникальных other_ids.

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

с коллекциями CQL все это нужно занести в память и отправить как один столбец. Пролистывания через него нет.

Другие вопросы по теме