图数据库neo4j进阶(一):csv文件导入节点及关系

一、load csv

在neo4j Browser中使用Cypher语句LOAD CSV,对于数据量比较大的情况,建议先运行create constraint语句来生成约束

create constraint for (s:Student) require s.student_id is unique;

该代码为学生的student_id生成了唯一性约束,可将该属性视为主键。添加约束后,不论是生成还是查询,效率都会显著提升
生成学生节点的代码示例如下

:auto
LOAD CSV with HEADERS from 'file:///student.csv' AS row
call {
	with row
	merge (s:Student{student_id:row.student_id,name:row.name,age:row.age})
} in transactions of 100000 rows;
  • LOAD CSV from '.csv’表示从csv文件中导入数据
  • 若csv文件包含表头则加入with headers
  • 单引号内写csv文件的路径,若csv文件已在当前数据库的Import文件夹内(可在桌面版主页点击数据库右侧三点键–Open folder --Import打开import文件夹),则直接写’file:///…csv’;若不在,则写绝对路径
  • as row表示给数据表赋别名row,这时数据表相当于一个变量,后续用row.[字段]即可取得数据表的某列
  • with row表示在此处接收变量row并将其传递至后续语句
  • merge用于生成数据点,类似于match(查询)和create(创建)的结合
  • {name:row.name}表示将row的name列赋值给节点的属性name
  • call {} in transactions of 100000 rows表示批量处理数据,每批100000行。在处理大量数据时,建议使用该语句,不然易出现内存溢出错误

下述代码生成班级数据点

:auto
LOAD CSV with HEADERS from 'file:///class_id.csv' AS row
call {
	with row
	merge (s:Student{class_id:row.class_id,math_teacher:row.math_teacher,english_teacher:row.english_teacher,chinese_teacher:row.chinese_teacher})
} in transactions of 100000 rows;

接着生成关系(边)

:auto
LOAD CSV with HEADERS from 'file:///student.csv' AS row
call {
	with row
	match (s:student {student_id:row.student_id})
	match (c:class {class_id:row.class_id})
	merge (s)-[:BELONG] -> (c)
} in transactions of 100000 rows;

二、neo4j-admin import

<一>、导入入口

  • neo4j-admin针对的是数据量比较大,千万级数据,用LOAD CSV方法会报内存溢出错误
  • 这一方法需在终端中使用(桌面版neo4j-desctop主页点击数据库右侧三点键–Terminal即可打开终端)

在这里插入图片描述
进入终端以后就可以执行导入命令了

<二>、文件准备

1、节点文件

  • 顶点数据表头:“[…]:ID”,“[…]:LABEL”,“[…]:IGNORE”,"[…]:double"等

对于顶点数据表头

  • “[…]:ID"是必需项,比如将"CLASS_ID"改为"CLASS_ID:ID”
  • 若整张表都是同一标签,则不需"[…]:LABEL"列,而是在命令行,见命令详解,–nodes=Class="…csv"表示这些节点都带Class标签
  • "[…]:IGNORE"表示导入时忽略该列
  • "[…]:double"表示导入时将该列的值转为double型,默认是string

eg:

class_id:IDmath_teacherenglish_teacherchinese_teacher
1祖冲之狄更斯李白
2张苍莎士比亚杜甫

导入到图数据库时,class_id,match_teacher,english_teacher,chinese_teacher都是节点的属性,Class为节点的标签

2、关系文件

  • 边数据表头:“[…]:START_ID”,“[…]:END_ID”,“[…]:TYPE”,“[…]:IGNORE”,"[…]:double"等

对于边数据表头

  • “[…]:START_ID”、“[…]:END_ID"为必需项,比如"student_id:start_id"和"class_id:end_id”
  • “[…]:TYPE"类似于顶点数据表头的”[…]:LABEL",如"belong:TYPE",也可在命令行中指定,如–relationships=BELONG=“…csv”
  • 其它项同理

eg:

student_id:START_IDclass_id:END_ID“belong”:typenameage
3001belong李世民18
3012belong朱元璋20

导入到图数据库时,会生成两条关系:如300 -[belong]->1,301 -[belong]->2,name、age为student的属性

注意:文件需放在当前数据库的import文件夹下

<三>、命令详解

neo4j-admin database import full 
--overwrite-destination 
--multiline-fields=true 
--skip-bad-relationships 
--nodes=Class="import\class.csv"
--relationships="import\student.csv" 
--input-encoding=UTF-8 
neo4j
  • –overwrite-destination:指定在导入数据时是否覆盖目标数据库中的现有数据,如果目标数据库中已经存在数据,导入操作会覆盖这些数据
  • multiline-fields:用于指定是否允许导入的字段包含多行数据。当设置为 true 时,该参数允许字段中的数据跨越多行,这对于处理包含换行符的文本数据非常有用
  • –skip-bad-relationships:用于指定是否跳过那些引用了不存在节点ID的关系。如果设置为 true,则在导入过程中,如果遇到引用了不存在的起始节点或结束节点的关系,这些关系将被跳过,而不会中断整个导入过程。这个参数的默认值是 false
  • –nodes:导入节点
  • –relationships:导入关系
  • neo4j:表示导入到哪个数据库,这里指的是默认的neo4j,如想更改,只需改成想导入的数据库即可
### Neo4j导入 CSV 文件的方法 在 Neo4j 数据库中,可以通过多种方式实现 CSV 文件的数据导入。以下是具体方法及其细节: #### 使用 `LOAD CSV` 查询语句 Neo4j 提供了种内置的查询语法——`LOAD CSV`,用于从外部 CSV 文件加载数据并将其存储到数据库中。此功能支持本地文件以及通过 URL 访问的远程文件。 要使用该功能,需确保 Neo4j 配置允许访问指定路径下的文件。通常情况下,在配置文件 `neo4j.conf` 中启用以下设置即可[^2]: ```properties dbms.security.allow_csv_import_from_file_urls=true ``` 执行如下 Cypher 查询可以完成数据导入: ```cypher LOAD CSV WITH HEADERS FROM 'file:///path_to_your_file.csv' AS row CREATE (p:Person {name: row.name, age: toInteger(row.age)}) RETURN p; ``` 上述代码片段假设存在个名为 `person.csv` 的文件,并且其列头分别为 `name` 和 `age`。这里需要注意的是,路径中的三个斜杠 (`///`) 表示相对根目录的位置;如果是在 Windows 平台上,则可能需要调整为适合的操作系统格式[^1]。 #### 利用命令行工具批量处理 除了直接编写 Cypher 脚本外,还可以借助 Neo4j 自带的命令行界面来简化流程。启动服务前先进入安装好的 bin 文件夹位置运行 `neo4j console` 启动服务器实例[^3]。之后再利用 shell 工具提交脚本或者交互式输入指令完成复杂场景下的大批量节点创建与边关联工作。 对于初学者而言,建议先熟悉基本概念如图结构模型定义、属性设定等内容后再深入学习高级特性应用部分。 --- ### 示例代码展示 下面给出段完整的 Python 连接 Neo4j 并调用 `session.run()` 执行自定义 Cypher 语句的例子: ```python from neo4j import GraphDatabase uri = "bolt://localhost:7687" driver = GraphDatabase.driver(uri, auth=("neo4j", "password")) def add_person(tx, name, age): tx.run(""" CREATE (a:Person{name:$nameParam, age:$ageParam}) """, {"nameParam": name, "ageParam": int(age)}) with driver.session() as session: session.write_transaction(add_person, "Alice", 30) driver.close() ``` 以上程序展示了如何建立连接并通过事务机制安全地新增记录至目标数据库表单之中。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱夜来香A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值