Community Edition 2.1.11 を使用
インターネットで同様の質問をいくつか見ました (例: etl または orient-database.narkive.com/d8c4b82y/orientdb-etl-edge-creation-help を使用して Edge を OrientDB にインポートする) が、実際にはまだ解決されていません。
フライト接続検索システムを実装しています。Locations と Flights という 2 つの関連テーブルを持つ RDBMS (SQL Server) があります。各フライトには、locationFrom と locationTo の 2 つの locationID があります。
それをグラフにインポートするとき、位置を頂点として、フライトに接続されたエッジとして表示したいと考えています。マニュアルから理解したように (Import-from-DBMS、初心者の制限により 2 つ以上のリンクを投稿することはできません...)、この目的のために 2 つの異なる 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 のスレッドの 1 つで、OrientDB のLucaからの投稿を見つけました。これは、ETL を介してエッジのみをロードすることが可能であると述べていますが、それを達成する方法はまだわかりません:( 2 日間ドキュメントを読んでグーグルで調べたのは、それらを頂点としてインポートしてから、同じプロパティで適切なエッジを作成するコンソール JS 関数を作成することです...
それとも、非常に基本的なものが欠けているのでしょうか? オリエンタル初心者です...