一、CSV文件
-
CSV文件是一种逗号分隔值文件格式的纯文本文件(Comma-Seperated Values),现在不仅可以用逗号分隔,也可以用分号、制表符、空格等作为分隔符。
-
CSV文件的每一行是一条记录,每条记录以CRLF(换行符)结尾,最后一行可以没有CRLF;可以有header,即第一行为与下文常规记录数量一致的记录;可以用双引号也可以不用,但如果双引号为记录内容,则需要加双引号转义。
-
CSV文件产生于数据从一个存储系统传递到另一个存储系统的过程中。
-
基本上所有电子表格应用例如EXCEL等,都能够导入CSV文件,数据导入后以分隔符为单位被安排在电子表格的每个单元中。
-
csv文件能够通过可以打开它的应用程序转换为各种不同文件格式,例如:EXCEL可以将CSV打开后存储为XLS、XLSX、PDF、TXT、XML和HTML文件格式;其他在线服务应用也提供将CSV导出为HTML、ODS和RTF文件格式。
参考:https://docs.fileformat.com/spreadsheet/csv/
二、导入CSV文件的方法
- 导入方法的选择取决于数据集的大小。
- 各种方法对比:
方法描述 | 适用数据集 | neo4j配置 | 特点 |
---|---|---|---|
Cypher 命令:LOAD CSV | 中小型数据集(≤10 million records) | 适用所有neo4j 设置,包括AuraDB | 支持URI加载或提取CSV数据; 可直接将导入数据映射为图结构; 可处理数据转换; 支持复杂计算; 可创建、合并实体、关系和结构。 |
neo4j-admin bulk import工具 | 大型数据集 | 适用于neo4j Desktop,neo4j EE Doker | |
kettle import工具 | 超大型数据集 |
2.1 Cypher命令:LOAD CSV
2.1.1 导入本地CSV文件
方法:使用“file:///”
☆注意:由于AuraDB基于云,该方法不适用。
☆前提:出于安全考虑,neo4j默认设置本地文件仅能从neo4j import directory读取(该文件夹地址随OS不同而不同,具体查询neo4j文档),即:setting中默认设置dbms.directories.import=import。
A.读取import directory文件夹下CSV文件
基于以上前提,本方法实现步骤如下:
(1)第一步:将本地CSV文件放入neo4j默认的“导入”目录文件夹(import directiory)下,改文件夹位置在:
File type | Description | Linux/macOS/Docker | Windows | Debian/RPM | neo4j desktop |
---|---|---|---|---|---|
Import | All CSV files that the command LOAD CSV uses as sources to import data in Neo4j. | <neoj-home>/import | <neo4j-home>/import | /var/lib/neo4j/import | From the Open dropdown menu of your Neo4j instance, select Terminal, and navigate to </import |
来自:https://neo4j.com/developer/guide-import-csv/
注:针对neo4j desktop,可以直接在界面中点击当前project的“open folder”,直接打开import directiory,如下图所示:
(2)第二步:使用 LOAD CSV FROM "file:///XXX.csv”
- 这里的XXX为import目录文件夹下CSV文件的位置;
- 如果数据有表头,使用LOAD CSV WITH HEADERS FROM “file:///XXX.csv”。
B. 读取本地任意路径CSV文件
如果想读取不在import directory中的CSV,则:
(1)第一步: 先改变neo4j默认设置,即:删除dbms.directories.import=import或者在该语句前加“#”;
(2)第二步: 此时可使用 “LOAD CSV FROM file:///C:/XXX/name.csv”(即:file:///+绝对路径), 导入本地CSV文件 。
C.使用LOAD CSV时,CSV文件须满足以下要求
(1)字符使用UTF-8编码;
(2)字段终止符默认为“,”,也可使用LOAD CSV提供的FIELDTERMINATOR进行修改;
(3)允许有带引号的字符串,但在读取后引号被丢弃;如果设置dbms.import.csv.legacy_quote_escaping为默认值true,则可使用\作为转义符;也可使用两个双引号,第一个双引号用作转义。
D. LOAD CSV的使用之其他
- 读取带表头的CSV文件: LOAD CSV WITH HEADERS FROM …
- 读取非逗号为分隔符的CSV文件: LOAD CSV FROM xxx FIELDTERMINATOR ‘分隔符’。 例如:读取以分号为分隔符的CSV:
LOAD CSV FROM "file:///XXX.csv" FIELDTERMINATOR ';'
。 - 返回读取的CSV文件的当前行:
LOAD CSV FROM "file:///XXX.csv" AS line
RETURN linenumber() AS number, line
- 返回读取的CSV文件的绝对路径:
LOAD CSV FROM "file:///XXX.csv" AS line
RETURN DISTINCT file() AS path
2.1.2 导入远程CSV文件
A. 文件托管在网站上,则,通过URL链接可导入文件,例如:
LOAD CSV FROM 'http://data.neo4j.com/northwind/products.csv' AS row
RETURN row
☆注意:该文件需能够被访问,即:是空开的。
B. 文件被上传到Google sheet, 详见:https://neo4j.com/developer/kb/import-csv-locations/。
C. 访问github数据,详见:https://neo4j.com/developer/kb/import-csv-locations/。
2.1.3 Tips
(1)读取的CSV数据均为字符串,如有需要,需使用toInteger()、toFloat()、split()等转换数值;
(2)labels、property names、relationship-types等区分大小写,需注意。
(3)数据越干净,导入越容易。尽量在导入数据前对数据进行复杂的清洗和处理操作。