Neo4j 批量导入数据 从官方文档学习LOAD CSV 命令 小白可食用版

学习LOAD CSV🚀

       在使用Neo4j进行大量数据导入的时候,发现如果用代码自动一行一行的导入效率过低,因此明白了为什么需要用到批量导入功能,在Neo4j中允许批量导入CSV文件格式,刚开始从网上的中看了各种半残的博客或者视频,拼拼凑凑也实现了功能,然后想写个博客记录一下,一想直接把代码沾上来讲的也不是很全面,就打算按照官方文档的思路讲一下,然后给中间补充一些文档中往往会省略的实践细节,故有了这篇博客,在对官方文档的翻译中加入自己对技术的理解会比机翻或者要求严格的文档更好理解一些。本文只介绍前几个常用的节点和关系的批量导入不然内容太多了,后面不常用的就先不介绍了。


阅读本文需要对Neo4j的基础知识有一些了解,如果还没有学习,可以阅读本文章的前置文章。
Neo4j 新手教程 环境安装 基础增删改查 python链接 常用操作 纯新手向

文章目录

  • 学习LOAD CSV🚀
    • 1.LOAD CSV 简介
    • 2. Import CSV data into Neo4j 把CSV导入Neo4j 极简版(重要)
    • 3.Import compressed CSV files 导入压缩的csv文件
    • 4.Import data from relational databases 导入关联数据(重要)
  • 结束

首先给出Neo4j的官方文档的地址:
https://neo4j.com/docs/cypher-manual/current/clauses/load-csv/
在这里插入图片描述

1.LOAD CSV 简介

在这里插入图片描述
LOAD CSV 是用来将CSV文件导入到Neo4j数据集当中的。

LOAD CSV FROM 'https://data.neo4j.com/bands/artists.csv'
AS row
MERGE (:Artist {name: row[1], year: toInteger(row[2])})
  • FROM 后面接一个文件所在路径的字符串
  • 命令是一行一行处理文件的,每次处理的时候,用AS将这一行的数据临时存储在一个变量里(在这个例子中这个变量是row)
  • 用MERGE访问row变量然后存入到数据集中

LOAD CSV 支持本地和远程的URL,本地路径关联在Neo4j的数据库的文件夹中。

URL Uniform Resource Locator
雅称:统一资源定位符
俗称:文件路径(新手可以直接这吗理解,虽然严格意义不准确)

2. Import CSV data into Neo4j 把CSV导入Neo4j 极简版(重要)

       可以将CSV文件保存在本地数据集的文件夹import下面,然后使用一个file:///前缀名字。下面是官方给的一个例子,接下来我们具体实际操作一下
在这里插入图片描述

       首先是保存这个csv文件,首先我们直接来一个简单的txt直接过去,之后再做用excel转的,直接新建一个txt然后粘进去。

1,ABBA,1992
2,Roxette,1986
3,Europe,1979
4,The Cardigans,1992

在这里插入图片描述
       然后点右上角的文件选择另存为,然后进入到Neo4j的import文件夹的目录下

在这里插入图片描述
       之后把文件后缀的txt直接改为csv,然后确认一下文件编码为UTF-8
在这里插入图片描述
       然后打开该目录你会看到一个csv文件
在这里插入图片描述
       用excel打开看一眼,嗯!
在这里插入图片描述

       然后打开Neo4j的控制台。在上方的命令框输入命令

LOAD CSV FROM 'file:///artists.csv' AS row
MERGE (a:Artist {name: row[1], year: toInteger(row[2])})
RETURN
  a.name,
  a.year

如果不知道如何打开请移步愚作:Neo4j 新手教程 环境安装 基础增删改查 python链接 常用操作 纯新手向

在这里插入图片描述

       按下Ctrl+Enter或者右上侧的蓝色小三角运行命令,运行结果如下,导入成功。

在这里插入图片描述

       如果不想保存到数据库文件的import文件夹下,直接换成本地路径直接导入,例如直接把文件复制到E盘,然后把路径直接换成E:/artists.csv结果是不行。

在这里插入图片描述

       为了解决这个问题需要求改Neo4j数据库的配置文件,首先在数据库的conf文件下下找到neo4j.conf文件然后用记事本打开。
在这里插入图片描述
找到这个serve.directories.import=import给它前面加一个#号注释掉

在这里插入图片描述
注释之后变成这样
在这里插入图片描述
       然后Ctrl+S保存一下,或者关闭的时候点一下也行,然后把E:/artists.csv改成'file:///E:/artists.csv'然后再运行,成功!

  • file:///必须加,不加报错
  • 在配置文件中注释了server.directories.import=import之后,把路径设置回file:///artists.csv,也依旧可以从Import文件下下导入文件
