首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >合并可选匹配将csv加载到Neo4j GDB?

合并可选匹配将csv加载到Neo4j GDB?
EN

Stack Overflow用户
提问于 2018-05-31 08:10:14
回答 1查看 0关注 0票数 0

我是Neo4j的新手,为了充分加载csv文件,我正在努力工作以获得Cypher的工作要求。

介绍

csv文件有6个字段:

代码语言:javascript
复制
code_a| a| code_b| b|code_c|c|

101,a101,101,NameForB1,101_0,NameForC1

101,a101,101,NameForB1,101_1,NameForC2

101,a101,101,NameForB1,101_2,NameForC3

101,a101,101,NameForB1,101_3,NameForC4

........................................

102,a102,102,NameForB2,102_0,NameForC1

102,a102,102,NameForB2,102_1,NameForC2

102,a102,102,NameForB2,102_2,NameForC3

102,a102,102,NameForB2,102_3,NameForC4

说明:

前两个字段(code_a,a)用于ROOTCATEGORY

后面的两个字段(code_b,b)用于CATEGORY

和最后两个字段,该对(code_c,c)用于SUBCATEGORY

工作代码

要加载csv文件,我创建了以下3个约束条件:

代码语言:javascript
复制
CREATE CONSTRAINT ON (r:ROOTCATEGORY) ASSERT r.fieldA IS UNIQUE;

CREATE CONSTRAINT ON (c:CATEGORY) ASSERT c.fieldB IS UNIQUE;

CREATE CONSTRAINT ON (s:SUBCATEGORY) ASSERT s.fieldC IS UNIQUE;

我的第一个工作密码Reuqest是以下

代码语言:javascript
复制
LOAD CSV WITH HEADERS FROM "file:///the-file-name.csv" as 
line FIELDTERMINATOR ','


MERGE (r:ROOTCATEGORY{fieldA: line.a})

ON CREATE SET r.description=line.a

ON CREATE SET r.identifier=line.code_a

ON CREATE SET r.id = toString(id(r))

MERGE (c:CATEGORY{fieldB:line.b}) 

ON CREATE SET c.identifier=line.code_b

ON CREATE SET c.a=line.a

ON CREATE SET c.Identifier=line.code_a

ON CREATE SET c.description=line.b

ON CREATE SET c.id = toString(id(c))

WITH c,r,line


MATCH (c {identifier:line.code_b}),(r {identifier:line.code_a})

CREATE UNIQUE (c)-[:IS_A_Category_BELONGING_TO]->(r)


MERGE (s:SUBCATEGORY {fieldC:line.c})

ON CREATE SET s.identifier=line.code_c 

ON CREATE SET s.fieldA=line.a 

ON CREATE SET s.ROOTCATEGORYIdentifier=line.code_a 

ON CREATE SET s.fieldB=line.b 

ON CREATE SET s.CATEGORYIdentifier=line.code_b 

ON CREATE SET s.description=line.c 

ON CREATE SET s.id = toString(id(s)) 

WITH s,c,r,line 

MATCH (s {identifier:line.code_c}),(r{identifier:line.code_a})

CREATE UNIQUE (s)-[:IS_A_SUBCATEGORY_BELONGING_TO_THAT_ROOTCATEGORY]->(r)

WITH s,c,r,line 


MATCH (s {identifier:line.code_c}),(c{identifier:line.code_b}) 

CREATE UNIQUE (s)-[:IS_A_SUBCATEGORY_BELONGING_TO_THAT_CATEGORY]->(c)

通过加载所有字段并创建所有关系和属性,Cypher工作得很好。

问题的解决

但我现在想要做的是:手动插入(添加)在csv文件行(特殊代码和特殊字符串),如下所述:3374991002 - specialCode是:337499(常量)+ Code_a(我,e代码对于ROOTCATEGORY)(100)+ theRowNumberOfThatEntry(2)

specialString是:BLANKEMPTY + Code_a(i,e代码ROOTCATEGORY)+ theRowNumberOfThatEntry

