使用社区版 2.1.11
我在网上看到了一些类似的问题(例如,使用 etl 或 orient-database.narkive.com/d8c4b82y/orientdb-etl-edge-creation-help 将边缘导入 OrientDB),但还没有真正解决。
我正在实施航班连接搜索系统。我有带有两个相关表的 RDBMS (SQL Server) - 位置和航班。每个航班都有两个 locationID - locationFrom 和 locationTo。
当我将它导入图表时,我希望将位置视为顶点,与航班作为边连接。正如我从手册中了解到的(从 DBMS 导入,由于新手限制,我不能发布两个以上的链接......),我应该为此编写两个不同的 JSON 并通过 ETL 运行它们。因此,我可以使用此代码导入位置而不会出现任何问题:
{
"config": {
log : "debug"
},
"extractor" : {
"jdbc": { "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver",
"url": "jdbc:sqlserver://localhost:1434;databaseName=mydb;integratedSecurity=true;",
"userName": "root",
"userPassword": "root",
"query": "select * from locations" }
},
"transformers" : [
{ "vertex": { "class": "Location"} }
],
"loader" : {
"orientdb": {
"dbURL": "plocal:C:\orientdb-community-2.1.11\databases\Test",
dbUser: "admin",
dbPassword: "admin",
dbAutoDropIfExists: false,
dbAutoCreate: true,
tx: false,
wal: false,
batchCommit: 1000,
dbType: "graph",
indexes: [{class:"Location", fields:["id:string"], type:"UNIQUE_HASH_INDEX" }]
}
}
}
但是当我尝试导入航班时,我遇到了一个问题,即使在 Google 的帮助下我也无法解决:ETL 不想只导入边。作为第一个直观的目的,我写了这样的东西:
{
"config": {
log : "debug"
},
"extractor" : {
"jdbc": { "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver",
"url": "jdbc:sqlserver://localhost:1434;databaseName=mydb;integratedSecurity=true;",
"userName": "root",
"userPassword": "root",
"query": "select * from flights" }
},
"transformers" : [
{ "edge": { "class": "flight", "direction" : "out",
"joinFieldName": "flightFromLocation",
"lookup":"locationID", "unresolvedLinkAction":"CREATE"}
{ "class": "flight", "direction" : "in",
"joinFieldName": "flightToLocation",
"lookup":"locationID", "unresolvedLinkAction":"CREATE"}
}
],
"loader" : {
"orientdb": {
"dbURL": "plocal:C:\orientdb-community-2.1.11\databases\Test",
dbUser: "admin",
dbPassword: "admin",
dbAutoDropIfExists: false,
dbAutoCreate: true,
tx: false,
wal: false,
batchCommit: 1000,
dbType: "graph",
indexes: [{class:"flight", fields:["id:string"], type:"UNIQUE_HASH_INDEX" }]
}
}
}
在 OrientDB 的 GoogleGroups 中的一个线程中,我找到了来自 OrientDB的 Luca的一篇文章,说只能通过 ETL 加载边缘,但我仍然不知道如何实现它:( 之后我唯一的想法两天的阅读文档和谷歌搜索是将它们作为顶点导入,然后编写一些控制台 JS 函数,该函数将创建具有相同属性的正确边缘......
或者也许我错过了一些非常基本的东西?我对东方完全陌生...