LOAD CSV FROM 'file:///E:/artists.csv' AS row
MERGE (a:Artist {name: row[1], year: toInteger(row[2])})
RETURN
  a.name,
  a.year

在这里插入图片描述

3.Import compressed CSV files 导入压缩的csv文件

       LOAD CSV也可以上传压缩成ZIP的CSV文件,不管套了几个文件,最后这个ZIP文件里只能有一个CSV文件,文档里写的太官方,我这里尝试重新描述一下,然后再给它分几种情况测一测,挖一挖它这个功能。
在这里插入图片描述
好现在import文件下直接右键CSV压缩一层得到一个zip压缩包
在这里插入图片描述
然后再Neo4j控制台导入OK成功

LOAD CSV FROM 'file:///artists.zip' AS row
MERGE (a:Artist {name: row[1], year: toInteger(row[2])})
RETURN
  a.name,
  a.year

在这里插入图片描述
然后将压缩文件从import目录移动到E盘,然后运行OK

LOAD CSV FROM 'file:///E:/artists.zip' AS row
MERGE (a:Artist {name: row[1], year: toInteger(row[2])})
RETURN
  a.name,
  a.year

在这里插入图片描述
然后开始套娃
首先套了两层文件
在这里插入图片描述
然后将套娃文件打包成zip
在这里插入图片描述

然后运行ok可行

在这里插入图片描述
接下来套娃的时候把套娃的文件夹名字修改一下,先修改一下套娃中间文件夹的名字,给它改成a再打包再运行
在这里插入图片描述
OK可行

在这里插入图片描述
然后把套娃最外层的文件夹的名字改了,改成和CSV文件的名字不一致,然后打包成zip
在这里插入图片描述
在这里插入图片描述
这个不可行
在这里插入图片描述

然后把最外层的文件夹名字改成和CSV一致,然后在artist.csv在路径下加一些奇奇怪怪的文件,然后再打包成zip然后运行

在这里插入图片描述
可行
在这里插入图片描述
然后在路径下加个其他的csv文件,然后再打包成csv然后运行
在这里插入图片描述OK可行
在这里插入图片描述

结论:和文档中的描述基本一致,就说最外层文件夹的名字得和要导入的csv文件一致,最外层文件夹名字是哪个就读哪个CSV

桀桀桀!感受到中国算法工程师的执着了吗Neo4j的官方人员(笑)。

4.Import data from relational databases 导入关联数据(重要)

       在官方文档中给了这样一个例子,一个数据和其作者的数据集,那这里不但包含着作者和书籍的节点node,还包含着A作者写了B书的一个关系relationship
在这里插入图片描述
       接下来老操作,直接复制到txt文件然后给它转存成UTF-8编码的csv,文件名字是books,要是忘了咋操作或者跳读到这的话,翻回到上面的这里。

Import CSV data into Neo4j 把CSV导入Neo4j 极简版

id,title,author,publication_year,genre,rating,still_in_print,last_purchased
19515,The Heights,Anne Conrad,2012,Comedy,5,true,2023/4/12 8:17:00
39913,Starship Ghost,Michael Tyler,1985,Science Fiction|Horror,4.2,false,2022/01/16 17:15:56
60980,The Death Proxy,Tim Brown,2002,Horror,2.1,true,2023/11/26 8:34:26
18793,Chocolate Timeline,Mary R. Robb,1924,Romance,3.5,false,2022/9/17 14:23:45
67162,Stories of Three,Eleanor Link,2022,Romance|Comedy,2,true,2023/03/12 16:01:23
25987,Route Down Below,Tim Brown,2006,Horror,4.1,true,2023/09/24 15:34:18

在这里插入图片描述
ok好的看一下,然后右侧的这个时间是缩略了,展开就能看见了不用害怕。
在这里插入图片描述

// Create `Book` nodes 导入节点
LOAD CSV WITH HEADERS FROM 'file:///books.csv' AS row
MERGE (b:Book {id: row.id, title: row.title})
MERGE (a:Author {name: row.author});

// Create `WROTE` relationships 导入关系
LOAD CSV WITH HEADERS FROM 'file:///books.csv' AS row
MATCH (a:Author{name: row.author})
MATCH (b:Book{id: row.id})
MERGE (a)-[:WROTE]->(b);

这段代码使用了Cypher查询语言来处理两个主要任务:
首先,它从一个CSV文件中导入数据来创建Book和Author节点;
其次,它基于相同的CSV文件创建这些Book和Author节点之间的WROTE关系。下面是对这两个过程的详细解释:

