如何使用ETL将CSV中的边导入OrientDB图形?
我正在尝试将CSV文件中的边导入OrientDB。顶点存储在单独的文件中,并已通过ETL导入OrientDB。 因此,我的情况与和类似如何使用ETL将CSV中的边导入OrientDB图形?,orientdb,orientdb2.2,orientdb-etl,Orientdb,Orientdb2.2,Orientdb Etl,我正在尝试将CSV文件中的边导入OrientDB。顶点存储在单独的文件中,并已通过ETL导入OrientDB。 因此,我的情况与和类似 更新 Friend.csv "id","client_id","first_name","last_name" "0","0","John-0","Doe" "1","1","John-1","Doe" "2","2","John-2","Doe" ... 好友导入程序会删除“id”字段,但会存储“client\u id”。其思想是生成一个已知的客户端id,
更新 Friend.csv
"id","client_id","first_name","last_name"
"0","0","John-0","Doe"
"1","1","John-1","Doe"
"2","2","John-2","Doe"
...
好友导入程序会删除“id”
字段,但会存储“client\u id”
。其思想是生成一个已知的客户端id,用于搜索等
北京友谊网
"friendship_id","client_id","from","to"
"0","0-1","1","0"
"2","0-15","15","0"
"3","0-16","16","0"
...
“友谊id”
和“客户id”
应作为“PendingFriendly”
边缘的属性导入“from”
是朋友的“客户id”
“to”
是另一个朋友的“客户id”
。
对于“客户id”
在朋友
和待处理友谊
上都存在唯一索引
我的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"
}
}
],
...
此配置的问题在于它会创建两个边缘条目。一个是预期的“悬而未决的友谊”边缘。第二个是空的“PendingFriendly”边,我删除的所有字段都是带有空值的属性。
导入第二行/文档失败,因为无法插入另一个空的“PendingFriendly”,因为它违反了唯一性约束。
我怎样才能避免创造不必要的空洞的“悬而未决的友谊”。
将边导入OrientDB的最佳方法是什么?文档中的所有示例都使用CSV文件,其中顶点和边位于一个文件中,但我不是这样
我还查看了,但它返回的是顶点而不是边
过了一段时间,我找到了将上述数据导入OrientDB的方法(解决方法)。我编写了简单的ruby脚本,使用端点调用OrientDB的HTTP API,而不是使用 步骤:
客户端ID
到@rids
的映射peindingFriendly.csv
并生成批处理
请求@rids
插入命令{
"transaction" : true,
"operations" : [
{
"type" : "cmd",
"language" : "sql",
"command" : "create edge PendingFriendship from #27:178 to #27:179 set client_id='4711'"
}
]
}
这并不是我所问问题的答案,但对我来说,它解决了将数据导入OrientDB的更高目标。因此,我将此问题留给社区来标记是否已解决。过了一段时间,我找到了将上述数据导入OrientDB的方法(解决方法)。我编写了简单的ruby脚本,使用端点调用OrientDB的HTTP API,而不是使用 步骤:
客户端ID
到@rids
的映射peindingFriendly.csv
并生成批处理
请求@rids
插入命令{
"transaction" : true,
"operations" : [
{
"type" : "cmd",
"language" : "sql",
"command" : "create edge PendingFriendship from #27:178 to #27:179 set client_id='4711'"
}
]
}
这并不是我所问问题的答案,但对我来说,它解决了将数据导入OrientDB的更高目标。因此,我让社区将此问题标记为已解决或未解决。您好,您使用的是什么版本?我在Docker内部运行OrientDB。我使用的是来自的2.2.24版本。我对版本2.2.22也有同样的行为。@MichelaBonizzi您知道如何修复导入吗?如上所述,使用的版本为2.2.24。Thx.Cna您是否提供csv文件?Thxok,谢谢你让我看看我是否理解得很好,Friend.csv已经导入,你必须导入PeindingFriendly.csv,但是你有问题,对吗?嗨,你使用的是什么版本?我在Docker内部运行OrientDB。我使用的是来自的2.2.24版本。我对版本2.2.22也有同样的行为。@MichelaBonizzi您知道如何修复导入吗?如上所述,使用的版本为2.2.24。Thx.Cna您是否提供csv文件?Thxok,谢谢你让我看看我是否理解得很好,Friend.csv已经导入,你必须导入PeindingFriendly.csv,但是你有问题,对吗?