• 学习记录-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,否则将创建一个新的数据库。
  • 相关阅读:
    Java数据库——CallableStatement接口
    Java数据库——处理大数据对象
    Java数据库——PreparedStatement接口
    Java数据库——ResultSet接口
    Java数据库——连接关闭、增删改查
    Ubuntu下的MySQL安装
    JDBC
    注释(Annotation)
    类的生命周期
    Java反射机制<2>
  • 原文地址:https://www.cnblogs.com/l999q/p/13395993.html
Copyright © 2020-2023  润新知