第一部分:创建Book和Author节点

LOAD CSV WITH HEADERS FROM 'file:///books.csv' AS row
MERGE (b:Book {id: row.id, title: row.title})
MERGE (a:Author {name: row.author});
  • LOAD CSV WITH HEADERS FROM 'file:///books.csv' AS row这条命令告诉Neo4j从给定的路径file:///books.csv' 加载一个CSV文件,该文件具有标题行(即每列的第一行包含列名)。AS row表示每一行数据都会被赋予变量名row,之后可以通过这个变量访问行中的数据。
  • MERGE (b:Book {id: row.id, title: row.title}):MERGE命令用于创建一个新的Book节点,或者如果具有相同id和title属性的节点已经存在,则匹配(不重复创建)该节点。这里,row.id和row.title是从CSV文件中读取的每一行的对应列数据。
  • MERGE (a:Author {name: row.author}):类似地,这条命令用于创建或匹配一个Author节点,其name属性由当前行的author列提供。

第二部分:创建WROTE关系

LOAD CSV WITH HEADERS FROM 'file:///books.csv' AS row
MATCH (a:Author{name: row.author})
MATCH (b:Book{id: row.id})
MERGE (a)-[:WROTE]->(b);
  • 加载数据部分一样
  • MATCH (a:Author{name: row.author})和MATCH (b:Book{id: row.id}):这两个MATCH命令分别用于查找当前行中提到的Author和Book节点。它们通过比较name和id属性与文件中的相应列来定位节点。
  • MERGE (a)-[:WROTE]->(b):最后,MERGE命令用来创建一个新的WROTE关系,从找到的Author节点指向Book节点。如果这样的关系已经存在,则不会创建重复的关系。

然后运行上诉代码这里我把URL改成本地了,而文档中用的是网络URL,这里还是先了解怎么在本地导入节点和关系网络导入暂时不需要
在这里插入图片描述
然后点一下这个WROTE,ok完美
在这里插入图片描述

结束

       然后文档的后面还有一些增加属性以及处理数据例如去除Null值等诸如此类的工作,不是重点暂时就先不介绍了。然后有个小麻烦的地方,在导入不同类别的数据的时候需要分批导入,类别参数不能直接用CSV中的导入值,我自己有个数据集有50类关系,我手动输入了50次命令,我简单了解了一下之后应该可以用Foreach命令解决,这个问题会纳入到后续的更新规划当中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/450342.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于PyTorch深度学习实战入门系列-(3)Numpy基础下

使用mat创建矩阵 a np.mat([[5, 6], [7, 8]]) b np.mat([[1, 2], [3, 4]]) print(a) print(b) print(type(a)) print(type(b))矩阵的加减乘除运算 data1 np.mat([[1, 2], [3, 4], [5, 6]]) data2 np.mat([1, 2]) data3 np.mat([[5, 6], [7, 8]]) print(data1 data2) prin…

MySQL中的事务

MySQL中的事务 简介操作方式一方式二 事务四大特性(ACID)并发事务问题事务的隔离级别 简介 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功&#xf…

一文读懂:代码签名证书详解

背景:代码签名证书是使得软件开发商能对其软件代码进行数字签名,从而让该证书为软件开发商提供了一个理想的安全环境,也同样对其软件代码进行数字签名。 原理是通过对代码的数字签名来标识软件来源以及软件开发者的真实身份,保证…

SQL 多表查询

文章目录 多表查询的分类等值连接非等值连接自连接非自连接内连接外连接左外连接右外连接满外连接 SQL连接 JOINSQL99 语法新特性 自然连接 NATURAL JOIN & USING 多表查询的分类 等值连接 VS 非等值连接自连接 VS 非自连接内连接 VS 外连接 等值连接 关联的表有连接字段…

ThreadLocal是什么,ThreadLocal源码分析,ThreadLocal应用,ThreadLocal内存泄漏

ThreadLocal是什么,ThreadLocal源码分析,ThreadLocal应用,ThreadLocal内存泄漏 目录 本文导读 一、ThreadLocal概述 二、ThreadLocal源码解析 三、ThreadLocal在多线程并发中的应用 四、ThreadLocal与内存泄漏问题 总结 博主v&#xf…

MATLAB 四点确定唯一球面参数(44)

MATLAB 四点确定唯一球面参数(44) 一、算法简介二、算法实现1.代码2.结果一、算法简介 根据给定的四个点,快速拟合获取球的中心和半径,具体代码如下: 二、算法实现 1.代码 代码如下(示例): point1 = [0.0, 0.0, 0.0]

