Как выбрать N-ю строку в таблице БД Кассандры

Мне нужно выбрать "N-ую строку" из таблицы Кассандры, основываясь на конкретном числе, которое я получаю из своей логики. То есть: если логический вывод равен 23, мне нужно получить 23-ю строку. Так как в Кассандре нет автоматического увеличения, я не могу пойти с совпадением ID ключа. В SQL они получают это используя OFFSET и LIMIT. Я не знаю, как добиться этого в Кассандре. Можем ли мы достичь этого, используя любую концепцию UDF??? Кто-то ответит мне решение. Спасибо заранее.

Схема таблицы:

CREATE TABLE new_card ( 
    customer_id bigint, 
    card_number text, 
    active tinyint, 
    auto_pay int, 
    available_credit_limit double, 
    average_card_spend_half_yearly double, 
    average_card_spend_monthly double, 
    average_card_spend_quarterly double, 
    average_card_spend_yearly double, 
    avg_half_yearly_spend_mcc double,
    PRIMARY KEY (customer_id, card_number) 
);

2 ответа

Решение

Если вы используете драйвер Java, обратитесь к Paging

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

Вы просто не можете выбрать N строк из таблицы, потому что таблица Cassandra состоит из разделов, и вы можете упорядочивать строки внутри раздела, но не из разделов. Переход с разбивкой по страницам приведет к выбрасыванию всех таблиц, но не будет никакого хронологического порядка строк, выбранных с использованием подхода suck (не принимая во внимание тот факт, что разделы могут меняться, пока вы выполняете работу с go-throw-pages).

Если вы хотите выбрать номер строки N из Cassandra, вам нужно реализовать поле автоинкремента на уровне приложения и использовать его в качестве ключа.

Существуют способы сделать это с Cassandra, например, с использованием легких транзакций, но они имеют высокую стоимость в зависимости от производительности. Смотрите несколько решений здесь:

Как создать идентификаторы автоинкремента в Кассандре

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