2017-05-24 82 views
0

我剛開的Neo4j開始的所有節點,我試圖使用LOAD CSV與下面的腳本將一些數據加載到Neo4j的3.1:的Neo4j - 負載CSV沒有創造

USING PERIODIC COMMIT 1000 
LOAD CSV WITH HEADERS FROM "file:///Fake59.csv" AS line 
MERGE (person:Person {firstName: line.GivenName, middleInitial: line.MiddleInitial, lastName: line.Surname, title: line.Title, 
gender: line.Gender, birthday: line.Birthday, bloodType: line.BloodType, weight: line.Pounds, height: line.FeetInches}) 
MERGE (contact:Contact {phoneNumber: line.TelephoneNumber, email: line.EmailAddress}) 
MERGE (person)-[:CONTACTED_AT]->(contact) 
MERGE (color:Color {name: line.Color}) 
MERGE (person)-[:FAVORITE_COLOR]->(Color) 
MERGE (address:Address {streetAddress: line.StreetAddress, city: line.City, zipCode: line.ZipCode}) 
MERGE (person)-[:LIVES_AT]->(address) 
MERGE (state:State {abbr: line.State, name: line.StateFull}) 
MERGE (city)-[:STATE_OF]->(stage) 
MERGE (country:Country {name: line.CountryFull, abbr: line.Country, code: line.TelephoneCountryCode}) 
MERGE (state)-[:IN_COUNTRY]->(country) 
MERGE (credentials:Credentials {userName: line.Username, password: line.Password, GUID: line.GUID}) 
MERGE (person)-[:LOGS_in]->(credentials) 
MERGE (browser:Browser {agent: line.BrowserUserAgent}) 
MERGE (person)-[:BROWSES_WITH]->(browser) 
MERGE (creditCard:CreditCard {number: line.CCNumber, cvv2: line.CVV2, expireDate: line.CCExpires}) 
MERGE (person)-[:USES_CC]->(creditCard) 
MERGE (creditCompany:CreditCompany {name: line.CCType}) 
MERGE (creditCard)-[:MANAGED_BY]->(creditCompany) 
MERGE (occupation:Occupation {name: line.Occupation}) 
MERGE (person)-[:WORKS_AS]->(occupation) 
MERGE (company:Company {name: line.Company}) 
MERGE (person)-[:WORKDS_FOR]->(company) 
MERGE (company)-[:EMPLOYES]->(occupation) 
MERGE (vehicle:Vehicle {name: line.Vehicle}) 
MERGE (person)-[:DRIVES]->(vehicle) 

輸入文件具有大約50k行。它運行幾個小時的過程沒有完成,但在那之後,如果我查詢數據庫,我發現只有節點類型(Person)被創建。如果我用3個條目運行一個較小的文件,則只創建所有其他節點和關係。

我已經改變了分配給Neo4j和JVM的內存量,但仍然沒有成功。我知道MERGE需要比CREATE執行更長的時間,但我試圖避免插入節點的重複。

任何想法或建議我應該改變什麼或者我該如何改進?

謝謝,

--MD。

+0

你對有問題的節點的獨特性能的約束和/或索引嗎?您需要結合Tomaz的建議來加速合併。 – InverseFalcon

回答

0

嘗試將您的查詢拆分爲多個較小的查詢。更好地工作,更容易管理。另外,當使用MERGE時,您通常應該在單個屬性上執行此操作,例如針對個人的電子郵件或獨特的東西,然後使用ON CREATE SET。應該緊固查詢。看起來是這樣的:

MERGE (contact:Contact {email: line.EmailAddress}) 
ON CREATE SET contact.phoneNumber = line.TelephoneNumber 

在你的情況與在沒有一個統一的獨特屬性,你可以使用很多的組合,但要知道,每當你在MERGE添加屬性會減慢查詢的人。

MERGE (person:Person {firstName: line.GivenName, middleInitial: line.MiddleInitial, lastName: line.Surname}) 
ON CREATE SET person.title = line.Title, person.gender = line.Gender, 
person.birthday = line.Birthday, person.bloodType = line.BloodType, 
person.weight = line.Pounds, person.height = line.FeetInches 
+0

謝謝你的建議Tomaz和InverseFalcon。一個後續問題。在Person和Contact的情況下,我將能夠建立與節點變量person和contact的權限? – Cracoras

+0

這是正確的 –