apoc.load.csv
过程 Apoc 扩展
apoc.load.csv('urlOrBinary',{config}) YIELD lineNo, list, map - 以值流形式从 URL 加载 CSV,配置包含以下任何项:{skip:1,limit:5,header:false,sep:'TAB',ignore:['tmp'],nullValues:['na'],arraySep:';',mapping:{years:{type:'int',arraySep:'-',array:false,name:'age',ignore:false}}
签名
apoc.load.csv(urlOrBinary :: ANY?, config = {} :: MAP?) :: (lineNo :: INTEGER?, list :: LIST? OF ANY?, strings :: LIST? OF STRING?, map :: MAP?, stringMap :: MAP?)
配置参数
该过程支持以下配置参数
| 名称 (name) | type | 默认 | description(描述) |
|---|---|---|---|
skip |
boolean |
none |
跳过结果行 |
limit |
Long |
none |
限制结果行 |
header(标题行) |
布尔值 (boolean) |
true |
指示文件是否有标题行 |
sep(分隔符) |
字符串 |
',' |
分隔符字符或 'TAB' |
quoteChar(引号字符) |
字符串 |
'"' |
用于引用元素的字符 |
转义字符 (escapeChar) |
字符串 |
'\' |
用于转义元素的字符。如果不想使用任何字符,请使用 |
arraySep(数组分隔符) |
字符串 |
';' |
数组分隔符 |
ignore(忽略) |
List<String> |
[] |
要忽略的列 |
nullValues(空值) |
List<String> |
[] |
要视为 null 的值,例如 |
mapping(映射) |
Map |
{} |
逐字段映射,条目键为字段名,例如 |
compression |
|
|
允许读取二进制数据,可以是不压缩的(值: |
从文件读取
默认情况下,禁止从文件系统导入。我们可以通过在 apoc.conf 中设置以下属性来启用它
apoc.import.file.enabled=true
如果我们尝试在未先设置此属性的情况下使用任何导入过程,将会收到以下错误消息
Failed to invoke procedure: Caused by: java.lang.RuntimeException: Import from files not enabled, please set apoc.import.file.enabled=true in your apoc.conf |
导入文件从 import 目录读取,该目录由 server.directories.import 属性定义。这意味着我们提供的任何文件路径都是相对于此目录的。如果我们尝试从绝对路径(例如 /tmp/filename)读取,将会收到类似于以下的错误消息
Failed to invoke procedure: Caused by: java.lang.RuntimeException: Can’t read url or key file:/path/to/neo4j/import/tmp/filename as json: /path/to/neo4j//import/tmp/filename (No such file or directory) |
我们可以通过在 apoc.conf 中设置以下属性来启用从文件系统任意位置读取文件
apoc.import.file.use_neo4j_config=false
|
Neo4j 现在可以从文件系统的任何位置读取,因此在设置此属性之前,请确保这是您的意图。 |
使用示例
test.csv 包含人员及其属性
name,age,beverage Selma,9,Soda Rana,12,Tea;Milk Selina,19,Cola
我们将此文件放入 Neo4j 实例的 import 目录中。
我们可以通过运行以下查询来加载此文件并返回其内容
CALL apoc.load.csv('test.csv')
YIELD lineNo, map, list
RETURN *;
| 行号 | list | Map |
|---|---|---|
0 |
["Selma", "9", "Soda"] |
{name: "Selma", age: "9", beverage: "Soda"} |
1 |
["Rana", "12", "Tea;Milk"] |
{name: "Rana", age: "12", beverage: "Tea;Milk"} |
2 |
["Selina", "19", "Cola"] |
{name: "Selina", age: "19", beverage: "Cola"} |
二进制文件
您还可以从二进制 byte[](未压缩)或压缩文件中导入(允许的压缩算法有:GZIP、BZIP2、DEFLATE、BLOCK_LZ4、FRAMED_SNAPPY)。
CALL apoc.load.csv(`binaryGzipByteArray`, {compression: 'GZIP'})
或
CALL apoc.load.csv(`binaryFileNotCompressed`, {compression: 'NONE'})
| 行号 | list | Map |
|---|---|---|
0 |
["Selma", "8"] |
{name: "Selma", age: "8"} |
1 |
["Rana", "11"] |
{name: "Rana", age: "11"} |
2 |
["Selina", "18"] |
{name: "Selina", age: "18"} |