在Cassandra中将多个类型插入映射表

5
在Cassandra的Map中,是否可以输入不同数据类型的值?例如,如果我有这样一张表:
(id int, value map<text,text>)

现在我想要向这个表中插入值,就像这样:
(1,{'test':'test1'})
(2,{'a':1})
(3,{'c':2})
3个回答

8

Cassandra的Map类型不支持不同类型的值(或键)。但是,您可以创建一个用户定义类型来处理它。

aploetz@cqlsh:stackoverflow2> CREATE TYPE testac (test text, a int, c int);

aploetz@cqlsh:stackoverflow2> CREATE TABLE testactable (
                                    key int, 
                                    values frozen<testac>,
                                    PRIMARY KEY (key));

aploetz@cqlsh:stackoverflow2> INSERT INTO testactable (key,values) 
                              VALUES (1,{test: 'test1', a: 1, c: 2});

aploetz@cqlsh:stackoverflow2> SELECT * FROm testactable ;

 key | values
-----+-----------------------------
   1 | {test: 'test1', a: 1, c: 2}

(1 rows)

谢谢,是的我知道这个,但这并不能解决我手头的问题。无论如何还是谢谢您。 - Nipun

1

与其将地图作为您的情况中的映射,不如将其作为文本(字符串)列,这将节省大量空间。通过将数据转换为字符串形式,保持JSON格式。


0

不,Cassandra不支持这样的功能。Cassandra Map就像Java Map一样,我们知道Java也不支持这个功能。我们必须根据数据类型在Map中传递所有值。


1
除了Java具有继承性,而且您可以拥有一个"对象"的值类型。 - OrangeDog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接