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=1738943947-1VvCVuFLV3uXE51232S7Fxn8RWBrNxNk-0-304e1ad4879bca094afe9b0140a5672f)
上述例子仅仅用来读取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=1738943947-vYFwOlgMIqBA6PYzpOCnBkJCHQ69Vk8d-0-0dd90a3423638868c3aca5f005e4d713)
这样就可以读取网址指定的movie.csv文件。
或者可以使用本地文件路径:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P101_101385.jpg?sign=1738943947-hQ1WXwTZhIO6lFdHCEJNn9xRZLWyYR4y-0-d14b89cd9b42ea02755f79b4b5ca2422)
这样就可以读取到E:/products.csv文件。
如果把CSV文件放置在Neo4j系统路径的import文件夹内,则不需要指定CSV文件的路径,语句如下所示,可以读取到放入import文件夹内的products.csv文件。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P101_101386.jpg?sign=1738943947-YUfg6A8Sp02QGILS9WpLfKZ52eJA6LXe-0-06c4334272e1bfdfbf22960bdbd8899a)
RETURN语句是用来返回并显示结果到结果显示区的语句。
LIMIT语句是用来限制返回的行数。
现在我们可以读取CSV文件了,但是数据并没有存入到数据库中。要将数据存入到Neo4j数
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_101387.jpg?sign=1738943947-anyLIN2xcGIYmqP6AwEPeFKksTAeqSiY-0-89c8a6c7c125660fa926a64adedff1fd)
执行完上面语句后,会看到结果显示区显示了所创建的节点数量,如图2-95所示。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_85793.jpg?sign=1738943947-Unp7rRG5zhQj3eVSd4A5hV0IOe75opC0-0-f7be96d3b00fc9efe5259d26b8f3063f)
图2-95 显示区显示了所创建的节点数量
然后,用以下语句来查看数据库中是否已经有导入的数据:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_85807.jpg?sign=1738943947-zeA3c4Dx4sHnD2XmhnZXdWKjVPFqfl65-0-738069bb723ac595ee984fd040a57117)
运行上面语句后,可以得到如图2-96所示的结果。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_85810.jpg?sign=1738943947-ijwvnuOuVjFSNpNBaqr85XOlNGrDExO4-0-eeb0c3d83decd1e5b1615f7b40cd947a)
图2-96 查询导入后结果
如果我们的结果如上图所示,则说明数据已经导入成功了。
2.5.3.2 导入CSV时附带表头
下例介绍如何在导入CSV时附带上表头。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_101388.jpg?sign=1738943947-jYT9zNdfQrCGuXxMwba2gvTaABGoLIZw-0-874a9ecb3f368a2350f6b589dc2efe1f)
上述语句添加了WITH HEADERS子句,它的功能就是在导入CSV时附带上表头,这些表头可以通过line.Id、line.Track指定。执行完上述语句后,可以使用下面语句查看并确认:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P102_85839.jpg?sign=1738943947-z5ykaHhyygBddo4r4iyWJP0Mzvzykc7N-0-972b655e7cda7bcd2675ba10e300e4e9)
将得到如图2-97所示的结果。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P103_85844.jpg?sign=1738943947-zzuOM1epbMrptRLkDWLGy4PnGVMzurxv-0-7a2b62e98ec3546d34c4914cce6e9136)
图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=1738943947-lTO8IM6FM2c8n3LCW8NTPbyFdtfYMIlw-0-6dfa1ddc521f0aa61904e23aba829ae2)
我们可以通过如下语句改成每800行提交一次:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P103_101392.jpg?sign=1738943947-7MhPbxHfpcj4d5nLeZUnvUWBJfEqzrC0-0-3a51a1882dffa428ef92b39c3fb9cca9)