例如,我想在第一步(迭代)中插入波纹管:

代码语言:javascript
复制
100,BLANKEMPTY1001662,3374991001662,BLANKEMPTY1001662,3374991001662,BLANKEMPTY1001662_BLANKEMPTY1001662

然后是第二步(迭代)具有相同code_a的另一行(RootCategory代码100)

代码语言:javascript
复制
100,BLANKEMPTY1002,3374991002,BLANKEMPTY1002,3374991002,BLANKEMPTY1002_BLANKEMPTY1002

因此,对于具有specialStrings和specialCodes的行(要附加到csv文件中),我们可以继续将它们手动添加到csv文件,尽可能多的我们希望具有相同code_a(等于100)的行(节点)例如在我们的例子中)。因此我们产生了一个新的csv,我将在此后扩展csv文件。

将我以前的工作密码请求应用于该扩展csv文件中我得到:

  • ROOTCATEGORY的两个节点,其中相同的code_a等于100,即节点BLANKEMPTY1662和BLANKEMPTY1002
  • CATEGORY的两个节点具有相同的code_a等于100的信息3374991001662,3374991002命名节点BLANKEMPTY1001662和BLANKEMPTY1002
  • SUBCATEGORY的两个节点使用相同的code_a 100 3374991001662,3374991002 命名为BLANKEMPTY1001662和BLANKEMPTY1002

实际上,这是不好的结果。而不是每个都有两个节点,其目标是仅在DB上为一个节点生成rootCategory,一个节点用于类别,一个节点用于子类别。

目标

调整以前的工作Cypher查询,:

1 - 这样除了在csv文件上加载没有任何特殊代码或特殊字符串的行,如上面解释的ROOTCATEGORY,CATEGORY,SUBCATEGORY,+

2-

它还必须处理插入具有特殊字符串和扩展csv文件的特殊代码的行的情况。

即如果我已经加载到数据库,ROOTCATEGORY节点与特殊代码和具有相同code_a的特殊字符串

和/或具有相同code_a的特殊代码和特殊字符的CATEGORY NODE

和/或用于具有相同code_a的特殊代码和特殊字符的SUBCATEGORY NODE

然后我想用相同的code_a插入另一行,并有特殊的代码和specialStrings。不要结束两个结果节点。而只是为了更新最后一个现有节点(如果DB上已经存在最后一个可用数据),以便最终只有一个节点具有更新的信息。当然,如果数据库不存在,我们应该创建节点并设置必要的属性。

我的测试代码

为此,我尝试了以下请求,但我仍然每次都创建两个节点。

代码语言:javascript
复制
LOAD CSV WITH HEADERS FROM "file:///the-file-name.csv" as

line FIELDTERMINATOR ','

OPTIONAL MATCH (r:ROOTCATEGORY) where  r.fieldA contains "BLANKEMPTY" AND 
                                       r.identifier= line.code_a 
WITH (CASE WHEN r IS NULL THEN [1] ELSE [] END ) AS todoROOTCATEGORY,line
FOREACH (x IN todoROOTCATEGORY |
           MERGE (n:ROOTCATEGORY{fieldA: line.a})
           ON CREATE SET n.description=line.a 
           ON CREATE SET n.identifier=line.code_a
           ON CREATE SET n.id = toString(id(n))
           ON MATCH SET n.description=line.a 
           ON MATCH SET n.identifier=line.code_a 
           ON MATCH SET n.fieldA=line.a   
)

但不工作。

测试和总结

换句话说,如果我为以下csv文件应用所需的密码代码

