在Cassandra的Map中,是否可以输入不同数据类型的值?例如,如果我有这样一张表:
现在我想要向这个表中插入值,就像这样:
(id int, value map<text,text>)
现在我想要向这个表中插入值,就像这样:
(1,{'test':'test1'})
(2,{'a':1})
(3,{'c':2})
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)
与其将地图作为您的情况中的映射,不如将其作为文本(字符串)列,这将节省大量空间。通过将数据转换为字符串形式,保持JSON格式。
不,Cassandra不支持这样的功能。Cassandra Map就像Java Map一样,我们知道Java也不支持这个功能。我们必须根据数据类型在Map中传递所有值。