Итерация по CSV-файлу и запрос значений свойств - Cypher Neo4j - PullRequest
0 голосов
/ 22 января 2019

Пожалуйста, смотрите изображение файла CSV. Я работаю с Cypher, Neo4j. Как вы можете видеть действия с их отметкой времени, все относятся к case_id соответственно. Многие из них принадлежат одному и тому же case_id (здесь вы видите case_id 3, 2, 1), но, пожалуйста, представьте, что есть еще много других. Я хочу сгруппировать действия, которые принадлежат одному и тому же идентификатору, и выполнять то же самое! запрос по каждой из групп (группировка имеет важное значение).

Есть ли способ сделать это, кроме как переписать один и тот же запрос для каждой группы, как это сделано здесь в три этапа?:

1

USING PERIODIC COMMIT 1000

LOAD CSV WITH HEADERS FROM "file:///XY" AS row

WITH toInteger(row.case_id) AS cid, row

WHERE cid=3

CREATE (act:Activity {caseId: cid, activityName: row.activity, time: row.timestamp})

'QUERY'

2.

LOAD CSV WITH HEADERS FROM "file:///XY" AS row

WITH toInteger(row.case_id) AS cid, row

WHERE cid=2

CREATE (act:Activity {caseId: cid, activityName: row.activity, time: row.timestamp})

'QUERY'

3.

LOAD CSV WITH HEADERS FROM "file:///XY" AS row

WITH toInteger(row.case_id) AS cid, row

WHERE cid=1

CREATE (act:Activity {caseId: cid, activityName: row.activity, time: 
row.timestamp})

'QUERY'

Так что, в основном, я хочу обобщить WHERE cid=3(or 2 or 1) в смысле итерации по всем различным идентификаторам случаев без явного присвоения им имен. Немного похоже на Java for each element in array (array content: group by case_id) do QUERY.

Есть идеи как?

Заранее спасибо, и я буду рад предоставить более подробное описание, если это звучит слишком загадочно.

Обновление: Вот запрос:

MATCH(act: Activity)
WHERE act.caseId = 1 //and here I want to be able to simplify for EVERY caseId
WITH act ORDER BY act.time ASC 
WITH apoc.coll.frequencies(apoc.coll.pairsMin(COLLECT(act.activityName))) AS g
UNWIND g AS p
RETURN*

enter image description here

1 Ответ

0 голосов
/ 22 января 2019

Мне кажется, что один запрос LOAD CSV должен обработать это, просто установите caseId на целочисленное значение row.case_id:

USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///XY" AS row
WITH toInteger(row.case_id) AS cid, row
CREATE (act:Activity {caseId: cid, activityName: row.activity, time: row.timestamp})

Хорошо, я вижу, что вы хотите выполнить какой-то запросс каждой группой.Не могли бы вы объяснить, почему выполнение запроса после создания в загрузочном csv не будет работать?

Будет ли выполнять запрос после импорта для вас?

Было бы полезно получить дополнительную информацию о запросе, который вы намереваетесь выполнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...