代码语言:javascript
复制
code_a  |   a|      code_b|     b               |      code_c    |     c|
    100,BLANKEMPTY1001662,3374991001662,BLANKEMPTY1001662,3374991001662,BLANKEMPTY1001662_BLANKEMPTY1001662

    100,BLANKEMPTY1002,3374991002,BLANKEMPTY1002,3374991002,BLANKEMPTY1002_BLANKEMPTY1002

    101,a101,101,NameForB1,c101_0,NameForC1

    101,a101,101,NameForB1,c101_1,NameForC2

    101,a101,101,NameForB1,c101_2,NameForC3

    101,a101,101,NameForB1,c101_3,NameForC4

    ........................................

    102,a102,102,NameForB2,c102_0,NameForC1

    102,a102,102,NameForB2,c102_1,NameForC2

    102,a102,102,NameForB2,c102_2,NameForC3

    102,a102,102,NameForB2,c102_3,NameForC4

它将加载csv(对于101,102个节点,没有任何特殊代码或字符串),并且最终只有一个code_a等于100的节点(包含特殊代码特殊字符串的节点)和最后一个信息即BLANKEMPTY1002,3374991002,BLANKEMPTY1002, 3374991002,BLANKEMPTY1002_BLANKEMPTY1002

在后台它创建了第一个节点,第一次使用100,BLANKEMPTY1001662,3374991001662,并用最后的信息覆盖它(更新它)(我们可以为相同的code_a使用特定字符串,因为我们希望有很多行)在我们的例如,最后的信息是这样的:BLANKEMPTY1002,3374991002,BLANKEMPTY1002,3374991002,BLANKEMPTY1002_BLANKEMPTYVIDE1002

我们将只有一个节点持有最后的信息。

在这里,我把所有必要的事情进行测试

0)约束

代码语言:javascript
复制
CREATE CONSTRAINT ON (r:Region) ASSERT r.region IS UNIQUE;
   CREATE CONSTRAINT ON (c:City) ASSERT c.cityName IS UNIQUE;
   CREATE CONSTRAINT ON (s:Sector) ASSERT s.sectorName IS UNIQUE;

1)-file-name.csv

代码语言:javascript
复制
CODE_TER,TERRITOIRE,CODE_BRICK,BRICK,CODE_SBRICK,SOUSBRICK
101,NEWYORK,101,NEWYORK,10101_0,NEWYORK_La
101,NEWYORK,101,NEWYORK,10101_1,NEWYORK_Oula
101,NEWYORK,101,NEWYORK,10101_2,NEWYORK_Laou
101,NEWYORK,101,NEWYORK,10101_3,NEWYORK_Karir
101,NEWYORK,101,NEWYORK,10101_4,NEWYORK_Jeyan
101,NEWYORK,101,NEWYORK,10101_5,NEWYORK_Ttot
101,NEWYORK,101,NEWYORK,10101_6,NEWYORK_Slba
101,NEWYORK,101,NEWYORK,10101_7,NEWYORK_Sla
101,NEWYORK,101,NEWYORK,10101_8,NEWYORK_Sen
101,NEWYORK,101,NEWYORK,10101_9,NEWYORK_Zda
101,NEWYORK,105,JERSY,10102_0,JERSY_Bouss
101,NEWYORK,105,JERSY,10102_1,JERSY_Aha
101,NEWYORK,105,JERSY,10102_2,JERSY_Kbir
101,NEWYORK,105,JERSY,10102_3,JERSY_Shell
101,NEWYORK,105,JERSY,10102_4,JERSY_Rinaobia
101,NEWYORK,105,JERSY,10102_5,JERSY_RinaCha
101,NEWYORK,105,JERSY,10102_6,JERSY_BiGfet
101,NEWYORK,105,JERSY,10102_7,ARBA_DotCenter
101,NEWYORK,105,JERSY,10102_8,JERSY_DtCentreKhsShell
101,NEWYORK,105,JERSY,10102_9,JERSY_Ta
101,NEWYORK,105,JERSY,10103_10,JERSY_Zura
101,NEWYORK,105,JERSY,10103_11,JERSY_Arua
102,Maine,102,Maine,10201_0,AUGUSTA_Bnada
102,Maine,102,Maine,10201_1,AUGUSTA_Chwf
102,Maine,102,Maine,10201_2,AUGUSTA_Ter
102,Maine,102,Maine,10201_3,AUGUSTA_Lama
102,Maine,102,Maine,10201_4,AUGUSTA_Mssa
102,Maine,102,Maine,10201_5,AUGUSTA_Ash
102,Maine,102,Maine,10201_6,AUGUSTA_AlMa
102,Maine,102,Maine,10201_7,AUGUSTA_Aline
102,Maine,102,Maine,10201_8,AUGUSTA_Boef
102,Maine,102,Maine,10202_9,AUGUSTA_DoCentGnaya
102,Maine,102,Maine,10202_10,AUGUSTA_Ksir
102,Maine,102,Maine,10202_11,AUGUSTA_Slhli
102,Maine,102,Maine,10202_12,AUGUSTA_Lkua
102,Maine,102,Maine,10202_13,AUGUSTA_DoTning
102,Maine,102,Maine,10202_14,AUGUSTA_Si
102,Maine,102,Maine,10202_15,AUGUSTA_Azzinate
102,Maine,102,Maine,10202_16,AUGUSTA_AsBraz
102,Maine,102,Maine,10202_17,AUGUSTA_DntCenterKaoui
102,Maine,102,Maine,10202_18,AUGUSTA_Dari

