学习记录-neo4j通过batch-import导入数据

Posted l999q

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习记录-neo4j通过batch-import导入数据相关的知识,希望对你有一定的参考价值。

使用batch-import导入节点和关系

参考文档链接:
英文文档
中文版
博客

下载batch-import工具

  • batch-import原始项目地址:https://github.com/jexp/batch-import

    在导入.gz压缩文件时,会出现关系无法导入的情况,所以如果要使用.gz压缩包进行导入,请使用下面这个版本:

  • 某大神修改后的版本:https://github.com/mo9527/batch-import <-- 我下的这个

  • batch-import工具的使用需要java环境( jdk:7以上)

  • batch-import工具目录结构如下图:
    技术图片
    将要导入的csv文件和.gz压缩包放在这个目录下

CSV文件的一些注意点

  • 只使用了csv文件,未使用.gz压缩包格式
  • 默认csv文件需要使用tab分隔,如果要导入的csv文件是以逗号‘,’分隔,可以在batch.properties 文件中进行配置:batch_import.csv.delim=,
  • 节点文件:
    • 第一行为属性名称
    • 需要有l:label 列才能创建出节点,用于节点标签
    • 如果最初只导入一个文件,则行号对应于节点 id ( 开始为 0 ),id用于创建关系中
    • 可以根据如下的代码配置属性自动索引属性:name:string:users 和配置的索引,如,然后属性 name 将在每个行的users 索引中编制索引
    • 属性字段可以定义类型为 name:type,类型有( int,long,float,double,boolean,byte,short,char,String ),默认类型为String,即只写name时表示为String类型。
    • 如有多个节点文件名用英文逗号‘,‘隔开。节点文件与关系文件间用空格‘ ‘隔开。
  • 关系文件(两种):
    • 一种用id,当节点文件只有一个时,第一列可以写从节点中这条数据对应的id(从0开始),第二列写到节点对应的id。(多个节点文件未尝试成功)
    • 一种用自动索引属性。例:name:string:users。属性名name将在users索引中为每一行建立一个值为索引。这种写法需在batch.properties 文件中进行配置:batch_import.node_index=exact

实例:需要导入两类节点a,b及关系a->b。

解决方法

  • 方法:经过多次尝试,最终将两类节点写在一个节点文件中(因为两类节点标签不同,属性值也不同故合并到一个文件中),共两列(一列l:label,一列属性名)
    nodes.csv
    l:label nm
    a 123
    b 一二三
    也可以将两个节点的属性分开写,只会更改节点中的属性名,不会有其他影响
    l:label aname bname
    a 123
    b 一二三
    然后在关系文件中将其用id表示,例:第一列(a,123)用0表示,第二列的(b,一二三)用1表示,以此类推。
    rels.csv
    必须第一列为从节点,第二列为到节点
    from to type
    0 1 user
    csv文件中对应的索引id可以用python处理。
    batch-import工具目录下(import.bat所在目录)执行命令:import.bat graph.db nodes.csv rels.csv就会在该目录下生成graph.db文件,(关闭neo4j服务器)将该文件移到 neo4jdatadatabases下,(启动neo4j服务) 浏览器中打开neo4j页面即可查看数据库中的内容。
  • 注意点
    若在网页中看到节点上无信息或显示的不是想看到的信息可以:
    点击上方节点标签名 -> 点击下方想要显示的消息标题 技术图片

使用配置索引的方法:就像name:string:users

  • 节点文件:
    nodes.csvl:label(必须有这列才能创建节点),另外两列分别为两类节点的自动索引属性。

    nm:string:users l:label mc:string:deviceId
    123 a
    b 一二三

    这里有个bug:l:label必须在中间列才能成功创建关系 ???

  • 关系文件
    rels.csv:从节点列:nm:string:users,到节点列:mc:string:deviceId,关系列:type,属性列:属性名:属性类型(没有属性可以不写)

    nm:string:users mc:string:deviceId type
    123 一二三 uses
  • 配置文件&执行命令
    先在batch.properties中配置

    	batch_import.node_index.users=exact
    	batch_import.node_index.buyerId=exact
    	batch_import.relationship_index.worked=exact
    

    再在batch-import工具目录下(import.bat所在目录)执行命令:import.bat graph.db nodes.csv rels.csv就会在该目录下生成graph.db文件,(关闭neo4j服务器)将该文件移到 neo4jdatadatabases下,(启动neo4j服务) 浏览器中打开neo4j页面即可查看数据库中的内容。

  • 这个好像有时候有点问题?还没弄清楚,待更

疑问

  • 如何导入多个节点文件?

补充

  • 如果需要在已有数据库中添加节点和关系,需要在batch.properties中配置batch_import.keep_db=true,否则将创建一个新的数据库。














以上是关于学习记录-neo4j通过batch-import导入数据的主要内容,如果未能解决你的问题,请参考以下文章

学习记录-neo4j语句

学习记录-py2neo:Neo4j数据库的python驱动

使用 REST 优化 Neo4j 的大批量批量插入

37张思维导图,记录纯小白五天速通Python的学习笔记

37张思维导图,记录纯小白五天速通Python的学习笔记

37张思维导图,记录纯小白五天速通Python的学习笔记