apoc.import.json
Syntax |
|
||
Description |
Imports a graph from the provided JSON file. |
||
Input arguments |
Name |
Type |
Description |
|
|
The name of the file or binary data to import the data from. |
|
|
|
|
|
Return arguments |
Name |
Type |
Description |
|
|
The name of the file from which the data was imported. |
|
|
|
The source of the imported data: "file", "binary" or "file/binary". |
|
|
|
The format of the file: ["csv", "graphml", "json"]. |
|
|
|
The number of imported nodes. |
|
|
|
The number of imported relationships. |
|
|
|
The number of imported properties. |
|
|
|
The duration of the import. |
|
|
|
The number of rows returned. |
|
|
|
The size of the batches the import was run in. |
|
|
|
The number of batches the import was run in. |
|
|
|
Whether the import ran successfully. |
|
|
|
The data returned by the import. |
Config parameters
This procedure supports the following config parameters:
Name | Type | Default | Description |
---|---|---|---|
|
|
|
The batch size of the unwind. |
|
|
|
The batch size of the transaction. |
|
|
|
The name of the property to be populated with the "id" field present into the json. For example a row |
|
|
|
The mapping label/property name/property type for Custom Neo4j types (point date). I.e. { User: { born: 'Point', dateOfBirth: 'Datetime' } } |
|
|
|
The mapping rel type/property name/property type for Custom Neo4j types (point date). I.e. { KNOWS: { since: 'Datetime' } } |
|
|
|
Allow taking binary data, either not compressed (value: |
|
|
false |
To remove the "id" field present into the json, if present. Note that in this way we cannot import relationship, because we leverage on "id" field to connect the nodes. |
|
|
|
A map with the labels as keys, and the list of property keys to filter during the import as values.
For example |
|
|
|
A map with the relationship types as keys, and the list of property keys to filter during the import as values.
For example |
nodePropertyMappings
and relPropertyMappings
support the following Neo4j types:
-
POINT
-
DATE
-
LOCAL TIME
-
LOCAL DATETIME
-
DURATION
-
ZONED TIME
-
ZONED DATETIME
Usage Examples
The apoc.import.json
procedure can be used to import JSON files created by the apoc.export.json.*
procedures, exported using the config parameter jsonFormat: 'JSON_LINES'
(default config).
all.json
contains a subset of Neo4j’s movies graph, and was generated by apoc.export.json.all.
{"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}}}
We can import this file using 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
Uniqueness Constraints
In order to avoid duplicate imported values, a uniqueness constraint is required on all imported node labels and relationship types.
If this constraint is missing, the procedure will return an error message providing both information about the missing constraint and the command that will create it.
(Because this procedure uses WRITE
mode it cannot itself add constraints.)
The file missingConstraint.json
contains the following:
{"type":"node","id":"1","labels":["Test"],"properties":{"name":"A test name"}}
Executing the following query on a database with no constraints will throw an error:
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;
The last line of the error message provides the necessary statement to create the constraint:
CREATE CONSTRAINT FOR (n:Test) REQUIRE n.neo4jImportId IS UNIQUE;
After adding the constraint, the import will run successfully:
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
Binary file
You can also import a file from a binary byte[]
not compressed (default value, with config {compression: NONE
})
or a compressed file (allowed compression algos are: GZIP
, BZIP2
, DEFLATE
, BLOCK_LZ4
, FRAMED_SNAPPY
). That is:
CALL apoc.import.json(`binaryFileNotCompressed`, {compression: 'NONE'})
or:
CALL apoc.import.json(`binaryGzipByteArray`, {compression: 'GZIP'})
For example, this one works well with apoc.util.compress function:
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