Поместите первичные ключи в Кассандру для обновления записи

У меня есть стол в Кассандре. Моя задача заключается в следующем: я хочу выбирать записи с временным диапазоном (поэтому отметка времени должна быть первичным ключом, а не использовать разрешающую фильтрацию), когда я вставляю запись, а идентификатор_поставщика и имя файла существуют в таблице, запись обновляется

CREATE TABLE test (
    name text,
    filename text,
    timestamp timestamp,
    is_deleted boolean,
    PRIMARY KEY (provider_id, filename, timestamp)
)

2 ответа

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

Если вы хотите выбирать элементы в зависимости от временного диапазона, вы должны использовать кластеризацию столбцов. Ваше заявление о создании должно быть:

CREATE TABLE test (
    provider_id UUID,
    name text,
    filename text,
    timestamp timestamp,
    is_deleted boolean,
    PRIMARY KEY ((provider_id, filename), timestamp)
)

Теперь провайдер_ид + имя_файла - это ключ вашего раздела и метка времени вашего столбца кластеризации.

Составной ключ раздела состоит из provider_id а также filename, Столбец кластеризации, timestampопределить порядок кластеризации данных. Как правило, Кассандра будет хранить столбцы, имеющие одинаковые provider_id но другой filename на разных узлах и столбцах, имеющих одинаковые provider_id а также filename на том же узле.

Это означает, что теперь вы можете запрашивать ваши данные следующим образом:

SELECT * FROM test 
WHERE provider_id = 1
AND filename = "test.txt"
AND timestamp >= '2016-01-01 00:00:00+0200' AND  ts <= '2016-08-13 23:59:00+0200'

И для возможного обновления:

UPDATE test 
SET name = "test-new"
WHERE provider_id = 1
AND filename = "test.txt"
AND timestamp >= '2016-01-01 00:00:00+0200' AND  ts <= '2016-08-13 23:59:00+0200'

Больше информации

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