Предложение CASE
не поддерживает встраивание других предложений Cypher (но может вызывать функции). На самом деле, предложение CASE
на самом деле не требуется для вашего варианта использования.
Этот запрос должен работать (:auto
в начале необходим в neo4j 4.0 +):
:auto USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:///test.csv' as line FIELDTERMINATOR ';'
WITH line
WHERE line.key <> 'NA'
MATCH (a:test_t {tid: line.pid})
UNWIND split(line.key, ',') as x
MERGE (k:test_key {key_term: TOLOWER(x)})
MERGE (a)-[:contains]->(k)
Этот запрос отфильтровывает все нежелательные line
с, как только они получены из файла. Хорошей практикой является сокращение количества строк данных, с которыми нужно работать как можно раньше.
Кроме того, у вас есть вторая проблема. Ваш файл данных не может использовать запятую как в качестве (по умолчанию) терминатора поля, так и в качестве разделителя между значениями x
.
Чтобы устранить эту неоднозначность, в приведенном выше запросе была выбрана опция FIELDTERMINATOR ';'
, чтобы указать что ";" символ будет использоваться как терминатор поля. Пример файла данных будет выглядеть следующим образом:
pid;key
123;NA
234;Foo,Bar
345;Bar,Baz
456;NA
567;Baz