Cassandra выдает неверный запрос: пакет с условиями не может охватывать несколько таблиц

Cassandra документы и blog говорит, что пакеты с операторами условного обновления работают с точностью до раздела, а раздел определяется первым ключом в первичном ключе. Итак, у меня есть следующие ключевые пространства:

CREATE TABLE SOCIAL_PROFILE (
soc_net_type text,
soc_net_user_id text,
user_prof_id text,
PRIMARY KEY (soc_net_type, soc_net_user_id)); 

CREATE TABLE SOCIAL_PROFILE_CONTACT (
soc_prof_soc_net_type text,
soc_prof_soc_net_user_id text,
soc_net_user_id text,
PRIMARY KEY (soc_prof_soc_net_type, soc_prof_soc_net_user_id, soc_net_user_id));

И вставьте заявление:

BEGIN BATCH INSERT INTO social_profile (soc_net_type, soc_net_user_id, user_prof_id) VALUES ('vk', '1', '100') IF NOT EXISTS; INSERT INTO social_profile_contact (soc_prof_soc_net_type, soc_prof_soc_net_user_id, soc_net_user_id) VALUES ('vk', '1', '2'); INSERT INTO social_profile_contact (soc_prof_soc_net_type, soc_prof_soc_net_user_id, soc_net_user_id) VALUES ('vk', '1', '3'); INSERT INTO social_profile_contact (soc_prof_soc_net_type, soc_prof_soc_net_user_id, soc_net_user_id) VALUES ('vk', '1', '4'); APPLY BATCH;

И social_profile_contact.soc_prof_soc_net_type = social_profile.soc_net_type они оба имеют одинаковые значения и должны быть в одном разделе, но Cassandra выдает: Неверный запрос: пакет с условиями не может охватывать несколько таблиц

Я не нашел ни слова о таблицах в документах, что я делаю не так?

cqlsh 4.1.1 | Кассандра 2.0.11 | Спецификация CQL 3.1.1 | Бережливый протокол 19.39.0


person pls    schedule 18.12.2014    source источник


Ответы (2)


«Пакет с условиями не может охватывать несколько таблиц»

Два разных семейства столбцов (таблиц), использующих один и тот же первичный ключ, по-прежнему являются двумя разными разделами.

person Schildmeijer    schedule 18.12.2014

Вам нужно переместить оператор с ЕСЛИ НЕ СУЩЕСТВУЕТ в независимый пакет. ВСТАВИТЬ В social_profile (soc_net_type, soc_net_user_id, user_prof_id) ЗНАЧЕНИЯ ('vk', '1', '100'), ЕСЛИ НЕ СУЩЕСТВУЕТ;

Пакетная вставка с условными операторами IF NOT EXISTS может содержать только один тип.

person Dmitry Buykin    schedule 19.04.2015