2016-11-30 44 views
1

当我导入此格式的文件(其中HAN_ID是唯一的):一个时候应该更喜欢“上创建设置...”使用LOAD CSV

"HAN_ID"|"Person_name_clean"|"Person_ctry_code"|"Matched" 
"4"|"GESELLSCHAFT FUER NUCLEONIC & ELECT MBH"|"DE"|"0" 
"5"|"IMPEX ESSEN VERTRIEB VON WERKZEUGEN GMBH"|"DE"|"0" 

我看到两种方式来添加“名称“从”Person_name_clean“到每个发明人的标签,但不知道是更多的Cypher-ic和更高性能。不同之处在于最后两行。

// Option 1 
CREATE CONSTRAINT ON (i:Inventor) ASSERT i.hanID IS UNIQUE; 
USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///.../201609_HAN_NAME.txt" AS row 
FIELDTERMINATOR '|' 
CREATE (i:Inventor {hanID:row.HAN_ID,name:row.Person_name_clean}); 

//Option 2 
CREATE CONSTRAINT ON (i:Inventor) ASSERT i.hanID IS UNIQUE; 
USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///.../201609_HAN_NAME.txt" AS row 
FIELDTERMINATOR '|' 
CREATE (i:Inventor {hanID:row.HAN_ID}) 
ON CREATE SET i.name=row.Person_name_clean; 

除了我的具体情况,我不知道是否有优先针对任何一般规则。如果重要,该文件包含数百万发明人。

谢谢。

回答

2

注意:ON CREATE子句只能在MERGE子句之后使用。所以,你的第二个选择应该是:

//Option 2 
CREATE CONSTRAINT ON (i:Inventor) ASSERT i.hanID IS UNIQUE; 
USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///.../201609_HAN_NAME.txt" AS row 
FIELDTERMINATOR '|' 
MERGE (i:Inventor {hanID:row.HAN_ID}) 
ON CREATE SET i.name=row.Person_name_clean; 

选项2应,如果你打算每Inventor用于具有唯一hanID和输入文件可能包含Inventor s表示已经在您的数据库存在。

注:确保在DB每个Inventor将有一个独特hanID,你还应该创建一个唯一性约束:

CREATE CONSTRAINT ON (i:Inventor) ASSERT i.hanID IS UNIQUE; 
+0

感谢您对“上创建”的字条。我*认为*意味着选项1是要走的路,因为我遵循了分别导入发明者节点及其关联的han_ID的明智建议,允许我在此步骤中使用“匹配”而不是“合并”更快的速度。 非常感谢您的帮助。 – ghoetker

相关问题