2013-10-14 56 views
0

將數據從Neo4j導出到CSV的最佳方法是什麼,我使用CSV導入器將鏈接https://github.com/sroycode/neo4j-import中的數據從csv導入neo4j。使用java將數據從Neo4j導出到csv

我已經對數據執行了一些操作,我想要將查詢結果返回到csv,任何人都可以向我推薦解決方案。使用的Neo4j 1.9.3和java

IAM 1.6

+0

你想要單獨的節點和關係CSV文件嗎? – Luanne

+0

我不知道最好的方法.. getting節點和關係在單獨的文件是最好的..? – sakar

+0

對不起,我的壞。忽略我的問題,我誤解了。 – Luanne

回答

3

一小片段在Groovy這樣做:

@Grab(group="org.neo4j", module="neo4j-cypher", version="1.9") 
@Grab(group='net.sf.opencsv', module='opencsv', version='2.3') 
import org.neo4j.kernel.EmbeddedGraphDatabase 
import org.neo4j.cypher.javacompat.ExecutionEngine 
import au.com.bytecode.opencsv.CSVWriter 

assert args, "specify location of graph.db and cypher statement" 

def db = new org.neo4j.kernel.EmbeddedGraphDatabase(args[0]) 
def ee = new ExecutionEngine(db) 
def result = ee.execute(args[1]) 
def columns = result.columns() 

System.out.withWriter { writer -> 
    CSVWriter csv = new CSVWriter(writer) 
    csv.writeNext(columns as String[]) 

    for (def row in result) { 
     def values = columns.collect {row[it]} 
     csv.writeNext(values as String[]) 
    } 
} 
db.shutdown() 

當然opencsv可以在純Java環境中使用爲好。

+0

感謝您的回覆Stefan ..但有什麼辦法與java..because我已經使用java。 – sakar

+0

您可以輕鬆地將上面的代碼片段轉換爲普通的舊java - 應該很容易。 –

1

因爲您已經有了ID,您可以使用密碼來獲取ID(5)中的ID和他們的正向關係,csv分隔符是'|'

爲了測試使用的Neo4j殼 語法:Neo4j的殼< INFILE> OUTFILE

INFILE節點看起來像

START n=node(1,2,3,4,5) return ID(n),n.name?,n.property?; 
START n=node(6,7,8,9,10) return ID(n),n.name?,n.property?; 
.... 

INFILE對RELN看起來像

START n=node(1,2,3,4,5) MATCH n-[r]->m RETURN ID(n),ID(m),TYPE(r),r.someprop?; 
START n=node(6,7,8,9,10) MATCH n-[r]->m RETURN ID(n),ID(m),TYPE(r),r.someprop?; 
.... 

要做到Java API中的相同內容,只是在for循環中運行相同的東西。