Neo4j之导入CSV大文件 periodic commit

本文介绍如何使用Neo4j的periodic commit功能优化大型CSV文件的导入过程,通过设置每200行提交一次来提高数据导入效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Neo4j之导入CSV大文件 periodic commit

如果要导入包含大量数据的CSV文件,则可以使用periodic commit,默认读取1000行写入一次,也可以设置你想要读取行数参数

using periodic commit
load csv with headers from 'file:///diabetes.csv' as line
create (:Diabetes {
DiabetesPedigreeFunction:line["DiabetesPedigreeFunction"], 
BloodPressure:line["BloodPressure"], 
Outcome:line["Outcome"], 
Glucose:line["Glucose"], 
SkinThickness:line["SkinThickness"],
Insulin:line["Insulin"],
Pregnancies:line["Pregnancies"], 
Age:line["Age"],
BMI:line["BMI"]})

设置200行提交一次,如下:

using periodic commit 200
load csv with headers from 'file:///diabetes.csv' as line
create (:Diabetes {
DiabetesPedigreeFunction:line["DiabetesPedigreeFunction"], 
BloodPressure:line["BloodPressure"], 
Outcome:line["Outcome"], 
Glucose:line["Glucose"], 
SkinThickness:line["SkinThickness"],
Insulin:line["Insulin"],
Pregnancies:line["Pregnancies"], 
Age:line["Age"],
BMI:line["BMI"]})

Well Done

### Neo4j 中通过 CSV 文件进行多层关系的批量导入 在处理复杂的数据集时,尤其是涉及多个实体及其之间多层次的关系结构时,在 Neo4j 数据库中利用 Cypher 查询语言配合 CSV 文件实现高效的数据加载是非常常见的做法。为了完成这一目标,通常会采用 `LOAD CSV` 命令来读取外部存储的 CSV 文件,并结合 `MERGE` 和 `CREATE` 来构建节点和它们之间的关联。 #### 使用 LOAD CSV 进行多层关系的批量导入 假设有一个场景涉及到员工(Employees)、部门(Departments),以及项目(Projects)。这里展示了一个简单的例子说明如何基于给定的 CSV 文件格式执行这样的操作: 1. **准备CSV文件** 确保 CSV 文件中的每一列都对应于要创建或匹配的属性。对于本例来说,假设有三个不同的表格分别代表上述提到的对象类型——即 employees.csv, departments.csv 及 projects.csv ——其中包含了各自的相关信息字段。 2. **编写Cypher查询脚本** 下面是一个用于从这些 CSV 文件中提取数据并建立相应连接的例子: ```cypher // 部门表导入 USING PERIODIC COMMIT LOAD CSV WITH HEADERS FROM 'file:///departments.csv' AS row MERGE (d:Department {id: toInteger(row.id), name: row.name}); // 员工表导入并与部门关联 USING PERIODIC COMMIT LOAD CSV WITH HEADERS FROM 'file:///employees.csv' AS row MERGE (e:Employee{id:toInteger(row.employee_id)}) ON CREATE SET e += apoc.map.clean(row,['employee_id'],[]) WITH e,row MATCH (d:Department{id:toInteger(row.department_id)}) MERGE (e)-[:WORKS_IN]->(d); // 项目表导入并将员工与项目关联起来 USING PERIODIC COMMIT LOAD CSV WITH HEADERS FROM 'file:///projects.csv' AS row MERGE (p:Project{id:toInteger(row.project_id), title:row.title}) WITH p,row UNWIND split(row.participants,',') as participantIdStr MERGE (emp:Employee{id:toInteger(trim(participantIdStr))}) MERGE (emp)-[:PARTICIPATES_IN]->(p); ``` 这段代码首先定义了每个独立对象类型的模式,接着使用 `MERGE` 确保不会重复创建已经存在的记录;最后则是建立了不同实体间的联系。值得注意的是,这里的 `apoc.map.clean()` 函数来自于 APOC 库,用来清理不需要的键值对[^1]。 3. **注意事项** - 在实际应用过程中可能还需要考虑更多细节问题,比如错误处理机制、性能优化策略等。 - 如果遇到较大的数据集,则建议启用批处理功能 (`USING PERIODIC COMMIT`) 以防止事务日志溢出等问题发生。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值