Ваш вопрос слишком короткий, вот что я предлагаю использовать OETL
, я не смотрел в Teleporter, но я надеюсь, что это может быть проще и с Teleporter.
Чтобы это сработало, сначала вам нужно создать все уникальные вершины - как Person, так и Relation, а затем выполнить операцию слияния. JSON будет выглядеть примерно так: я совсем не тестировал JSON, он может работать не так, как есть, но он даст вам представление.
{
"config":{
"log":"debug",
"parallel":false,
"haltOnError":false
},
"extractor":{
"jdbc":{
"driver":"com.mysql.jdbc.Driver",
"url":"jdbc:mysql://localhost/yourdb",
"userName":"user",
"userPassword":"pwd",
"query":"select distinct p.personId, r.relatedPersonId, r.relationId, concat(r.relatedPersonId, '__', r.relationId) as rel_person, r.relationName from Person p inner join Relation r on p.personId = r.personId"
}
},
"transformers":[
{
"merge":{
"joinFieldName":"personId",
"lookup":"SELECT expand(p) from (match {class: Person, as: p} return p)"
}
},
{
"edge":{
"class":"RELATIVE",
"direction":"out",
"joinFieldName":"rel_person",
"lookup":"SELECT expand(r) from (match {class: Relation, as: r} return r) where concat(r.relatedPersonId, '__', r.relationId) = ?",
"unresolvedLinkAction":"NOTHING",
"edgeFields":{
"relation":"${input.relationName}"
},
"skipDuplicates":true
}
},
{
"field":{
"fieldNames":[
"relationName"
],
"operation":"remove"
}
}
],
"loader":{
"orientdb":{
"dbURL":"remote:localhost/yourgraphdb",
"dbUser":"graph_user",
"dbPassword":"graph_pwd",
"dbType":"graph",
"dbAutoCreate":false,
"batchCommit":1000
}
}
}