cassandra “map” 列类型,映射字面量
cassandra “map” column type, mapping literals
我的问题是,如果 Cassandra 的地图数据类型支持 3 个文字。在下面的示例中,声明了两个文字之间的映射。
CREATE TABLE abc(id text PRIMARY KEY, fans map<text, text>);
我可以使用...
CREATE TABLE abc(id text PRIMARY KEY, fans map<text, text, int>);
地图不会那样工作。相反,尝试像这样使用 TUPLE 的 LIST:
CREATE TABLE abc(
id text PRIMARY KEY,
fans List<FROZEN<TUPLE<text, text, int>>>
);
请注意,您还需要使用 FROZEN 关键字,这是元组和用户定义类型所必需的。
除了BryceAtNetwork23的回答之外,您还可以通过以下方式创建文本-> (text, int)的映射:
CREATE TABLE abc (
id text PRIMARY KEY,
fans map<text,frozen<tuple<text,int>>>
);
然后您可以像这样进行更新:
update abc set fans = {'a' : ('hello', 1) } where id = 'helloworld';
并检索如下数据:
cqlsh:test> select * from abc;
id | fans
------------+---------------------
helloworld | {'a': ('hello', 1)}
我的问题是,如果 Cassandra 的地图数据类型支持 3 个文字。在下面的示例中,声明了两个文字之间的映射。
CREATE TABLE abc(id text PRIMARY KEY, fans map<text, text>);
我可以使用...
CREATE TABLE abc(id text PRIMARY KEY, fans map<text, text, int>);
地图不会那样工作。相反,尝试像这样使用 TUPLE 的 LIST:
CREATE TABLE abc(
id text PRIMARY KEY,
fans List<FROZEN<TUPLE<text, text, int>>>
);
请注意,您还需要使用 FROZEN 关键字,这是元组和用户定义类型所必需的。
除了BryceAtNetwork23的回答之外,您还可以通过以下方式创建文本-> (text, int)的映射:
CREATE TABLE abc (
id text PRIMARY KEY,
fans map<text,frozen<tuple<text,int>>>
);
然后您可以像这样进行更新:
update abc set fans = {'a' : ('hello', 1) } where id = 'helloworld';
并检索如下数据:
cqlsh:test> select * from abc;
id | fans
------------+---------------------
helloworld | {'a': ('hello', 1)}