我從SQL Server中導出了兩個名爲Keys和Acc表的CSV表格作爲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]
Keys代表源代碼對象,Acc代表它們之間的關係。我爲三個不同的應用程序項目導入了這兩個表格三次。因此,爲了保持IdKey屬性對於三個應用程序是唯一的,我將一個五個字符的前綴與IdKey連接起來,以便在從sql server導出時標識應用程序對象,因爲我無法像從手冊中學到的那樣根據多個字段創建索引。現在我的目標是構建應用程序之間的關係。例如:
- 節點1是應用1
- 節點2的源代碼的對象是應用程序1的另一個源代碼對象
- 節點3是應用2的源代碼的對象
已經有一個CALL由於已導入的Acc中的記錄,從節點1創建到節點2的關係。 Node2的名稱等於Node3的名稱。所以我們可以說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)