![精通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=1739025276-Rl8TxP2GX089p2GdSXP5hZb5ynkqNiw7-0-95e15cf69174c9b8744eefb1137dc8b9)
上述例子仅仅用来读取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=1739025276-auV6qYkbomYzK0Cjcoc91kXFcRYjzQiB-0-c900dd6d1942fdf2f9af2dd6d0a01e62)
这样就可以读取网址指定的movie.csv文件。
或者可以使用本地文件路径:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P101_101385.jpg?sign=1739025276-UyXq16uMICtxdJVJHUOKyVbCiZzSdkMq-0-28e3813e5223201d99c4b7c143dcc8cd)
这样就可以读取到E:/products.csv文件。
如果把CSV文件放置在Neo4j系统路径的import文件夹内,则不需要指定CSV文件的路径,语句如下所示,可以读取到放入import文件夹内的products.csv文件。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P101_101386.jpg?sign=1739025276-2Crc17FzXetFoooORWQV1Idq4rEtiVXt-0-bd7a0db3c1a39215960846986121dfa4)
RETURN语句是用来返回并显示结果到结果显示区的语句。
LIMIT语句是用来限制返回的行数。
现在我们可以读取CSV文件了,但是数据并没有存入到数据库中。要将数据存入到Neo4j数
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_101387.jpg?sign=1739025276-5P0typgQMdyDH00NEWKUn8PwbQ1dHVcA-0-2cdf356cf3634727d3cc572f12248be2)
执行完上面语句后,会看到结果显示区显示了所创建的节点数量,如图2-95所示。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_85793.jpg?sign=1739025276-IrO2MilSmg9GkqpSn7NdVlHjZQnvVNJw-0-82e600422b5e4e060604006cb58094fc)
图2-95 显示区显示了所创建的节点数量
然后,用以下语句来查看数据库中是否已经有导入的数据:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_85807.jpg?sign=1739025276-ET8jhLK2Zm6WXOq3Yo53wTGXZVMz7KLy-0-fd31120f04683b8179209f9ed4cdd946)
运行上面语句后,可以得到如图2-96所示的结果。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_85810.jpg?sign=1739025276-9gX2yhCwxtt3d3nLY4ThFskbHcXlWIRJ-0-db527e898a91ffe9c4dc12e5c3b91213)
图2-96 查询导入后结果
如果我们的结果如上图所示,则说明数据已经导入成功了。
2.5.3.2 导入CSV时附带表头
下例介绍如何在导入CSV时附带上表头。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_101388.jpg?sign=1739025276-yTs1X8SsuqYPVBC3riXcL9zgPpieyzzT-0-2c86bac48f0300b45f3421c37340addb)
上述语句添加了WITH HEADERS子句,它的功能就是在导入CSV时附带上表头,这些表头可以通过line.Id、line.Track指定。执行完上述语句后,可以使用下面语句查看并确认:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_85839.jpg?sign=1739025276-aTPe98ZhsTYezhiHNMjxXrLYyRGfmIui-0-c885b85aaee99f5cbe3fe6c785c4741e)
将得到如图2-97所示的结果。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P103_85844.jpg?sign=1739025276-r8uwnjHLkzEEwkmtaGFEbT98dLMqwfOa-0-ba1abfd2a7868e5f26a2c4bcde2d0a6a)
图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=1739025276-khJnCb3qCmfaK6c3QuMcrwunuNxgE1Yr-0-5c650a8aaf01fc02c060263a3340a517)
我们可以通过如下语句改成每800行提交一次:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P103_101392.jpg?sign=1739025276-TdMeWSbSwOZbDdv1F8FHyJKYBePKYoJu-0-6bb36655d1374c2b64501dd7feaa051b)