如何在浏览器中使用Neo4j中的cypher导出大型结果集的csv文件?

时间:2014-08-08 16:51:12

标签: neo4j cypher

我在Ubuntu上的浏览器上使用Neo4j。我有超过100万个节点,我想将它们导出为csv文件。

当返回数据大小很小时,如#34;匹配n返回n限制3"有一个很大的脂肪"下载csv"我可以用的按钮。但是当涉及超过1000的大结果集时,shell只会说"结果集太大(超过1000行)"并且按钮不会显示。

如何为大型结果集导出csv文件?

7 个答案:

答案 0 :(得分:4)

您还可以使用我的shell扩展将cypher结果导出为CSV。

见这里:https://github.com/jexp/neo4j-shell-tools#cypher-import

只需向import-cypher命令提供-o output.csv文件。

答案 1 :(得分:2)

好吧,我只是用linux shell来完成所有工作。

neo4j-shell -file query.cql | sed 's/|/;/g' > myfile.csv

在我的情况下,我还要将UTF-8转换为ISO-8859-1,因此我键入了:

neo4j-shell -file query.cql | sed 's/|/;/g' | iconv -f UTF-8 -t ISO-8859-1 -o myfile.csv

PS:sed执行替换:'s / | /; / g'表示替换所有“|”至 ”;”即使每行有多个(g)

希望这可以提供帮助 此致

答案 2 :(得分:2)

我们按照下面的方法使用了提到的。它对我们很有用。 数据以csv格式正确格式化。

https://github.com/jexp/neo4j-shell-tools#cypher-import

import-cypher command from neo4J shell.

neo4j-sh (?)$ import-cypher -o test.csv MATCH (m:TDSP) return m.name

答案 3 :(得分:0)

我知道这是一个老帖子,但也许这会帮助别人。对于使用Symfony Framework的任何人,您可以创建一个非常简单的控制器来将Neo4j Cypher Queries导出为CSV。这使用Graphaware NEO4J PHP OGM(https://github.com/graphaware/neo4j-php-ogm)来运行原始cypher查询。我想这也可以在没有Symfony的情况下轻松实现,只使用普通的PHP。

只需制作一张表格(如果你愿意,可以使用树枝):

  <form action="{{ path('admin_exportquery') }}" method="get">
    Cypher:<br>
    <textarea name="query"></textarea><br>
    <input type="submit" value="Submit">
  </form>

然后设置“admin_exportquery”的路由指向控制器。并添加一个控制器来处理导出:

public function exportQueryAction(Request $request)
    {
        $query = $request->query->get('query');
        $em = $this->get('neo4j.graph_manager')->getClient();

        $response = new StreamedResponse(function() use($em,$query) {
            $result = $em->getDatabaseDriver()->run($query);
            $handle = fopen('php://output', 'w');
            fputs( $handle, "\xEF\xBB\xBF" );
            $header = $result->getRecords()[0]->keys();

            fputcsv($handle, $header);
            foreach($result->getRecords() as $r){
                fputcsv($handle, $r->values());
            }

            fclose($handle);
        });

        $response->headers->set('Content-Type', 'application/force-download');
        $response->headers->set('Cache-Control', 'no-store, no-cache');
        $response->headers->set('Content-Disposition','attachment; filename="export.csv"');

        return $response;

    }

这使您可以直接从浏览器下载带有utf-8字符的CSV,并为您提供Cypher的所有自由。

重要提示:这没有查询,所以在使用之前设置适当的安全性或查询检查是一个非常好的主意:)

答案 4 :(得分:0)

cypher-shell:

private class Bot(val number: Int, 
                  private var low: Int?, 
                  private var high: Int?) {

    ...
}
最新版本的neo4j中包含的

可以轻松完成此任务:

https://neo4j.com/docs/operations-manual/current/tools/cypher-shell/

答案 5 :(得分:0)

限制1000是由浏览器MaxRows设置引起的。您可以将其更改为例如 10000,从而可以通过原始帖子中描述的下载/导出csv按钮一次性下载10000个。在我的笔记本电脑上,下载按钮的限制介于10000和20000之间。 通过将MaxRows限制设置为50000或300000,我可以在等待一段时间后在屏幕上获取数据。手动选择,复制和粘贴工作。但是,除了浏览器变得非常慢之外,还不能在每次查询后关闭浏览器。

答案 6 :(得分:0)

还有另一种方法,可以使用带有http / https neo4j transaction/commit端点的cURL命令将数据导出为CSV。

这是有关此操作的示例。

curl -H accept:application/json -H content-type:application/json \
     -d '{"statements":[{"statement":"MATCH (p1:PROFILES)-[:RELATION]-(p2) RETURN ... LIMIT 4"}]}' \
     http://localhost:7474/db/data/transaction/commit \
     | jq -r '(.results[0]) | .columns,.data[].row | @csv'

,此命令使用jq。确保您的计算机中安装了jq,并将结果转换为CSV格式。

注意:您可能需要在标头中传递授权以进行身份​​验证。

只需传递-H 'Authorization: Basic XXXXX=' \即可避免401

这是带有详细说明的博客。 https://neo4j.com/blog/export-csv-from-neo4j-curl-cypher-jq/