KeysとAccテーブルという2つのテーブルをSQL ServerからCSVファイルとしてエクスポートし、以下のコマンドを使用してNeo4Jに正常にインポートしました。条件によっていくつかの関係をクローン
CREATE INDEX ON :Keys(IdKey)
USING PERIODIC COMMIT 500
LOAD CSV FROM 'file:///C:/Keys.txt' AS line
MERGE (k:Keys { IdKey: line[0] })
SET k.KeyNam=line[1], k.KeyLib=line[2], k.KeyTyp=line[3], k.KeySubTyp=line[4]
USING PERIODIC COMMIT 500
LOAD CSV FROM 'file:///C:/Acc.txt' AS line
MERGE (callerObject:Keys { IdKey : line[0] })
MERGE (calledObject:Keys { IdKey : line[1] })
MERGE (callerObject)-[rc:CALLS]->(calledObject)
SET rc.AccKnd=line[2], rc.Prop=line[3]
キーはソースコードオブジェクトを表し、Accはそれらの間の関係を表します。 3つの異なるアプリケーションプロジェクトに対して、これらの2つのテーブルを3回インポートしました。 3つのアプリケーションで一意のIdKeyプロパティを維持するために、私はマニュアルから学んだように、複数のフィールドに基づいてインデックスを作成することができないため、IdKeyに5文字の接頭辞を連結してSQL Serverからエクスポートする際にObject for Applicationを識別します。今私の目的は、アプリケーション間の関係を構築することです。例えば:
- ノード1は、アプリケーション1
- ノード2のソースコードのオブジェクトは、
- ノード3は、 が
既に呼があるアプリケーション2のソースコードの対象であるアプリケーション1の別のソースコードのオブジェクトでありますAcc内のレコードがすでにインポートされているため、ノード1からノード2に作成された関係。 ノード2の名前はノード3の名前と同じです。つまり、Node2とNode3は実際には同じソースコードであると言えるでしょう。したがって、Node1からNode3までの関係を作成する必要があります。それを実現するために、私は以下のコマンドを書いた。しかし、私はそれが正しいことを確かめたい。私はそれがどれくらい実行されるのか分からないからです。
MATCH (caller:Keys)-[rel:CALLS]->(called:Keys),(calledNew:Keys)
WHERE calledNew.KeyNam = called.KeyNam
and calledNew.IdKey <> called.IdKey
CREATE (caller)-[:CALLS]->(calledNew)