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;
注:后者的方法是可行的,不过官方文档没有说明

这篇文章有 5 个评论

  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页

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

发表回复

验证码 *