Как выбрать 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, например, с использованием легких транзакций, но они имеют высокую стоимость в зависимости от производительности. Смотрите несколько решений здесь: