с помощью Community Edition 2.1.11Импорт из РСУБД в OrientDB:. Края нагрузки только
Я видел несколько подобных вопросов в Интернете (еи import edges to OrientDB using etl или orient-database.narkive.com/d8c4b82y/orientdb- etl-edge-creation-help), но пока они еще не решены.
Я реализую систему поиска полетного соединения. У меня есть СУБД (SQL Server) с двумя связанными таблицами - Местоположениями и Полетами. Каждый рейс несет два идентификатора местоположения - locationFrom и locationTo.
Когда я импортирую его на график, я хочу видеть местоположения как вершины, связанные с полетами как кромки. Как я понял из руководства (Import-from-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" }]
}
}
}
В одном из потоков в GoogleGroups OrientDB, я нашел post from Luca от OrientDB, который говорит, что нагрузка только края можно через ETL, но я до сих пор не могу понять, как его достичь: (единственная идея, которую я имею после двух дней чтения документов и поиска в Google, - это импортировать их как вершины, а затем написать некоторую консольную функцию JS, которая создаст правильные ребра с теми же свойствами. .
Или, может быть, я что-то очень простой? Я совершенно новой для Востока не хватает ...
Ivan and @Alessandro, большое спасибо за ваши предложения, я тоже думал о JS, но все же хотел (на основе поста Luka) сделать это через ETL. Но я понял (после размещения вопроса), что мне действительно нужен инструмент для синхронизации, а не только для импорта; поэтому на данный момент я пишу один на основе Java API. Надеюсь, что в будущем [link] (https://github.com/orientechnologies/orientdb-labs/blob/master/Teleporter-Index.md) будет более настраиваемым :) – grreeenn