Assuming a sample data of this kind,
Col1 = ABS, Col2 = White, Col3 = Yes, Col4 = , Col5 = Blue, Col6 = No, Col7 = Yellow, Col8 = , Col9 = Unknown
Here Col4 and Col8 are blank. I created a test84.csv file that reflects the above data.
Here is query to import this data:
LOAD CSV WITH HEADERS FROM "file:/test84.csv" As line
WITH line
//Node1 Col1, Col2, Col3 ( no null values)
FOREACH(ignoreMe IN CASE WHEN line.Col1 IS NOT NULL THEN [1] ELSE END |
FOREACH(ignoreMe IN CASE WHEN line.Col2 IS NULL AND line.Col3 IS NULL THEN [1] ELSE [] END |
MERGE (a:Col1 {prop1: 0, prop2: 0})
)
FOREACH(ignoreMe IN CASE WHEN line.Col2 IS NOT NULL AND line.Col3 IS NOT NULL THEN [1] ELSE [] END |
MERGE (a:Col1 {prop1: line.Col2, prop2: line.Col3})
)
FOREACH(ignoreMe IN CASE WHEN line.Col2 IS NOT NULL AND line.Col3 IS NULL THEN [1] ELSE [] END |
MERGE (a:Col1 {prop1: line.Col2, prop2: 0})
)
FOREACH(ignoreMe IN CASE WHEN line.Col2 IS NULL AND line.Col3 IS NOT NULL THEN [1] ELSE [] END |
MERGE (a:Col1 {prop1: 0, prop2: line.Col3})
)
)
//Node2 Col4, Col5, Col6 (Col4 is null)
FOREACH(ignoreMe IN CASE WHEN line.Col4 IS NOT NULL THEN [1] ELSE END |
FOREACH(ignoreMe IN CASE WHEN line.Col5 IS NULL AND line.Col6 IS NULL THEN [1] ELSE [] END |
MERGE (b:Col4 {prop1: 0, prop2: 0})
)
FOREACH(ignoreMe IN CASE WHEN line.Col5 IS NOT NULL AND line.Col6 IS NOT NULL THEN [1] ELSE [] END |
MERGE (b:Col4 {prop1: line.Col5, prop2: line.Col6})
)
FOREACH(ignoreMe IN CASE WHEN line.Col5 IS NOT NULL AND line.Col6 IS NULL THEN [1] ELSE [] END |
MERGE (b:Col4 {prop1: line.Col5, prop2: 0})
)
FOREACH(ignoreMe IN CASE WHEN line.Col5 IS NULL AND line.Col6 IS NOT NULL THEN [1] ELSE [] END |
MERGE (b:Col4 {prop1: 0, prop2: line.Col6})
)
)
//Node3 Col7, Col8, Col9 (Col8 is null)
FOREACH(ignoreMe IN CASE WHEN line.Col7 IS NOT NULL THEN [1] ELSE END |
FOREACH(ignoreMe IN CASE WHEN line.Col8 IS NULL AND line.Col9 IS NULL THEN [1] ELSE [] END |
MERGE (c:Col7 {prop1: 0, prop2: 0})
)
FOREACH(ignoreMe IN CASE WHEN line.Col8 IS NOT NULL AND line.Col9 IS NOT NULL THEN [1] ELSE [] END |
MERGE (c:Col7 {prop1: line.Col8, prop2: line.Col9})
)
FOREACH(ignoreMe IN CASE WHEN line.Col8 IS NOT NULL AND line.Col9 IS NULL THEN [1] ELSE [] END |
MERGE (c:Col7 {prop1: line.Col8, prop2: 0})
)
FOREACH(ignoreMe IN CASE WHEN line.Col8 IS NULL AND line.Col9 IS NOT NULL THEN [1] ELSE [] END |
MERGE (c:Col7 {prop1: 0, prop2: line.Col9})
)
);
Here is result:
You have to create a block of FOR EACH for every node you create. That's the only drawback. I had a similar situation and this method worked for me.