2)初始工作请求

代码语言:javascript
复制
LOAD CSV WITH HEADERS FROM "file:///the-file-name.csv" as 
line FIELDTERMINATOR ','  
MERGE (r:Region{region: line.TERRITOIRE})
ON CREATE SET r.description=line.TERRITOIRE
ON CREATE SET r.identifier=line.CODE_TER 
ON CREATE SET r.id = toString(id(r))
MERGE (c:City {cityName:line.BRICK}) 
ON CREATE SET c.identifier=line.CODE_BRICK
ON CREATE SET c.region=line.TERRITOIRE 
ON CREATE SET c.regionIdentifier=line.CODE_TER
ON CREATE SET c.zip=line.CODE_BRICK
ON CREATE SET c.description=line.BRICK
ON CREATE SET c.id = toString(id(c))
WITH c,r,line
MATCH (c {identifier:line.CODE_BRICK}),(r {identifier:line.CODE_TER})
CREATE UNIQUE (c)-[:IS_A_City_BELONGING_TO]->(r)
MERGE (s:Sector {sectorName:line.SOUSBRICK})
ON CREATE SET s.identifier=line.CODE_SBRICK
ON CREATE SET s.region=line.TERRITOIRE
ON CREATE SET s.regionIdentifier=line.CODE_TER 
ON CREATE SET s.city=line.BRICK
ON CREATE SET s.cityIdentifier=line.CODE_BRICK
ON CREATE SET s.description=line.SOUSBRICK 
ON CREATE SET s.zip=line.SOUSBRICK
ON CREATE SET s.id = toString(id(s))
WITH s,c,r,line
MATCH (s {identifier:line.CODE_SBRICK}),(r{identifier:line.CODE_TER}) 
CREATE UNIQUE (s)-[:IS_A_SECTOR_BELONGING_TO_THAT_REGION]->(r) 
WITH s,c,r,line
MATCH (s {identifier:line.CODE_SBRICK}),(c{identifier:line.CODE_BRICK})
CREATE UNIQUE (s)-[:IS_A_SECTOR_BELONGING_TO_THAT_CITY]->(c)

3)扩展的csv文件,包含两行specialCode和SpecialStrings

