cassandra关于集合类型的操作

举例:

create table test(
	a int, 
	b list<text>, 
	c set<text>, 
	d map<text,text>, 
	primary key(a)
);

插入使用下面的形式
insert into test(a,b,c,d) values(1,[‘listtext1′,’listtext2’],{‘settext1′,’settext2’},{‘mapkey1′:’mapvale2′,’mapkey2′:’mapvalue2’});

第一: list类型
增加元素:
update test set b=b+[‘listtext3′,’listext4’] where a=1;

删除第i个元素:
你可以使用
delete b[i] from test where a=1;
或者 update test set b[i]=null where a=1;
注:后者的方法是可行的,不过官方文档没有说明

删除内容为listtext1和listtext2的元素
update test set b = b-[‘listtext1′,’listtext2’] where a=1;

第二: Set类型
增加元素
update test set c=c+{‘settext3′,’settext4’} where a=1;
删除元素
update test set c=c-{‘settext1′,’settext2’} where a=1;

第三:Map类型
增加元素
update test set d[‘mapkey3′] =’mapvalue3’ where a=1;
或者 update test set d=d+{‘mapkey3′:’mapvalue3′,’mapkey4′:’mapvalue4’} where
a=1;
注:后者的方法是可行的,不过官方文档没有说明

删除元素
delete d[‘mapkey3’] from test where a=1;
或者 update test set d[‘mapkey3’]=null where a=1;
注:后者的方法是可行的,不过官方文档没有说明

  1. koumaomao说道:

    请问,如果我想查找所有满足d[‘mapkey1′] = ’mapvale2′ 的a,要怎么实现呢?
    使用SELECT a FROM test WHERE d[‘mapkey1′] = ’mapvale2′;会报错:no viable alternative at input ‘[‘

    1. 大岩不灿说道:

      cassandra中集合类型不能做主键,不能建索引,所以很遗憾集合类型不能作为查询条件。

      1. koumaomao说道:

        感谢您那么快回复我~~还想请问一下,如果我有多个动态属性,就好比这个集合类型中的数据,而且每一个数据都会经常作为搜索该行的条件,那么用什么数据库或者什么存储方式实现比较好呢?

        1. 大岩不灿说道:

          cassandra的查询比较弱,你这种mongodb可能会更好一些吧。

          1. koumaomao说道:

            了解了,多谢大牛指教~~~

留言

提示:你的email不会被公布,欢迎留言^_^

*

验证码 *