neo4jで検索したリレーションやノードは'TEXT'としてコピペはできるけど、ファイルとして出力したい → 'apoc'という拡張プラグインで csv出力できるらしい。
環境:
Debian 10, neo4j 4.2.7 community 版, Cypher-Shell 4.2.7
設定:
neo4j community インストール済ならば、/var/lib/neo4j/labs/apoc-4.2.0.4-core.jar がすでに入っている。ただし同 README.txt記述の設定と export設定が必要。
(neo4j サーバが動いてない状態で)
1) $ sudo cp /var/lib/neo4j/labs/apoc-4.2.0.4-core.jar /var/lib/neo4j/plugins/
2) /etc/neo4j/neo4j.conf 262行目あたりに追記
dbms.security.procedures.unrestricted=apoc.*
3) /etc/neo4j/neo4j.conf 最後辺りに追記
apoc.export.file.enabled=true
apoc.import.file.enabled=true
chown neo4j:neo4j apoc-4.2.0.4-core.jar
chmod 755 apoc-4.2.0.4-core.jar
の手順記事もあった。やらなくても動いた。
動作確認:
$ sudo neo4j start // neo4jサーバ起動
$ cypher-shell -u neo4j -p XXXX //cypher-shell起動
neo4j@neo4j> return apoc.version(); //⇠neo4jブラウザからでも可
+----------------+
| apoc.version() |
+----------------+
| "4.2.0.4" |
+----------------+ // 受け付けるっぽい
neo4j@neo4j> merge (a:Person{name:'Yamada', age:tointeger(30), address:'Yamanashi'}); //ノード作成して実験
neo4j@neo4j> call apoc.export.csv.all("out_node.csv", {}); //⇠neo4jブラウザからでも可 out_node.csvに出力
別ターミナルから デフォルト import先の /var/lib/neo4j/import を見てみる。
(neo4j.confで import先を変更してる場合は、そちらに出力される)
$ ls -l /var/lib/neo4j/import/out_node.csv
-rw-r--r-- 1 root root out_node.csv
$ cat out_node.csv
"_id","_labels","address","age","name","_start","_end","_type"
"0",":Person","Yamanashi","30","Yamada",,, // なんか OKみたい
neo4j@neo4j> match (n) detach delete n; // 以上、クリーニング
neo4j@neo4j> :exit // cypher-shell終了
$ sudo neo4j stop // neo4jサーバ停止
まとめ:
CALL apoc.export.csv.all("出力ファイル名.csv", {}); が得られた。
他に apoc.export.csv.query というプロシージャもある。
出力ファイル先 import を /etc/neo4j/neo4j.confのdbms.directories.import=/var/lib/neo4j/import を /home/USER/...などに変更してる場合、出力.csvが rootでしかrwできないのは不便かも...どこで変えるんだろう?
本末転倒
apoc設定しなくても、neo4jブラウザの場合、returnで返すようなコードの場合は、右上のバーから csv, json, png, svg でファイルが保存できる。