代码语言:javascript
复制
CODE_TER,TERRITOIRE,CODE_BRICK,BRICK,CODE_SBRICK,SOUSBRICK
100,BLANKEMPTYVIDE1001662,3374991001662,BLANKEMPTYVIDE1001662,3374991001662,BLANKEMPTYVIDE1001662_BLANKEMPTYVIDE1001662
100,BLANKEMPTYVIDE1002,3374991002,BLANKEMPTYVIDE1002,3374991002,BLANKEMPTYVIDE1002_BLANKEMPTYVIDE1002
101,NEWYORK,101,NEWYORK,10101_0,NEWYORK_La
101,NEWYORK,101,NEWYORK,10101_1,NEWYORK_Oula
101,NEWYORK,101,NEWYORK,10101_2,NEWYORK_Laou
101,NEWYORK,101,NEWYORK,10101_3,NEWYORK_Karir
101,NEWYORK,101,NEWYORK,10101_4,NEWYORK_Jeyan
101,NEWYORK,101,NEWYORK,10101_5,NEWYORK_Ttot
101,NEWYORK,101,NEWYORK,10101_6,NEWYORK_Slba
101,NEWYORK,101,NEWYORK,10101_7,NEWYORK_Sla
101,NEWYORK,101,NEWYORK,10101_8,NEWYORK_Sen
101,NEWYORK,101,NEWYORK,10101_9,NEWYORK_Zda
101,NEWYORK,105,JERSY,10102_0,JERSY_Bouss
101,NEWYORK,105,JERSY,10102_1,JERSY_Aha
101,NEWYORK,105,JERSY,10102_2,JERSY_Kbir
101,NEWYORK,105,JERSY,10102_3,JERSY_Shell
101,NEWYORK,105,JERSY,10102_4,JERSY_Rinaobia
101,NEWYORK,105,JERSY,10102_5,JERSY_RinaCha
101,NEWYORK,105,JERSY,10102_6,JERSY_BiGfet
101,NEWYORK,105,JERSY,10102_7,ARBA_DotCenter
101,NEWYORK,105,JERSY,10102_8,JERSY_DtCentreKhsShell
101,NEWYORK,105,JERSY,10102_9,JERSY_Ta
101,NEWYORK,105,JERSY,10103_10,JERSY_Zura
101,NEWYORK,105,JERSY,10103_11,JERSY_Arua
102,Maine,102,Maine,10201_0,AUGUSTA_Bnada
102,Maine,102,Maine,10201_1,AUGUSTA_Chwf
102,Maine,102,Maine,10201_2,AUGUSTA_Ter
102,Maine,102,Maine,10201_3,AUGUSTA_Lama
102,Maine,102,Maine,10201_4,AUGUSTA_Mssa
102,Maine,102,Maine,10201_5,AUGUSTA_Ash
102,Maine,102,Maine,10201_6,AUGUSTA_AlMa
102,Maine,102,Maine,10201_7,AUGUSTA_Aline
102,Maine,102,Maine,10201_8,AUGUSTA_Boef
102,Maine,102,Maine,10202_9,AUGUSTA_DoCentGnaya
102,Maine,102,Maine,10202_10,AUGUSTA_Ksir
102,Maine,102,Maine,10202_11,AUGUSTA_Slhli
102,Maine,102,Maine,10202_12,AUGUSTA_Lkua
102,Maine,102,Maine,10202_13,AUGUSTA_DoTning
102,Maine,102,Maine,10202_14,AUGUSTA_Si
102,Maine,102,Maine,10202_15,AUGUSTA_Azzinate
102,Maine,102,Maine,10202_16,AUGUSTA_AsBraz
102,Maine,102,Maine,10202_17,AUGUSTA_DntCenterKaoui
102,Maine,102,Maine,10202_18,AUGUSTA_Dari

4)我尝试过的密码代码

