|| apoc.import.json - APOC Core 文档 - Neo4j 文档

apoc.import.json

详细信息

语法

apoc.import.json(urlOrBinaryFile [, config ]) :: (file, source, format, nodes, relationships, properties, time, rows, batchSize, batches, done, data)

描述

从提供的 JSON 文件导入图。

输入参数

名称

类型

描述

urlOrBinaryFile

任意

用于导入数据的文件名或二进制数据。

config

映射

{ unwindBatchSize = 5000 :: INTEGER, txBatchSize = 5000 :: INTEGER, importIdName = "neo4jImportId" :: STRING, nodePropertyMappings = {} :: MAP, relPropertyMappings = {} :: MAP, compression = "NONE" :: ["NONE", "BYTES", "GZIP", "BZIP2", "DEFLATE", "BLOCK_LZ4", "FRAMED_SNAPPY”], cleanup = false :: BOOLEAN, nodePropFilter = {} :: MAP, relPropFilter = {} :: MAP }. 默认值为:{}

返回参数

名称

类型

描述

file

字符串

导入数据的文件名。

source

字符串

导入数据的来源:“file”、“binary”或“file/binary”。

format

字符串

文件格式:["csv", "graphml", "json"]。

nodes

整数

导入的节点数量。

relationships

整数

导入的关系数量。

properties

整数

导入的属性数量。

time

整数

导入的持续时间。

rows

整数

返回的行数。

batchSize

整数

导入运行时批处理的大小。

batches

整数

导入运行时批处理的数量。

done

布尔值

导入是否成功运行。

data

任意

导入返回的数据。

配置参数

此过程支持以下配置参数

配置参数
名称 类型 默认值 描述

unwindBatchSize

整数

5000

unwind 的批处理大小。

txBatchSize

整数

5000

事务的批处理大小。

importIdName

字符串

neo4jImportId

用于填充 json 中存在的 "id" 字段的属性名称。例如,一行 {"type":"node", "labels":["Language"], "id":"10"},当 importIdName 为:`foo` 时,将创建一个节点 (:User {foo: "10"})

nodePropertyMappings

映射

{}

自定义 Neo4j 类型(点日期)的映射标签/属性名/属性类型。即 { User: { born: 'Point', dateOfBirth: 'Datetime' } }

relPropertyMappings

映射

{}

自定义 Neo4j 类型(点日期)的映射关系类型/属性名/属性类型。即 { KNOWS: { since: 'Datetime' } }

compression

枚举[NONE, BYTES, GZIP, BZIP2, DEFLATE, BLOCK_LZ4, FRAMED_SNAPPY]

允许接收未压缩(值:NONE)或压缩(其他值)的二进制数据

cleanup

布尔值

false

如果存在,则删除 json 中存在的 "id" 字段。请注意,这样我们就无法导入关系,因为我们利用 "id" 字段连接节点。

nodePropFilter

MAP<STRING, LIST<STRING>>

{}

一个映射,以标签作为键,以在导入期间要过滤的属性键列表作为值。例如 { User: ['name', 'surname'], Another: ['foo']} 将跳过标签为 'User' 的节点的 'name' 和 'surname' 属性以及 (:Another) 节点的 'foo' 属性。
请注意,如果一个节点有多个标签,在此示例中为 (:User:Another {}),则两个标签的所有属性都将被过滤,即 'name'、'surname' 和 'foo'。
我们还可以传递一个键 _all 来过滤所有节点的属性,例如 {_all: ['myProp']}

relPropFilter

MAP<STRING, LIST<STRING>>

{}

一个映射,以关系类型作为键,以在导入期间要过滤的属性键列表作为值。例如 { MY_REL: ['foo', 'baz'] } 将跳过 '[:MY_REL]' 关系的 'foo' 和 'baz' 属性。
我们还可以传递一个键 _all 来过滤所有关系的属性,例如 {_all: ['myProp']}

nodePropertyMappingsrelPropertyMappings 支持以下 Neo4j 类型

  • 日期

  • 本地时间

  • 本地日期时间

  • 持续时间

  • 带时区时间

  • 带时区日期时间

使用示例

apoc.import.json 存储过程可用于导入通过 apoc.export.json.* 存储过程创建的 JSON 文件,这些文件使用配置参数 jsonFormat: 'JSON_LINES'(默认配置)导出。

all.json 包含 Neo4j 电影图的一个子集,由 apoc.export.json.all 生成。

all.json
{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}}
{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}}
{"type":"node","id":"2","labels":["User"],"properties":{"age":12}}
{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}},"end":{"id":"1","labels":["User"],"properties":{"name":"Jim","age":42}}}

我们可以使用 apoc.import.json 导入此文件。

CALL apoc.import.json("file:///all.json")
结果
| file               | source | format | nodes | relationships | properties | time | rows | batchSize | batches | done | data
| "file:///all.json" | "file" | "json" | 3     | 1             | 15         | 105  | 4    | -1        | 0       | TRUE | NULL

唯一性约束

为了避免导入重复值,所有导入的节点标签和关系类型都需要设置唯一性约束。如果缺少此约束,该过程将返回一条错误消息,提供关于缺失约束的信息以及创建该约束的命令。(因为此过程使用 WRITE 模式,所以它本身无法添加约束。)

示例 1. 在创建唯一性约束之前和之后导入 JSON 文件

文件 missingConstraint.json 包含以下内容

{"type":"node","id":"1","labels":["Test"],"properties":{"name":"A test name"}}

在没有约束的数据库上执行以下查询将抛出错误

CALL apoc.import.json("file:///missingConstraint.json")
错误信息
Failed to invoke procedure `apoc.import.json`: Caused by: java.lang.RuntimeException: Missing constraint required for import. Execute this query:
CREATE CONSTRAINT FOR (n:Test) REQUIRE n.neo4jImportId IS UNIQUE;

错误消息的最后一行提供了创建约束所需的语句

CREATE CONSTRAINT FOR (n:Test) REQUIRE n.neo4jImportId IS UNIQUE;

添加约束后,导入将成功运行

CALL apoc.import.json("file:///missingConstraint.json")
结果
| file                             | source | format | nodes | relationships | properties | time | rows | batchSize | batches | done | data
| "file:///missingConstraint.json" | "file" | "json" | 1     | 0             | 2          | 24   | 1    | -1        | 0       | TRUE | NULL

二进制文件

您还可以从二进制 byte[] 文件导入,可以是未压缩(默认值,配置为 {compression: NONE})或压缩文件(允许的压缩算法有:GZIPBZIP2DEFLATEBLOCK_LZ4FRAMED_SNAPPY)。也就是说

CALL apoc.import.json(`binaryFileNotCompressed`, {compression: 'NONE'})

CALL apoc.import.json(`binaryGzipByteArray`, {compression: 'GZIP'})

例如,这个与 apoc.util.compress 函数配合得很好

WITH apoc.util.compress('{"type":"node","id":"2","labels":["User"],"properties":{"age":12}}', {compression: 'DEFLATE'}) AS jsonCompressed
CALL apoc.import.json(jsonCompressed, {compression: 'DEFLATE'})
YIELD source, format, nodes, relationships, properties
RETURN source, format, nodes, relationships, properties
结果
| source | format | nodes | relationships | properties
| "binary" | "json" | 1     | 0             | 2
© . This site is unofficial and not affiliated with Neo4j, Inc.