Matlab进阶绘图第43期—双三角曲面图

在《Matlab论文插图绘制模板第68期—三角曲面图(Trisurf)》中,我分享过三角曲面图的绘制模板。 然而,有的时候,需要在一张图上绘制两个及以上的三角曲面图,且每个三角曲面图使用不同的配色方案。 在Matlab中,一张图上…

python 基础知识点(蓝桥杯python科目个人复习计划62)

今日复习内容:做题 例题1:付账问题 问题描述: 几个人一起出去吃饭是常有的事,但在结账的时候,常常会出现一些争执。 现在有n个人出去吃饭,他们总共消费了S元,其中第i人带了ai元。幸运的是&a…

【Vue】.sync 修饰符作用

文章目录 基本用法 基本用法 官方文档是这样介绍的:.sync 修饰符 简单来说就是实现父子组件数据之间的双向绑定,当子组件修改了一个 props 的值时,也会同步到父组件中,实现子组件同步修改父组件,与v-model类似。类别在…

【Python】新手入门学习:什么是相对路径?

【Python】新手入门学习:什么是相对路径? 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得…

如何选择好用的ai写作软件?

如何选择好用的ai写作软件?ai写作软件的出现是随着ai技术的迅猛发展下的产物,它主要应用于内容创作领域,可以是文章内容创作、视频内容创作、绘图创作等等,不同的ai写作软件可能应用的领域不同,但也有的ai写作软件应用…

地平线旭日x3派部署yolov5--全流程

地平线旭日x3派部署yolov5--全流程 前言一、深度学习环境安装二、安装docker三、部署3.1、安装工具链镜像3.2、配置天工开物OpenExplorer工具包3.3、创建深度学习虚拟空间,安装依赖:3.4、下载yolov5项目源码并运行3.5、pytorch的pt模型文件转onnx3.6、最…

网络安全行业真的内卷了吗?

有一个特别流行的词语叫做“内卷”: 城市内卷太严重了,年轻人不好找工作;教育内卷;考研内卷;当然还有计算机行业内卷…… 这里的内卷当然不是这个词原本的意思,而是“过剩”“饱和”的替代词。 按照网络安…

场效应管(MOSFET)如何选型?一文详解选型要点

一、MOSFET简介 场效应管(MOSFET)也叫场效应晶体管,是一种单极型的电压控制器件,不但有自关断能力,而且具备输入电阻高、噪声小、功耗低、驱动功率小、开关速度高、无二次击穿、安全工作区宽等特点,MOSFET在组合逻辑电路、放大器…

国创证券|lpr下调25个基点是多少?lpr下调对股市债市有什么影响?

lpr是借款市场报价利率,其间lpr下调25个基点是指lpr利率下降0.25%,比方,下调之前五年期以上的lpr为4.2%,下调25个基点之后,变为3.95%。 lpr下调对股市债市存在以下影响: 1、券商股 借款利率下降&#xf…

小马智行与卢森堡签署自动驾驶合作谅解备忘录

近日,自动驾驶企业小马智行宣布与卢森堡大公国政府签署谅解备忘录,促进自动驾驶汽车及技术在卢森堡的发展。该文件由小马智行联合创始人、CEO彭军与卢森堡经济部长Lex Delles共同签署,这也标志着小马智行与卢森堡政府就推动该地区的自动驾驶研…

智能警用装备柜管理系统|智能化可视化管理

智能警用装备柜管理系统|智能化可视化管理 我司(JIONCH集驰)警用装备管理系统(智装备DW-S304)是依托互云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对警用装备进行统一管理、分析的信息化、智能化、规范化的系统。 智…

解密 JavaScript:降低逆向接口成本的实用技巧

### 一个简单的js加密代码示例 /* * 加密工具已经升级了一个版本,目前为 jsjiami.com.v6 ,主要加强了算法; * 已经打算把这个工具基础功能一直免费下去。还希望支持我。 * 另外 jsjiami.com.v6 已经强制加入校验,注释可以去掉,但…

污水磷资源回收工艺及海普树脂除杂

#污水磷资源回收工艺及海普树脂除杂 ​磷矿资源也是一种不可再生资源,目前磷矿产业仍在扩张,随着新能源行业磷酸铁锂电池的大范围应用,对磷的需求量仍在增加。基于污水中相对较高的磷负荷,从污泥焚烧灰分中回收磷显得十分有必要&a…

基于BS架构的饰品购物平台设计与实现(程序+文档+数据库)

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 一、研究背景…