2014-09-29 147 views
0

我有2 CSV文件,我想將其轉換爲Neo4j數據庫。他們是這樣的:使用CSV文件創建Neo4j數據庫

第一個文件:

name,enzyme 
Aminomonas paucivorans,M1.Apa12260I 
Aminomonas paucivorans,M2.Apa12260I 
Bacillus cellulosilyticus,M1.BceNI 
Bacillus cellulosilyticus,M2.BceNI 

second file 

name,motif 
Aminomonas paucivorans,GGAGNNNNNGGC 
Aminomonas paucivorans,GGAGNNNNNGGC 
Bacillus cellulosilyticus,CCCNNNNNCTC 

正如你可以看到常見的因素是有機物和的Name。每個Organism將有幾個Enzymes和每個Enzyme將有1 MotifMotifs可以在酶之間相同。我用下面的語句來創建我的數據庫:

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file1.csv" AS csvLine 
MATCH (o:Organism { name: csvLine.name}),(e:Enzyme { name: csvLine.enzyme}) 
CREATE (o)-[:has_enzyme]->(e) //or maybe CREATE UNIQUE? 

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file2.csv" AS csvLine 
MATCH (o:Organism { name: csvLine.name}),(m:Motif { name: csvLine.motif}) 
CREATE (o)-[:has_motif]->(m) //or maybe CREATE UNIQUE? 

這給了我的錯誤就在USING PERIODIC COMMIT的第一行它說Invalid input 'S': expected。如果我擺脫了ti,我得到的下一個錯誤是WITH is required between CREATE and LOAD CSV (line 6, column 1) "MATCH (o:Organism { name: csvLine.name}),(m:Motif { name: csvLine.motif})"。我GOOGLE了這個問題,導致我到這個answer。我嘗試了給出的答案(刷新瀏覽器緩存),但問題仍然存在。我在這裏做錯了什麼?查詢是否正確?這個問題還有另一個解決方案嗎?任何幫助將不勝感激

+0

您使用的是什麼版本的Neo4j? – 2014-09-29 11:15:05

+0

我使用'2.1.3'版本 – Beginner 2014-09-29 17:54:08

回答

2

你的查詢有一次兩個問題:

  1. 您不能引用到本地文件只是「file1.csv」,因爲Neo4j的期待一個URL
  2. 在數據最初可能不存在的情況下,您使用的是MATCH;您需要在那裏使用MERGE,這基本上就像您添加的創建唯一註釋一樣。

我不知道你的具體錯誤信息的來源是什麼,但正如所寫的,它看起來不像這些查詢可能工作。這裏有你的查詢改寫,使他們的工作

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:/home/myuser/tmp/file1.csv" AS csvLine 
MERGE (o:Organism { name: coalesce(csvLine.name, "No Name")}) 
MERGE (e:Enzyme { name: csvLine.enzyme}) 
MERGE (o)-[:has_enzyme]->(e); 

注意這裏的3個合併報表(我用您的CSV樣本測試它在我的機器上)(MERGE基本上沒有MATCH + CREATE如果它不存在) ,以及我使用了file:網址的事實。

第二個查詢得到基本制定了同樣的方式:

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:/home/myuser/tmp/file2.csv" AS csvLine 
MERGE (o:Organism { name: coalesce(csvLine.name, "No Name")}) 
MERGE (m:Motif { name: csvLine.motif}) 
MERGE (o)-[:has_motif]->(m); 

編輯我在生物體的name屬性添加​​3210。如果CSV中的空值爲name,則查詢將失敗。 Coalesce保證,如果csvLine.name爲空,那麼您將返回「No Name」。

+0

'使用週期性提交'仍然顯示並顯示錯誤。我擺脫了它,看看查詢是否工作,但它顯示錯誤'不能合併節點使用空屬性值的名稱' – Beginner 2014-09-29 18:04:45

+0

它顯示哪個錯誤?這些查詢運行正常...... – FrobberOfBits 2014-09-29 18:07:36

+1

啊,這樣的錯誤信息意味着您的CSV中的一個「名稱」值爲空。將在一秒內更新答案.... – FrobberOfBits 2014-09-29 18:11:23