使用cql copy来获取地图数据

bho*_*ass 1 csv cql cassandra

有一个帖子用于复制多值数据,如list和set,从csv到cassandra表,

将具有多值(集合)属性的CSV导入Cassandra

有没有人为地图类型数据做过这个?

Aar*_*ron 5

当然,我会给你一个使用a map和a 的简单例子list.考虑下面的表格,用于存放星舰数据,以及船员和乘客列表:

CREATE TABLE shipregistry (
  name text,
  class text,
  hullnumber text,
  crew map<text,text>,
  passengers list<text>,
  PRIMARY KEY ((name))
);
Run Code Online (Sandbox Code Playgroud)

我将从以下文本文件(/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']
Run Code Online (Sandbox Code Playgroud)

然后我将使用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.
Run Code Online (Sandbox Code Playgroud)

需要注意的重要一点是,列的list数据passengers是逗号分隔的,并用括号括起来:

['Simon Tam', 'River Tam', 'Derial Book', 'Inara Serra']
Run Code Online (Sandbox Code Playgroud)

同样,列的map数据crew是以逗号分隔的键值对列表,并用大括号括起来:

{'1st Officer': 'Zoey Washburne', 'captain': 'Malcolm Reynolds', 'engineer': 'Kaylee Frye', 'pilot': 'Hoban Washburne'}
Run Code Online (Sandbox Code Playgroud)

我选择了一个管道作为分隔符,使自己更容易,并避免在集合类型中使用逗号进行潜在的冲突.