我正在尝试将 CSV 文件中的边导入 OrientDB。顶点存储在一个单独的文件中,并且已经通过 ETL 导入 OrientDB。所以我的情况类似于仅使用 ETL 工具和OrientDB ETL 加载 CSV 的OrientDB 导入边,其中顶点在一个文件中,边在另一个文件中。
更新
朋友.csv
"id","client_id","first_name","last_name"
"0","0","John-0","Doe"
"1","1","John-1","Doe"
"2","2","John-2","Doe"
...
该"id"
字段被 Friend-Importer 删除,但"client_id"
被存储。id
这个想法是为搜索等生成一个已知的客户端。
PeindingFriendship.csv
"friendship_id","client_id","from","to"
"0","0-1","1","0"
"2","0-15","15","0"
"3","0-16","16","0"
...
"friendship_id"
和"client_id"
应该作为"PendingFriendship"
边缘的属性导入。"from"
是"client_id"
一个朋友。"to"
是"client_id"
另一个朋友的。因为和"client_id"
上都存在唯一索引。Friend
PendingFriendship
我的 ETL 配置如下所示
...
"extractor": {
"csv": {
}
},
"transformers": [
{
"command": {
"command": "CREATE EDGE PendingFriendship FROM (SELECT FROM Friend WHERE client_id = '${input.from}') TO (SELECT FROM Friend WHERE client_id = '${input.to}') SET client_id = '${input.client_id}'",
"output": "edge"
}
},
{
"field": {
"fieldName": "from",
"expression": "remove"
}
},
{
"field": {
"fieldName": "to",
"operation": "remove"
}
},
{
"field": {
"fieldName": "friendship_id",
"expression": "remove"
}
},
{
"field": {
"fieldName": "client_id",
"operation": "remove"
}
},
{
"field": {
"fieldName": "@class",
"value": "PendingFriendship"
}
}
],
...
此配置的问题在于它创建了两个边缘条目。一是预期的“PendingFriendship”优势。第二个是空的“PendingFriendship”边缘,我删除的所有字段都作为具有空值的属性。导入在第二行/文档处失败,因为无法插入另一个空的“PendingFriendship”,因为它违反了唯一性约束。如何避免创建不必要的空“PendingFriendship”。将边缘导入 OrientDB 的最佳方法是什么?文档中的所有示例都使用 CSV 文件,其中顶点和边在一个文件中,但对我而言并非如此。
我还查看了Edge-Transformer,但它返回的是 Vertex 而不是 Edge!