2017-01-04 8 views
0
сценарий

создания:Как запросить больше записей, используя один CQL заявление

Create Table TestTable (
    A1 ascii, 
    A2 int, 
    A3 int, 
    A4 ascii, 
    A5 int, 
    A6 bigint, 
    A7 bigint, 
    A8 ascii, 
    PRIMARY KEY ((A1, A2,A3, A4),A5) 
) WITH compression = { 'sstable_compression' : 'DeflateCompressor', 'chunk_length_kb' : 64 } 
    AND compaction = { 'class' : 'LeveledCompactionStrategy' }; 

Перегородки ключи (A1, A2, A3, A4).
Я бы хотел запросить данные (A1, A2, A3), чтобы получить больше записей.
На самом деле, я хочу выбрать сто записей. Если вы используете (A1, A2, A3, A4) в качестве условий условия предложения, я могу получить только десять записей.
Итак, я намерен использовать меньше условий условия. Я знаю, что могу использовать (A1, A2, A3) только как условия условия.
Есть ли способ достичь этого запроса? Состояние диапазона? или другим способом?
Я просто делаю тест, используя один оператор cql. Я не изменю модель данных.

ответ

1

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

Способом решения проблемы является создание таблицы с только (A1, A2, A3) в качестве ключей раздела и получение записей из этой таблицы. Вы можете сохранить обе таблицы, если хотите, но имейте в виду, что если ваша оригинальная модель (A1, A2, A3, A4) по какой-то причине, то удаление A4 из ключей разделов, скорее всего, создаст точку доступа в вашем кластере, потому что больше данные будут помещаться внутри одного раздела.

+0

Я просто хочу сделать тест. Я бы хотел использовать один оператор cql для получения 100 записей. Я случайно ввел 100 000 000 записей в кассандру. Я не записал первичный ключ этих данных. поэтому я не знаю первичного ключа. Теперь мне нужно запросить некоторые данные в тестовой среде. Я хочу получить только 100 записей, используя один оператор cql. В заявлении я надеюсь, что он включает (A1, A2, A3). В том числе и A4. – niaomingjian

+0

Вы собираетесь случайным образом протестировать ...... Используйте простой SELECT * FROM TestTable LIMIT 100; 'для достижения того, что вы хотите грязным способом. – xmas79

+0

Спасибо. Кажется, я могу использовать этот способ. – niaomingjian