Запрос Cassandra работает при запросе только с одним из сложных ключей раздела

Я новичок в Cassandra и проходил через сообщество data-stax для руководств.

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

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

Описание таблицы:

CREATE TABLE killrvideo.videos5 (
    title text,
    added_year int,
    added_date timestamp,
    description text,
    user_id uuid,
    video_id timeuuid,
    PRIMARY KEY (title, added_year)
) WITH CLUSTERING ORDER BY (added_year ASC)
    AND bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';

** Запрос:**

cqlsh:killrvideo> select * from videos5 where title='DHANNYA';

Результат:

 title   | added_year | added_date                      | description | user_id                              | video_id
---------+------------+---------------------------------+-------------+--------------------------------------+--------------------------------------
 DHANNYA |       2018 | 2018-04-23 11:38:12.811000+0000 |        Test | 50554d6e-29bb-11e5-b345-feff819cdc9f | ce0de9b1-46ea-11e8-839e-87bbc8b633f5

Это должно было вызвать ошибку, но этого не произошло. Мне интересно, как хеширование ключа раздела определяет местонахождение данных только с одним из ключей.


person shoki    schedule 23.04.2018    source источник


Ответы (1)


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

PRIMARY KEY ((title, added_year))

Это дополнительно объясняется в другом ответе stackoverflow: https://stackoverflow.com/a/24953331/1516699

person Simon Fontana Oscarsson    schedule 23.04.2018