Properly escaping input data for neo4j-import
neo4j-import is intended to populate a new, empty database.
It cannot be used to import into an existing database.
|
When importing data using neo4j-import
, make sure to review the required CSV file structure and considerations before moving on.
Escaping commas within the CSV:
This applies to escaping any delimiter you use in place of a comma, if specified. Neo4j only supports single character delimiters. |
Consider the following string: Use the force, Luke!
If you want import this field to into neo4j from a CSV file, you must escape that comma.
The standard way to do this is to simply wrap quotes around the field.
neo4j-import
will know that everything within un-escaped quotes belongs to the same field.
CSV file:
:ID,:LABEL,movie,line
1,Movie,Star Wars,"Use the force, Luke!"
$ neo4j-import --into data/graph.db.1 --nodes simple_escape_test.csv
neo4j> match (n:Movie) return n.line;
+------------------------+
| n.line |
+------------------------+
| "Use the force, Luke!" |
+------------------------+
1 row
Now, what if we want to include multiple lines in an array for a single movie node?
Escaping the array delimiter within the CSV:
Consider the following array: {[Use the force, Luke!], [Help me, Obi-Wan Kenobi; you’re my only hope.]}
If you want import this array into a node property in neo4j from a CSV file, you must choose a single character delimiter that cannot exist within the array. The default is the semi-colon character. However, that won’t work in our example! We can easily substitute something like a pipe (|) character, but if you may have these in the data, you will need to find something more obscure, such as §.
:ID,:LABEL,movie,lines:string[]
1,Movie,Star Wars,"Use the force, Luke!§Help me, Obi-Wan Kenobi; you're my only hope."
neo4j> match (n:Movie) return n;
+-----------------------------------------------------------------------------------------------------------+
| n |
+-----------------------------------------------------------------------------------------------------------+
| Node[0]{movie:"Star Wars",lines:["Use the force, Luke!","Help me, Obi-Wan Kenobi; you're my only hope."]} |
+-----------------------------------------------------------------------------------------------------------+
1 row
The header for a string array column needs to have :string[] , which is case sensitive.
|
Was this page helpful?