Cassandra抛出错误请求:具有条件的批处理不能跨越多个表

时间:2014-12-18 14:58:34

标签: cassandra batch-processing cassandra-2.0 nosql

Cassandra docsblog表示带有条件更新语句的批处理以分区的粒度工作,而分区是由primary key中的第一个键定义的 所以,我有以下键空间:

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 | Cassandra 2.0.11 | CQL规范3.1.1 |节俭协议19.39.0

2 个答案:

答案 0 :(得分:5)

"具有条件的批处理不能跨越多个表"

使用相同主键的两个不同列系列(表)仍然是两个不同的分区。

答案 1 :(得分:1)

您需要在独立批次中使用IF NOT EXISTS移动语句。    INSERT INTO social_profile(soc_net_type,soc_net_user_id,user_prof_id)VALUES('vk','1','100')IF NOT NOT EXISTS;

带有条件IF NOT NOT EXISTS的批量插入只能包含单一类型。