代码语言:javascript
复制
USING PERIODIC COMMIT 10000
LOAD CSV WITH HEADERS FROM "file:///the-file-name.csv" as
line FIELDTERMINATOR ','
                    OPTIONAL MATCH (r:Region) where  r.region contains "BLANKEMPTYVIDE" AND r.identifier= line.CODE_TER 
                    WITH (CASE WHEN r IS NULL THEN [1] ELSE [] END ) AS todoRegion,line
                    FOREACH (x IN todoRegion |
                            MERGE (n:Region{region: line.TERRITOIRE})
                            ON CREATE SET n.description=line.TERRITOIRE 
                            ON CREATE SET n.identifier=line.CODE_TER 
                            ON CREATE SET n.id = toString(id(n))

                            ON MATCH SET n.description=line.TERRITOIRE 
                            ON MATCH SET n.identifier=line.CODE_TER 
                            ON MATCH SET n.region=line.TERRITOIRE   
                    )                

                    with line
                    OPTIONAL MATCH (c:City) where c.cityName contains "BLANKEMPTYVIDE" AND c.regionIdentifier= line.CODE_TER        
                    WITH (CASE WHEN c IS NULL THEN [1] ELSE [] END ) AS todoCity,line
                    FOREACH (x IN todoCity | 
                      MERGE (cci:City {cityName:line.BRICK}) 
                            ON CREATE SET cci.identifier=line.CODE_BRICK 
                            ON CREATE SET cci.region=line.TERRITOIRE
                            ON CREATE SET cci.regionIdentifier=line.CODE_TER 
                            ON CREATE SET cci.zip=line.CODE_BRICK 
                            ON CREATE SET cci.description=line.BRICK 
                            ON CREATE SET cci.id = toString(id(cci)) 

                            ON MATCH SET cci.identifier=line.CODE_BRICK 
                            ON MATCH SET cci.region=line.TERRITOIRE
                            ON MATCH SET cci.regionIdentifier=line.CODE_TER
                            ON MATCH SET cci.zip=line.CODE_BRICK
                            ON MATCH SET cci.description=line.BRICK
                            ON MATCH SET cci.cityName=line.BRICK  
                    )
                    with line

                            MATCH (cit:City{identifier:line.CODE_BRICK}),(reg:Region{identifier:line.CODE_TER}) 
                            CREATE UNIQUE (cit)-[:IS_A_City_BELONGING_TO]->(reg)
                            WITH line,cit
                  OPTIONAL MATCH (s:Sector) where s.description contains "BLANKEMPTYVIDE" AND s.regionIdentifier=line.CODE_TER      
                  WITH (CASE WHEN s IS NULL THEN [1] ELSE [] END ) AS todoSector,line,cit
                  FOREACH (x IN todoSector |  
                            MERGE (b:Sector {sectorName:line.SOUSBRICK}) 
                            ON CREATE SET b.identifier=line.CODE_SBRICK 
                            ON CREATE SET b.region=line.TERRITOIRE 
                            ON CREATE SET b.regionIdentifier=line.CODE_TER 
                            ON CREATE SET b.city=line.BRICK 
                            ON CREATE SET b.cityIdentifier=line.CODE_BRICK
                            ON CREATE SET b.description=line.SOUSBRICK 
                            ON CREATE SET b.zip=line.SOUSBRICK 
                            ON CREATE SET b.id = toString(id(b)) 

                            ON MATCH SET b.identifier=line.CODE_SBRICK 
                            ON MATCH SET b.region=line.TERRITOIRE 
                            ON MATCH SET b.regionIdentifier=line.CODE_TER 
                            ON MATCH SET b.city=line.BRICK 
                            ON MATCH SET b.cityIdentifier=line.CODE_BRICK 
                            ON MATCH SET b.description=line.SOUSBRICK 
                            ON MATCH SET b.zip=line.SOUSBRICK 
                            ON MATCH SET b.sectorName = line.SOUSBRICK    
                  )

                  with line
                  MATCH (sss:Sector)
                    WHERE sss.identifier=line.CODE_SBRICK
                    WITH sss,line
                    MATCH (nnn:Region) 
                     WHERE nnn.identifier=line.CODE_TER
                   CREATE UNIQUE (sss)-[:IS_A_SECTOR_BELONGING_TO_THAT_REGION]->(nnn)
                    WITH sss,line
                    MATCH (ccc:City) 
                     WHERE ccc.identifier=line.CODE_BRICK
                   CREATE UNIQUE (sss)-[:IS_A_SECTOR_BELONGING_TO_THAT_CITY]->(ccc)
EN

回答 1

Stack Overflow用户

发布于 2018-05-31 17:59:49

