2013-10-14 55 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循环中运行相同的东西。