卡桑德拉数据建模中的嵌套地图
nested map in cassandra data modelling
我对我的数据集有以下要求,需要了解我应该使用什么数据类型以及如何相应地保存我的数据:-
CREATE TABLE events (
id text,
evntoverlap map<text, map<timestamp,int>>,
PRIMARY KEY (id)
)
evntoverlap = {
'Dig1': {{'2017-10-09 04:10:05', 0}},
'Dig2': {{'2017-10-09 04:11:05', 0},{'2017-10-09 04:15:05', 0}},
'Dig3': {{'2017-10-09 04:11:05', 0},{'2017-10-09 04:15:05', 0},{'2017-10-09 04:11:05', 0}}
}
这给出了一个错误:-
Error from server: code=2200 [Invalid query] message="Non-frozen collections are not allowed inside collections: map<text, map<timestamp, int>>"
我应该如何将这种类型的数据存储在单列中。请建议相同的数据类型和插入命令。
谢谢,
Cassandra 存在局限性 - 您不能在不冻结集合的情况下将集合(或 UDT)嵌套在集合中。因此,您需要 "froze" 集合之一 - 嵌套:
CREATE TABLE events (
id text,
evntoverlap map<text, frozen<map<timestamp,int>>>,
PRIMARY KEY (id)
);
或顶级:
CREATE TABLE events (
id text,
evntoverlap frozen<map<text, map<timestamp,int>>>,
PRIMARY KEY (id)
);
有关详细信息,请参阅 documentation。
CQL 集合限制为 64kb,如果将地图之类的东西放在地图中,您可能会突破该限制。特别是对于冻结的地图,您正在反序列化整个地图,对其进行修改,然后重新插入。
可能会更好
CREATE TABLE events (
id text,
evnt_key, text
value map<timestamp, int>,
PRIMARY KEY ((id), evnt_key)
)
甚至一个
CREATE TABLE events (
id text,
evnt_key, text
evnt_time timestamp
value int,
PRIMARY KEY ((id), evnt_key, evnt_time)
)
它会更高效、更安全,同时提供额外的好处,例如能够按升序或降序排列 event_time。
我对我的数据集有以下要求,需要了解我应该使用什么数据类型以及如何相应地保存我的数据:-
CREATE TABLE events (
id text,
evntoverlap map<text, map<timestamp,int>>,
PRIMARY KEY (id)
)
evntoverlap = {
'Dig1': {{'2017-10-09 04:10:05', 0}},
'Dig2': {{'2017-10-09 04:11:05', 0},{'2017-10-09 04:15:05', 0}},
'Dig3': {{'2017-10-09 04:11:05', 0},{'2017-10-09 04:15:05', 0},{'2017-10-09 04:11:05', 0}}
}
这给出了一个错误:-
Error from server: code=2200 [Invalid query] message="Non-frozen collections are not allowed inside collections: map<text, map<timestamp, int>>"
我应该如何将这种类型的数据存储在单列中。请建议相同的数据类型和插入命令。 谢谢,
Cassandra 存在局限性 - 您不能在不冻结集合的情况下将集合(或 UDT)嵌套在集合中。因此,您需要 "froze" 集合之一 - 嵌套:
CREATE TABLE events (
id text,
evntoverlap map<text, frozen<map<timestamp,int>>>,
PRIMARY KEY (id)
);
或顶级:
CREATE TABLE events (
id text,
evntoverlap frozen<map<text, map<timestamp,int>>>,
PRIMARY KEY (id)
);
有关详细信息,请参阅 documentation。
CQL 集合限制为 64kb,如果将地图之类的东西放在地图中,您可能会突破该限制。特别是对于冻结的地图,您正在反序列化整个地图,对其进行修改,然后重新插入。
可能会更好CREATE TABLE events (
id text,
evnt_key, text
value map<timestamp, int>,
PRIMARY KEY ((id), evnt_key)
)
甚至一个
CREATE TABLE events (
id text,
evnt_key, text
evnt_time timestamp
value int,
PRIMARY KEY ((id), evnt_key, evnt_time)
)
它会更高效、更安全,同时提供额外的好处,例如能够按升序或降序排列 event_time。