代码语言:txt
复制
  LOAD CSV WITH HEADERS FROM "file:///the-file-name.csv" as line 
    FIELDTERMINATOR ','  
    with line as line
    OPTIONAL MATCH (n:Region) 
    WHERE  n.region contains "BLANKEMPTYVIDE" AND n.identifier= line.CODE_TER 
    WITH n, line
    CALL apoc.do.when(
       n IS NULL,
      'MERGE (r:Region{region: line.TERRITOIRE}) ON CREATE SET r.description=line.TERRITOIRE ON CREATE SET r.identifier=line.CODE_TER ON CREATE SET r.id = toString(id(r)) RETURN r',
      'RETURN n AS r',
      {n: n, line: line}) YIELD value
    WITH value.r AS r, line 
    SET r.identifier=line.CODE_TER
    SET r.description=line.TERRITOIRE
    SET r.region=line.TERRITOIRE
    WITH r,line
    OPTIONAL MATCH (ci:City) where ci.cityName contains "BLANKEMPTYVIDE" AND ci.regionIdentifier= line.CODE_TER
    CALL apoc.do.when(
       ci IS NULL,
      'MERGE (c:City {cityName:line.BRICK}) ON CREATE SET c.identifier=line.CODE_BRICK ON CREATE SET c.region=line.TERRITOIRE ON CREATE SET c.regionIdentifier=line.CODE_TER ON CREATE SET c.zip=line.CODE_BRICK ON CREATE SET c.description=line.BRICK ON CREATE SET c.id = toString(id(c)) RETURN c',
      'RETURN ci AS c',
      {ci: ci, line: line}) YIELD value
    WITH value.c AS c,line,r
    SET c.identifier=line.CODE_BRICK 
    SET c.region=line.TERRITOIRE
    SET c.regionIdentifier=line.CODE_TER
    SET c.zip=line.CODE_BRICK
    SET c.description=line.BRICK
    SET c.cityName=line.BRICK  
    WITH c,r,line
    MATCH (c {identifier:line.CODE_BRICK}),(r {identifier:line.CODE_TER})
    MERGE (c)-[:IS_A_City_BELONGING_TO]->(r)
    WITH c,r,line
    OPTIONAL MATCH (sec:Sector) 
    WHERE  sec.description contains "BLANKEMPTYVIDE" AND sec.regionIdentifier=line.CODE_TER 
    CALL apoc.do.when(
       sec IS NULL,
      'MERGE (s:Sector {sectorName:line.SOUSBRICK}) ON CREATE SET s.identifier=line.CODE_SBRICK ON CREATE SET s.region=line.TERRITOIRE ON CREATE SET s.regionIdentifier=line.CODE_TER ON CREATE SET s.city=line.BRICK ON CREATE SET s.cityIdentifier=line.CODE_BRICK ON CREATE SET s.description=line.SOUSBRICK ON CREATE SET s.zip=line.SOUSBRICK ON CREATE SET s.id = toString(id(s)) RETURN s',
      'RETURN sec AS s',
      {sec: sec, line: line}) YIELD value
    WITH value.s AS s,line,c,r
    SET s.identifier=line.CODE_SBRICK 
    SET s.region=line.TERRITOIRE 
    SET s.regionIdentifier=line.CODE_TER 
    SET s.city=line.BRICK 
    SET s.cityIdentifier=line.CODE_BRICK 
    SET s.description=line.SOUSBRICK 
    SET s.zip=line.SOUSBRICK 
    SET s.sectorName = line.SOUSBRICK   
    WITH s,c,r,line
    MATCH (s {identifier:line.CODE_SBRICK}),(r{identifier:line.CODE_TER}) 
    MERGE (s)-[:IS_A_SECTOR_BELONGING_TO_THAT_REGION]->(r) 
    WITH s,c,r,line
    MATCH (s {identifier:line.CODE_SBRICK}),(c{identifier:line.CODE_BRICK})
    MERGE (s)-[:IS_A_SECTOR_BELONGING_TO_THAT_CITY]->(c)

结果:

Set 28271 properties, created 3400 relationships, completed after 34985 ms.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100001647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档