2017-07-02 40 views
1

我有很多csv文件,名稱爲0_0.csv , 0_1.csv , 0_2.csv , ... , 1_0.csv , 1_1.csv , ... , z_17.csv密碼 - 加載多個csv文件

我想知道如何將它們導入循環或其他東西?

另外我想知道我做得好嗎? (每個文件爲50MB和整個文件的大小約爲100GB)

這是我的代碼:

create index on :name(v) 
create index on :value(v)  

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///0_0.txt" AS csv 
FIELDTERMINATOR ',' 
MERGE (n:name {v:csv.name}) 
MERGE (m:value {v:csv.value}) 
CREATE (n)-[:kind {v:csv.kind}]->(m) 
+0

100GB產生了多少不同的'name'和'value'項?你的源數據是如何創建的?是預處理一個選項? –

回答

0

你可以通過建立一個文件名處理多個文件。不幸的是,這似乎打破了使用USING PERIODIC COMMIT查詢提示,所以它不會是一個很好的選擇。你可以創建一個腳本來包裝它,然後發送命令到bin/cypher-shell

UNWIND ['0','1','z'] as outer 
UNWIND range(0,17) as inner 
LOAD CSV WITH HEADERS FROM 'file:///'+ outer +'_' + toString(inner) + '.csv' AS csv 
FIELDTERMINATOR ',' 
MERGE (n:name {v:csv.name}) 
MERGE (m:value {v:csv.value}) 
CREATE (n)-[:kind {v:csv.kind}]->(m) 

至於你的實際負載的查詢去。你在文件中多次出現namevalue節點嗎?如果它們是唯一的,那麼你最好多次加載數據。首先加載沒有索引的節點;然後在加載節點後添加索引;然後做關係作爲最後一步。

使用CREATE:kind關係將導致多重關係,即使它是csv.kind相同的值。如果是這種情況,您可能需要使用MERGE

對於100 GB的數據,雖然如果你是從一個空的數據庫開始尋找速度,我會看看使用bin/neo4j-admin import

+0

非常感謝。是的,他們多次出現。在應用索引之前,我無法創建它們。種類沒有重複的值,這就是爲什麼我使用了create命令。我無法在neo4j文件夾中找到neo4j-admin文件! (我已經安裝了社區版) – bluemmb

+0

'neo4j-admin'應該在社區版最近版本的'bin /'目錄中。舊版本將包含'neo4j-import',但它們使用相同的語法進行加載。使用這些工具將直接加載一個空的數據庫文件,速度會更快。你將不得不預先處理你的數據,所以你有一個節點文件和一個關係文件。儘管如此,如果你有很多數據,它的速度要快幾個數量級,你可以加載一個空的數據庫,並加速這個問題,這將是一條可行的路。 –