在cassandra 1.2.5及更高版本中使用可为空的列过滤主键

时间:2013-08-10 12:25:24

标签: cassandra cql

我试图了解如何做到这一点,或者如果我不能,为什么我不能这样做。即

cqlsh:ps> create table s1 (a text, b text, stuff text, primary key(a,b));
cqlsh:ps> select * from s1 where a='a' and b=null;
Bad Request: Invalid null clustering key part b

似乎有一种解决方法,即不在“b”列中存储空值,但是类似“## null ##”,但这看起来很愚蠢。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

您无法将null插入b,因为它是群集密钥的一部分。如果您按照以下方式尝试插入查询:
INSERT INTO ps.s1 (a, b, c) VALUES ('a', null, 'c_val');
你应该得到一个例外:
Bad Request: Invalid null value for clustering key part password

如果您要检索a = a的所有数据,那么您只需执行以下操作:

select * from s1 where a='a';

但是,您可以将空值插入不属于该键的字段中:

INSERT INTO ps.s1 (a, b, c) VALUES ('a', 'b', null);