Neo4j - "CALL apoc.periodic.iterate ('" - ошибка - PullRequest
0 голосов
/ 08 ноября 2019

Этот код загружается нормально, но занял какое-то время, поэтому я решил использовать периодическую загрузку apoc. Я добавил CALL apoc.periodic.iterate(' в начало и ',{batchSize:10000, iterateList:true, parallel:true}) в конец. Но у меня возникают проблемы с ошибкой.

// URL ONLY
CALL apoc.periodic.iterate('
                    LOAD CSV WITH HEADERS FROM ("file:///sessions/4_hour_parsed_and_ready.csv") AS row
                    MERGE (a:Sender { name: row.From, domain: row.Sender_Sub_Fld})
                    MERGE (b:Link { name: row.Url_Sub_Fld, topLevelDomain: row.Url_Tld, htmlEncodedMessage: row.HTML_Encoded})
                    MERGE (c:Recipient { name: row.To})
                    WITH a,b,c,row
                    WHERE row.FileName = "false" AND NOT row.Url_Tld = "false"
                    CALL apoc.merge.relationship(a, row.Outcome, {}, {}, b) YIELD rel as rel1
                    CALL apoc.merge.relationship(b, row.Outcome2, {}, {}, c) YIELD rel as rel2
                    RETURN a,b,c
                    ',{batchSize:10000, iterateList:true, parallel:true})

Я сталкиваюсь с ошибкой:

Neo.ClientError.Statement.SyntaxError: Procedure call does not provide the required number of arguments: got 2 expected 3.

Procedure apoc.periodic.iterate has signature: apoc.periodic.iterate(cypherIterate :: STRING?, cypherAction :: STRING?, config :: MAP?) :: batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, wasTerminated :: BOOLEAN?, failedParams :: MAP? meaning that it expects 3 arguments of type STRING?, STRING?, MAP? Description: apoc.periodic.iterate('statement returning items', 'statement per item', {batchSize:1000,iterateList:true,parallel:false,params:{},concurrency:50,retries:0}) YIELD batches, total - run the second statement for each item returned by the first statement. Returns number of batches and total processed rows (line 2, column 1 (offset: 12)) "CALL apoc.periodic.iterate('" ^

1 Ответ

1 голос
/ 08 ноября 2019

Как показывает ошибка, apoc.periodic.iterate принимает 2 оператора Cypher (плюс параметры конфигурации). Вы предоставляете только 1 заявление. Подробнее читайте в документации.

Однако вы должны знать, что LOAD CSV поддерживает пакетирование транзакций через USING PERIODIC COMMIT. Таким образом, вместо выполнения запроса в пределах apoc.periodic.iterate, вы можете попытаться добавить USING PERIODIC COMMIT 10000 к предложению LOAD CSV.

Кстати, раздел пакетная транзакция в документах также показан один из способов использования apoc.periodic.iterate.

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