Как мне преобразовать эту нагрузку neo4j Cypher/Apoc в импорт neo4j-admin?

Я работаю с данными электронной почты и анализирую их с помощью python, который создает csv каждый час. С этим csv у меня есть 5 отдельных load csv commands для создания/обновления узлов и отношений. Это NO ATTACHMENT OR LINK, URL ONLY, ATTACHMENT ONLY, URL AND ATTACHMENT и Attachment to Attachment Name, FileName Node.

Я хотел бы автоматически импортировать их через пакетное задание. Из-за моего знакомства я хотел просто сделать это на питоне, но я искал стек и другие места, и люди рекомендуют neo4j-admin import. Судя по документации, это сильно отличается от того, что я делал с --nodes и --relationships. Может ли кто-нибудь помочь мне показать, как преобразовать пример CYPHER/APOC LOAD CSV, который я создал ниже, в noe4j-admin import?

// URL AND ATTACHMENT
USING PERIODIC COMMIT 1000
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:Attachment { name: row.FileHash, fileExtension: row.FileName_Ext, containsMultipleExtensions: row.MultipleExtensions})
MERGE (d:Recipient { name: row.To})
WITH a,b,c,d,row
WHERE NOT row.Url_Tld = "false" AND NOT row.FileHash = "false"
CALL apoc.merge.relationship(a, row.Outcome, {}, {}, b) YIELD rel as rel1
CALL apoc.merge.relationship(b, row.Outcome2, {}, {}, d) YIELD rel as rel2
CALL apoc.merge.relationship(a, row.Outcome, {}, {}, c) YIELD rel as rel3
CALL apoc.merge.relationship(c, row.Outcome2, {}, {}, d) YIELD rel as rel4
RETURN a,b,c,d

Или как я могу обернуть этот код в py2neo.


person sectechguy    schedule 03.12.2019    source источник
comment
Вы используете импорт neo4j-admin для первоначальной разовой загрузки данных. Похоже, вы хотите обновить дельта-данные? Не могли бы вы подтвердить   -  person Lju    schedule 04.12.2019
comment
Да, я бы начал с первого часа данных, которые я выберу. Скажем, 0 сотен часов и импорт. Потом следующий час снова бег. Где оператор слияния будет создавать новые узлы и отношения только в том случае, если они ранее не существовали. Например, эти данные являются только внешними по отношению к внутренним, поэтому, если новый сотрудник получает электронную почту или если новый отправитель отправляет входящую электронную почту. @Лью   -  person sectechguy    schedule 04.12.2019
comment
Итак, вы делаете периодические обновления. В этой ситуации импорт neo4j-admin использовать нельзя. Вам нужно будет добавить данные либо с помощью вашего подхода LOAD CSV, либо, возможно, с помощью драйверов. Если вы выполняете однократную начальную загрузку большого набора данных, то импорт neo4j-admin будет полезен.   -  person Lju    schedule 04.12.2019


Ответы (1)


Я только что создал функцию, которая содержит информацию о подключении к серверу, и завернул все в запрос py2neo, а затем выполнил ее.

import py_2_neo_pass
from py_2_neo_pass import db_server, db_user, db_password
from py2neo import Graph, Node, Relationship

graph = Graph(ip_addr = db_server, username = db_user, password = db_password)

query='''
USING PERIODIC COMMIT 1000
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:Attachment { name: row.FileHash, fileExtension: row.FileName_Ext, containsMultipleExtensions: row.MultipleExtensions})
MERGE (d:Recipient { name: row.To})
WITH a,b,c,d,row
WHERE NOT row.Url_Tld = "false" AND NOT row.FileHash = "false"
CALL apoc.merge.relationship(a, row.Outcome, {}, {}, b) YIELD rel as rel1
CALL apoc.merge.relationship(b, row.Outcome2, {}, {}, d) YIELD rel as rel2
CALL apoc.merge.relationship(a, row.Outcome, {}, {}, c) YIELD rel as rel3
CALL apoc.merge.relationship(c, row.Outcome2, {}, {}, d) YIELD rel as rel4
RETURN a,b,c,d
'''

graph.run(query)
person sectechguy    schedule 11.12.2019