当前位置: 首页 > 知识库问答 >
问题:

从CSV加载数据模式的问题

贺博厚
2023-03-14

对象文件:

ID
ABC-DE
DEF

零件文件

ID  ParentID    Level   Size
ABC ABC-DE  1   3
DE  ABC-DE  1   2
AB  ABC 2   2
BC  ABC 2   2
DE  DEF 1   2
F   DEF 2   1
A   AB  3   1
B   AB  3   1
B   BC  3   1
C   BC  3   1
D   DE  3   1
E   DE  3   1

用于加载数据的密码命令行:

LOAD CSV WITH HEADERS FROM 'file:///path_to_file/object.csv' as csvLine FIELDTERMINATOR '\t' CREATE (:Object { Name: csvLine.ID})  RETURN count(*);
LOAD CSV WITH HEADERS FROM 'file:///path_to_file/part.csv' as csvLine FIELDTERMINATOR '\t' MATCH (o:Object {Name: csvLine.ParentID}) MERGE (p:Part {Name: csvLine.ID}) ON CREATE SET p.Size = csvLine.Size CREATE (o) -[:hasPart {Level: csvLine.Level}]-> (p) RETURN count(*);
LOAD CSV WITH HEADERS FROM 'file:///path_to_file/part.csv' as csvLine FIELDTERMINATOR '\t' MATCH (o:Part {Name: csvLine.ParentID}) MERGE (p:Part {Name: csvLine.ID}) ON CREATE SET p.Size = csvLine.Size CREATE (o) -[:hasPart {Level: csvLine.Level}]-> (p) return count(*);

neo4j2.1.7和neo4j2.2.0-M04都存在此问题。

共有1个答案

昌勇锐
2023-03-14

所以我认为这里的问题是cypher将许多更新批处理到一个事务中,然后提交它们。它放入事务中的数量可以通过使用定期提交来配置。我可能错了,但我认为通常它会将整个数据加载视为一个大事务。

对您来说,这是一个问题,因为当您在第6行时,您可能需要引用回在第3行创建的节点。除了那行不通;如果事务尚未提交,因为cypher正在批处理一系列结果),那么尚未提交的结果可能无法用于后续查询运行。

所以你有几个选择;一种方法是对该零件文件进行两次导入。在第一次传球时,您可能会这样做:

LOAD CSV WITH HEADERS FROM 'file:///path_to_file/part.csv' as csvLine FIELDTERMINATOR '\t' 
MERGE (p:Part {Name: csvLine.ID}) ON CREATE SET p.Size = csvLine.Size CREATE (o) -[:hasPart {Level: csvLine.Level}]-> (p) return count(*);

(第一个将确保所有部分都存在于数据库中)

然后在第二次传递时,您可以这样做:

LOAD CSV WITH HEADERS FROM 'file:///path_to_file/part.csv' as csvLine FIELDTERMINATOR '\t' MATCH (o:Part {Name: csvLine.ParentID}) MATCH (p:Part {Name: csvLine.ID}) CREATE (o) -[:hasPart {Level: csvLine.Level}]-> (p) return count(*);

(这只会将它们与关系联系起来)

 类似资料:
  • 我从几个csv文件迭代上传节点和边,每个节点类型一个。加载节点工作得很好,但加载边并不总是有效。实际上,有些节点有数字作为标识符--如果是这样的话,所有这种类型的节点都有数字--但加载为字符串,因此创建边失败。手动创建一个边,添加用双引号包装标识符,效果很好。 边缘: 密码命令:

  • 问题内容: 我有一个文件,可以包含3到4列以逗号分隔的数值。空字段位于行末时会被定义为例外: 下表是在MySQL中创建的: 我正在尝试使用MySQL LOAD命令加载数据: 结果表: 问题在于,当原始数据中的字段为空且未定义时,MySQL由于某种原因不会使用列默认值(为NULL),而是使用零。当字段全部丢失时,正确使用NULL。 不幸的是,在这一阶段,我必须能够区分NULL和0,因此将不胜感激。

  • 我两个月前刚开始学习Spring,以前从未做过Ajax或JavaScript。所以我对这个很陌生。我想做的是从控制器中的GET方法加载数据,将其填充到模式中。我正在使用ajax来实现这一点。基本上我做了这家伙做的事https://qtzar.com/2017/03/24/ajax-and-thymeleaf-for-modal-dialogs/正在做。但它不起作用。 希望有人能帮我。 这是我的控制

  • 问题内容: 我正在尝试使用Java + Hibernate + Spring将CSV文件加载到mySQL数据库中。我在DAO中使用以下查询来帮助我加载到数据库中: 我有一些想法可以从http://dev.mysql.com/doc/refman/5.1/en/load- data.html 使用它,以及如何从hibernate +spring应用程序将csv文件导入到mysql中? 但是我得到了错

  • 我正在将一个CSV文件中的20000行数据导入Mysql。 CSV中的列与MySQL表中的列的顺序不同。如何自动分配Mysql表列对应的列? 当我执行 此查询将所有数据添加到第一列。 请建议将数据导入Mysql的自动语法。

  • 我正在通过SSIS将数据从csv文件加载到我的sql表中。是否对从csv文件读取的记录数指定了默认限制? 在加载csv文件时,我的数据流组件只处理5000条记录,尽管它包含5341条记录,如下面的图像所示。我如何修复这个问题?