我是Cassandra的新手,试图理解这些概念。请帮我 : 在这里,我有公民的语言和州的数据。
create table citizens_by_state_and_language(
citizenID BigInt,
state varchar,
language varchar
primary key((language,state), citizenID)
);
我可以像这样查询
Select * from citizens_by_state_and_language where language = 'Spanish' and state = 'Kentucky'
然而,这些查询无效:
Select * from citizens_by_state_and_language where language = 'Spanish';
Select * from citizens_by_state_and_language where state = 'Kentucky';
现在为了使它工作,我可以在这些上创建索引,如下所示:
create index on citizens_by_state_and_language(language);
create index on citizens_by_state_and_language(state);
我不确定这是否是设计它的正确方法,还是我应该为每个查询创建单独的表(每个表一个查询)?请提出一些概念灯。
答案 0 :(得分:0)
这是因为语言和状态是分区键。
在Cassandra中,您无法查询单个分区键,您必须指定这两个字段才能执行此操作,这就是您的第一个查询有效的原因。
Cassandra键不是那么容易理解,this article解释了所有这些键背后的内容,而this one就是一个很好的例子。