我可以在ArangoDB中一次将一个csv导入一个集合并将其链接到另一个集合吗?

时间:2019-04-02 18:23:53

标签: csv arangodb

我有2个CSV文件,它们是关系DB的导出。
CSV1具有唯一的ID,
CSV2没有,但具有链接到CSV1对象的列。
我导入了将唯一ID映射到_key的CSV1。
我想将CSV2导入到另一个集合中,并通过边缘将其链接到第一个集合中的对象。
最简单的方法是什么?

P.S。
(我在Neo4j中知道,使用导入工具可以做到这一点很简单,并且想知道ArangoDB中是否存在这样的功能,否则我将不得不编写一些AQL来做到这一点。)

此致, 逃跑

1 个答案:

答案 0 :(得分:1)

虽然没有向导可以导入数据,但是假设您熟悉命令行(因为您在此站点,所以我敢打赌),将数据导入ArangoDB也很简单:

  1. 使用Arango导入工具将CSV文件导入两个集合
  2. 创建边缘集合
  3. 使用简单的AQL查询将数据插入边缘集合

以下是使用arangoimp导入csv的示例语法:

arangoimp --file <path/filename> --collection <collectionName> --create-collection true --type csv --server.database <databaseName> —server.username <username>

以下是一些常用选项:

翻译列名称:

arangoimport --file "data.csv" --type csv --translate "from=_from" --translate "to=_to"

忽略空值(而不是引发警告和不加载数据),请使用标志:

--ignore-missing

忽略导入文件中的列:

arangoimport --file "data.csv" --type csv --remove-attribute “attributeName”

此外,如果您已经在csv文件中包含了edge集合,则也可以直接导入它:

arangoimp --file <path/filename> --collection <collectionName> --create-collection true --type csv --create-collection-type edge --server.database <databaseName>

最后,请注意,如果您愿意,可以在Arango GUI中完成上面列表中的2和3。 3的语句可能类似于

let newEdges = ( for csv1rec in csv1_collection
                  for csv2rec in csv2_collection
                  filter csv1rec.id = csv2rec.colA
                return {from : csv1rec.id , to : csv2rec.colA} )
for rec in newEdges
insert {_from: rec.from, _to: rec.to} in edgeCollection

请注意,我是从内存中为上述第3步编写AQL的,因此可能需要进行一些调整。