Как импортировать матрицу отношений Excel в Neo4j? - PullRequest
0 голосов
/ 29 мая 2019

Я хочу импортировать файл Excel, который на самом деле представляет собой матрицу отношений nxn с несколькими типами отношений между n элементами.

id| name     | element1 | element2 | element3 ... n
1 | element1              1;2;3        1;5
2 | element2   1;2;3
3 | element3     1;5
...

Я сохранил Excel как CSV, что создает много пустых ячеек (пустые ячейки).

В Neo4j я попытался:

load csv with headers from 'file:///test.csv' as line
WITH line where not line.ID is null
merge (c:element{id: toInteger(line.id),name: line.name})

, в результате я не получаю никаких изменений и записей.

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Помимо ответа @ Raj (имена свойств чувствительны к регистру), ваш CSV-файл должен использовать один и тот же разделитель между всеми значениями.

Ваш CSV-файл (как показано в вашем вопросе) использует несовместимые разделители. Иногда он использует пробелы, а пробелы и вертикальные черты (|) в другое время. Это не будет работать, так как предложение LOAD CSV поддерживает только один тип разделителя. Кроме того, если вы не используете разделитель по умолчанию, запятую, то вам нужно использовать опцию FIELDTERMINATOR, чтобы указать, что это за разделитель.

Вот исправленная версия вашего CSV-файла, которая использует разделитель по умолчанию, запятую. Обратите внимание, что 2 соседние запятые используются для обозначения пропущенного значения. Если в строке отсутствует первое значение, первая запятая должна быть в начале этой строки. Кроме того, обратите внимание, что нет посторонних мест.

id,name,element1,element2,element3
1,element1,,1;2;3,1;5
2,element2,1;2;3
3,element3,1;5
0 голосов
/ 29 мая 2019

Имена свойств чувствительны к регистру в Neo4j Cypher.

В вашем файле есть столбец id, но вы проверяете where not line.ID is null. Это пропустит все строки, поскольку в вашем CSV-файле нет столбца ID.

Найдите ниже измененную версию вашего запроса для удобства чтения:

LOAD CSV WITH HEADERS FROM 'file:///test.csv' AS line
WITH line 
WHERE line.id IS NOT NULL
MERGE (c:element{id: toInteger(line.id),name: line.name})
...