Code query


(Zainabjabeen26) #1

Neo4j Desktop 1.1.13
Neo4j 3.5.1
Neo4j Browser 3.1.14
code used:
LOAD CSV WITH HEADERS FROM
'C:\Users\Zainab\Desktop\dataset_clean1.csv' AS row
CREATE (:dataset{disease:row.disease, symptom:row.symptom,weight: toInt(row.patientweight)})
error arised:
Neo.ClientError.Statement.SyntaxError: Invalid input 's': expected four hexadecimal digits specifying a unicode character (line 2, column 6 (offset: 32))
"'C:\Users\Zainab\Desktop\dataset_clean1.csv' AS row" ^


(Ameyasoft) #2

Hi,

Use double quotes around file path string:

LOAD CSV WITH HEADERS FROM
"C:\Users\Zainab\Desktop\dataset_clean1.csv" AS row

-Kamal


(Zainabjabeen26) #3

actual error it shows is with the word Users in the file path string.
Invalid input 's': expected four hexadecimal digits specifying a unicode character (line 2, column 6 (offset: 32))


(Ameyasoft) #4

Hi,

Sorry I didn't catch another point: Here is the correct one:
"file:C:/Users/Zainab/Desktop/dataset_clean1.csv"

Use file: and forward slash.

Try this.

It would be better create a 'import' folder (name all lower case) in
C:\Neo4jDesktop\neo4jDatabases\database-xxxx\installation-3.5.0 (modify the path according to your installation directory)
and copy your .csv file into 'import' folder. Then it will be much simpler to refer.

"file:/dataset_clean1.csv"

-Kamal


(Zainabjabeen26) #5

yup, noticed and corrected it.


(Zainabjabeen26) #6

i have one more doubt,i have 2 csv files, one file has to be predefined and using that predefined csv file, other csv file has to be used.
how can i do it


(Ameyasoft) #7

Two files : customers.csv (id, name) and orders.csv (customerid, orderid)

1:

//Load customers......
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:/customers.csv" As line
WITH line

CREATE (c:Customer {id:toInteger(line.id), name:line.name}) ;

2:

//Load orders...............
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:/orders.csv" As line
WITH line

//create order node......
CREATE (o:Order {customerid:toInteger(line.customerid), ordid:toInteger(line.orderid)})
WITH line, o

//MATCH Customer node with id = line.customerid..............
MATCH (c:Customer {id:toInteger(line.customerid)})

//Create relationship.......
MERGE (c)-[:ORDERS]->(o)

;

You can follow this logic in your imports.
Check this blog:
https://neo4j.com/graphgist/800a57b2-bbd1-40d3-9dee-a00c4ef624e6

-Kamal


(Zainabjabeen26) #8

can both files be implemented at a single stretch


(Ameyasoft) #9

Yes. Like this

//Load customers......
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:/customers.csv" As line
WITH line

CREATE (c:Customer {id:toInteger(line.id), name:line.name}) ;

//Load orders...............
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:/orders.csv" As line
WITH line

//create order node......
CREATE (o:Order {customerid:toInteger(line.customerid), ordid:toInteger(line.orderid)})
WITH line, o

//MATCH Customer node with id = line.customerid..............
MATCH (c:Customer {id:toInteger(line.customerid)})

//Create relationship.......
MERGE (c)-[:ORDERS]->(o)

;

Make sure that you end each Load CSV with semicolon (;) .

-Kamal