当使用LOAD CSV时,应该何时更喜欢“ON CREATE SET ...”

时间:2016-11-30 22:58:02

标签: neo4j

我正在导入此表单的文件(其中HAN_ID是唯一的):

"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”中的“name”标签添加到每个发明人,但我不确定是更多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;

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

谢谢。

1 个答案:

答案 0 :(得分:2)

注意:document.getElementById子句只能在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; 都有一个唯一的Inventor并且输入文件可能包含您的数据库中已存在的hanID,则应使用选项2。

注意:为了确保数据库中的每个Inventor都有唯一的Inventor,您还应该创建一个唯一性约束:

hanID