[在Neo4j中加载CSV时管理更新

问题描述 投票:0回答:1

我每周都会在Neo4j数据库中导入CSV,其中90%的数据已经存在。这是我的数据库更新过程。

我正在将数据与ID合并,并确保对其施加唯一约束。

从技术角度来看,一切都很好。但是从操作的角度来看,我有一些需求:

1-我有:Org,:Person节点和:MEMBER_OF关系,并且我需要每周跟踪任何更改。他加入了另一个Org(容易的部分)吗?他留下了另一个(棘手的部分)吗?我想用属性“ OBSOLETE”更新以前的关系,或者用新的关系FORMER_MEMBER_OF代替它来保持跟踪。

=>我该怎么做?

2-我手动更新标签和名称以保持显示的一致性(删除带有首字母缩写词的括号,添加大写字母,...)。加载更新CSV时,名称被CSV中的名称覆盖。我不能用辅助字段“锁定”该字段,因为某些CSV标签和名称更新可能是合法的(组织可以更改其名称)。

=>如何查看属性更改?在接受数据库中的数据之前,是否可以预览所有修改后的节点和关系属性?

谢谢您的帮助!

csv neo4j updates insert-update
1个回答
0
投票

我理解问题的方式,您正在加载的CSV包含用于完全重新加载数据或至少一个数据域的所有信息,并且您希望跟踪该结果的添加,更新和删除。

如果我的假设是正确的,那么对于第一个问题,您可以在可能受影响的每个节点和关系上将csv_status属性设置为deleted之类。您需要在运行CSV LOAD之前执行此操作。然后,在MERGE语句的ON MATCH中,可以将csv_status设置为matched,在ON CREATE中,可以将其设置为new。 CSV LOAD之后,csv_statusdeleted的每个节点或关系都不会出现在CSV中,您可以相应地进行后处理。

关于您的第二个问题,我考虑在您的节点中保存两个版本的name属性。从CSV加载的“原始”值以及经过清理或编辑的值。在CSV LOAD中,您将仅更新原始名称值。在后期处理步骤中,您可以使用某种程序匹配将原始名称与csv_statusmatched的所有:Org节点上的清理名称进行比较。例如,也许只比较两个名称中的字母。如果匹配失败,则组织名称可能已更改。

© www.soinside.com 2019 - 2024. All rights reserved.