有一个用于复制多值数据的帖子,如列表和从csv到cassandra表的设置,
Import CSV with multi-valued (collection) attributes to Cassandra
有没有人为地图类型数据做过这个?
答案 0 :(得分:5)
当然,我会给你一个使用map
和list
的简单示例。考虑下面的表格,用于保存星舰数据,以及船员和乘客名单:
CREATE TABLE shipregistry (
name text,
class text,
hullnumber text,
crew map<text,text>,
passengers list<text>,
PRIMARY KEY ((name))
);
我将从以下文本文件(/home/aploetz/shipregistry_20150302.csv
)加载此表的数据,该文件具有标题和一行竖线分隔数据:
name|class|crew|hullnumber|passengers
Serenity|03-K64-Firefly|{'1st Officer': 'Zoey Washburne', 'captain': 'Malcolm Reynolds', 'engineer': 'Kaylee Frye', 'pilot': 'Hoban Washburne'}|G-82659|['Simon Tam', 'River Tam', 'Derial Book', 'Inara Serra']
然后我将使用cqlsh COPY
命令导入它:
aploetz@cqlsh:presentation> COPY shipregistry FROM
'/home/aploetz/shipregistry_20150302.csv' WITH HEADER=true and DELIMITER='|';
1 rows imported in 0.017 seconds.
需要注意的重要一点是,list
列的passengers
数据是逗号分隔的,并用括号括起来:
['Simon Tam', 'River Tam', 'Derial Book', 'Inara Serra']
同样,map
列的crew
数据是以逗号分隔的键值对列表,并用大括号括起来:
{'1st Officer': 'Zoey Washburne', 'captain': 'Malcolm Reynolds', 'engineer': 'Kaylee Frye', 'pilot': 'Hoban Washburne'}
我选择了一个管道作为分隔符,以便我自己更容易,并避免在集合类型中使用逗号进行潜在的冲突。