![精通Neo4j](https://wfqqreader-1252317822.image.myqcloud.com/cover/113/47216113/b_47216113.jpg)
2.5.3 使用Load CSV指令导入到Neo4j
Neo4j提供了Load CSV命令帮助我们将CSV数据文件导入到Neo4j中,下面给出几个读取CSV文件但不存入数据库的例子。
2.5.3.1 简单导入CSV数据
以下将使用Load CSV指令读取但不存入数据库:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P101_101383.jpg?sign=1738852492-ru6EqqUYjk9hvO51jVGs6cSWmrmnq5EM-0-dcd8962a67bf4a8935ecfa0951a1c072)
上述例子仅仅用来读取CSV文件,并没有将数据存入到数据库中。下面介绍Load CSV的用法。
LOAD CSV FROM "file-url" AS line,这条指令将指定路径下的CSV文件读取出来,其中file-url是文件的地址,可以是本地文件路径也可以是网址,只要能从地址中读取到CSV文件即可,因此也可以这样写:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P101_101384.jpg?sign=1738852492-rcbGC1r14evQ4VLqxKaPavrEQL1vg521-0-efa970cc476ed20fe5fb691b2150add8)
这样就可以读取网址指定的movie.csv文件。
或者可以使用本地文件路径:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P101_101385.jpg?sign=1738852492-LSG7O8YQyVIEzxtAbl9dPb39WmeDaLB3-0-1a295507b15998f89b4c5cfa308ae3dd)
这样就可以读取到E:/products.csv文件。
如果把CSV文件放置在Neo4j系统路径的import文件夹内,则不需要指定CSV文件的路径,语句如下所示,可以读取到放入import文件夹内的products.csv文件。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P101_101386.jpg?sign=1738852492-Sq4t4K4CaCgRznbpp4jGTuQwmhwPwc4W-0-2ea5a74783c2b91116b4b70c41215b8c)
RETURN语句是用来返回并显示结果到结果显示区的语句。
LIMIT语句是用来限制返回的行数。
现在我们可以读取CSV文件了,但是数据并没有存入到数据库中。要将数据存入到Neo4j数
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_101387.jpg?sign=1738852492-LVgkZZN0u1XKYrADj09Ec3Dc45tYTbhN-0-8a3939b7948d866c9c8f836993a8d169)
执行完上面语句后,会看到结果显示区显示了所创建的节点数量,如图2-95所示。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_85793.jpg?sign=1738852492-TCL3WVgPUJ6TUnxL4YwhQ3iYROHX18Y3-0-79a13a04dd15ffa732b5938a2ad3afab)
图2-95 显示区显示了所创建的节点数量
然后,用以下语句来查看数据库中是否已经有导入的数据:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_85807.jpg?sign=1738852492-xTA17P6RSa7bQ8HEWEakGLalyAxZ2QpI-0-3ed94f5203b386829856e2535345b241)
运行上面语句后,可以得到如图2-96所示的结果。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_85810.jpg?sign=1738852492-COtcEoteWqytXxCyhOWsoDTBZImFJPWK-0-60594de400fd6558d8d776bf7287f4cf)
图2-96 查询导入后结果
如果我们的结果如上图所示,则说明数据已经导入成功了。
2.5.3.2 导入CSV时附带表头
下例介绍如何在导入CSV时附带上表头。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_101388.jpg?sign=1738852492-wxpvfS6KCxoIJvpAMOh2pqvJut5REdLg-0-9ddf3de6dc9edc39eb089c5f138526db)
上述语句添加了WITH HEADERS子句,它的功能就是在导入CSV时附带上表头,这些表头可以通过line.Id、line.Track指定。执行完上述语句后,可以使用下面语句查看并确认:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_85839.jpg?sign=1738852492-Uv81OgqVC53LdeXNindJ01Zid64pdqp0-0-a7e305e6b520c291023b529ba3938cab)
将得到如图2-97所示的结果。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P103_85844.jpg?sign=1738852492-An4kYsR20JzupBjPeRrRUud04gWw7IUP-0-0bbe3cb5b881b372478297846e1a1e18)
图2-97 查询导入后的结果
可以看到,每个数据元素都带有TrackId、Name、Length头部元素。
2.5.3.3 导入CSV大文件
如果要导入包含大量数据的CSV文件,则可以使用PERODIC COMMIT子句。
使用PERIODIC COMMIT可以指示Neo4j在执行完一定行数后提交数据再继续,这样就能够减少内存开销。
PERIODIC COMMIT的默认值为1000行,因此数据将每一千行提交一次。
如果要使用PERIODIC COMMIT,只需要在LOAD CSV语句之前插入USING PERIODIC COMMIT语句。
具体使用方法如下:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P103_101391.jpg?sign=1738852492-2LkZzs3ZurOL5ruv44opt4gHg9YiwZcM-0-44cbfa34c6aa2f7d050f181ecbd693c3)
我们可以通过如下语句改成每800行提交一次:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P103_101392.jpg?sign=1738852492-DF8KGE4uqhEzIzZYbyiZnEAEWBQzVUlj-0-48396b0286524d695a788081238ba605)