我在MySQL表(id,parentId)中有一个简单的树结构,有大约300万个顶点,并希望将其导入到OrientDB Graph数据库中。 ETL导入器平滑地导入顶点,但不能创建边(NullPointerException)。 ETL甚至不使用文档中给定示例的普通数据库(http://orientdb.com/docs/last/Import-a-tree-structure.html抛出相同的异常),所以我只是导入顶点并想手动创建边。
我有一个带有两个属性(id,parentId)的顶点类(地址),我想在这些顶点之间创建边(parentId - > id)。有没有一种简单的方法来实现这一点,而不是将边缘插入循环中?像SQL
中的东西INSERT INTO E (out, in) VALUES (SELECT parentId, id FROM Address)
由于只能使用CREATE EDGE创建边缘,我想OrientDB默认情况下不支持这样的操作。但也许有一种解决方法可以创建这300万个边缘?
我发现在两条记录之间建立链接很容易:
CREATE LINK parentLink TYPE LINK FROM Address.parentId TO Address.Id
但是,我无法以这种方式创建边缘。我尝试使用变量
CREATE EDGE isParentOf FROM (SELECT FROM Address) TO (SELECT FROM Address WHERE id = $current.parentId)
但这不起作用。
答案 0 :(得分:-1)
你有没有试过这个ETL Json:
{
"config": {"log": "debug", "parallel": true },
"extractor" : {
"jdbc": { "driver": "oracle.jdbc.driver.OracleDriver",
"url": "jdbc:oracle:thin:hostname/db",
"userName": "username",
"userPassword": "password",
"query": "select id, A.parentId from Address a where rownum<2" }
},
"transformers": [`enter code here`
{ "vertex": { "class": "Address" }},
{ "edge": { "class": "isParentOf",
"joinFieldName": "parentId",
"lookup": "Address.Id",
"direction": "in",
"skipDuplicates":true
}
}
],
"loader": {
"orientdb": {
"dbURL": "remote:server/db",
"dbUser": "user",
"dbPassword": "passwd!",
"dbType": "graph",
"classes": [
{"name": "Address", "extends": "V"},
{"name": "isParentOf", "extends": "E"}
], "indexes": [
{"class":"Address", "fields":["ID:string"], "type":"UNIQUE" }
]
}
}
}