Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Merge neo4j加载csv无效“;“论比赛”;_Merge_Neo4j_Load Csv - Fatal编程技术网

Merge neo4j加载csv无效“;“论比赛”;

Merge neo4j加载csv无效“;“论比赛”;,merge,neo4j,load-csv,Merge,Neo4j,Load Csv,我正在使用loadcsv命令加载一个文件,我遇到了一个奇怪的情况,当一个新行在“onmatch”块中添加了一个属性时 代码如下: USING PERIODIC COMMIT 10000 LOAD CSV WITH HEADERS FROM 'file://1.csv' AS line FIELDTERMINATOR '|' WITH line, split(line.list_ites, ',') AS items UNWIND items AS _items MERGE (s

我正在使用loadcsv命令加载一个文件,我遇到了一个奇怪的情况,当一个新行在“onmatch”块中添加了一个属性时

代码如下:

USING PERIODIC COMMIT 10000 LOAD CSV WITH HEADERS FROM 'file://1.csv'     
AS line 
FIELDTERMINATOR '|'

WITH line, split(line.list_ites, ',') AS items UNWIND items AS _items 

MERGE (session :Session { wz_session:line.session }) 
ON CREATE SET session.created = timestamp(),session.batch_id='60893068766' 
ON MATCH SET session.updated = timestamp() 

MERGE (hit :Hit { id:line.hit_id,date_time:TOINT(line.date_time) }) 
ON CREATE SET hit.created = timestamp() 
ON MATCH SET hit.updated = timestamp()

 FOREACH(q IN (CASE WHEN trim(line.list_ites) <> '&' THEN _items ELSE [] END) |   //cypher doesn't have IF
            MERGE (i:ListItems {key: q,name:split(q,'=')[0],value: split(q,'=')[1]}) 
            CREATE (hit)-[:WITH_QUERY]->(i)
         )
由于hit_id是唯一的, 然而,我看到了updated=xxx的Hit类型的节点(我已经用grep[Hit_id]1.csv文件验证了这些节点的id出现一次)

我很确定这条线路有问题:

split(line.list_ites, ',') AS items UNWIND items AS _items 
 split(line.list_ites, ',') AS items UNWIND items AS _items 
还是用循环

帮助我们认识到

狮子座

更新:

我删除了这一行:

split(line.list_ites, ',') AS items UNWIND items AS _items 
 split(line.list_ites, ',') AS items UNWIND items AS _items 

还有foreach循环,实际上我没有看到任何有值的“更新”字段。我仍然必须修复它,因为我不能真正从最终代码中删除它,这是因为它不仅在
hit\u id
上合并,而且在
date\u time
上合并,正如您在
MERGE
子句中指定的那样

您应该将其更改为:

MERGE (hit :Hit { id:line.hit_id }) 
ON CREATE SET hit.created = timestamp(), hit.date_time=TOINT(line.date_time)
ON MATCH SET hit.updated = timestamp()
更新 您对
\u项所做的操作实际上毫无意义。Esp将其作为集合传递给foreach,但它不能是集合

可能使用内部foreach循环:

USING PERIODIC COMMIT 10000 LOAD CSV WITH HEADERS FROM 'file://1.csv'     
AS line FIELDTERMINATOR '|'

MERGE (session :Session { wz_session:line.session }) 
ON CREATE SET session.created = timestamp(),session.batch_id='60893068766' 
ON MATCH SET session.updated = timestamp() 

MERGE (hit :Hit { id:line.hit_id,date_time:TOINT(line.date_time) }) 
ON CREATE SET hit.created = timestamp() 
ON MATCH SET hit.updated = timestamp()

FOREACH (_items IN split(line.list_ites, ',') |
  FOREACH(q IN (CASE WHEN trim(line.list_ites) <> '&' THEN _items ELSE [] END) |               
    MERGE (i:ListItems {key: q, name:split(q,'=')[0], value: split(q,'=')[1]}) 
    CREATE (hit)-[:WITH_QUERY]->(i)
  )
)
使用定期提交10000加载CSV,其中包含来自的标题'file://1.csv'     
AS行字段终止符“|”
合并(会话:会话{wz_会话:line.session})
在创建SET session.created=timestamp()时,session.batch_id='60893068766'
在匹配集session.updated=timestamp()上
合并(hit:hit{id:line.hit\id,date\u-time:TOINT(line.date\u-time)})
创建时设置hit.created=timestamp()
匹配集上的hit.updated=timestamp()
FOREACH(_拆分中的项目(line.list_ites,,'))|
FOREACH(q IN(在修剪(行列表)时)&“然后_itemselse[]END)|
合并(i:ListItems{key:q,name:split(q,'='))[0],value:split(q,'='))[1]}
创建(点击)-[:WITH_QUERY]->(i)
)
)
但最好是将放松的过程进行到底:

...
WHERE trim(line.list_ites) <> '&'
UNWIND split(line.list_ites, ',') AS _items
UNWIND _items as q
WITH q,split(q,'=') as parts, hit
MERGE (i:ListItems {key: q}) ON CREATE SET i.name=parts[0], i.value=parts[1]
CREATE (hit)-[:WITH_QUERY]->(i)
。。。
其中修剪(线条列表)&'
将拆分(line.list_ites,,')作为_项展开
将项目作为q展开
使用q,将(q,“=”)分割为部分,点击
在创建集i.name=parts[0],i.value=parts[1]上合并(i:ListItems{key:q})
创建(点击)-[:WITH_QUERY]->(i)

这是因为它不仅在
hit\u id
上合并,而且在
date\u time
上合并,正如您在
MERGE
子句中指定的那样

您应该将其更改为:

MERGE (hit :Hit { id:line.hit_id }) 
ON CREATE SET hit.created = timestamp(), hit.date_time=TOINT(line.date_time)
ON MATCH SET hit.updated = timestamp()
更新 您对
\u项所做的操作实际上毫无意义。Esp将其作为集合传递给foreach,但它不能是集合

可能使用内部foreach循环:

USING PERIODIC COMMIT 10000 LOAD CSV WITH HEADERS FROM 'file://1.csv'     
AS line FIELDTERMINATOR '|'

MERGE (session :Session { wz_session:line.session }) 
ON CREATE SET session.created = timestamp(),session.batch_id='60893068766' 
ON MATCH SET session.updated = timestamp() 

MERGE (hit :Hit { id:line.hit_id,date_time:TOINT(line.date_time) }) 
ON CREATE SET hit.created = timestamp() 
ON MATCH SET hit.updated = timestamp()

FOREACH (_items IN split(line.list_ites, ',') |
  FOREACH(q IN (CASE WHEN trim(line.list_ites) <> '&' THEN _items ELSE [] END) |               
    MERGE (i:ListItems {key: q, name:split(q,'=')[0], value: split(q,'=')[1]}) 
    CREATE (hit)-[:WITH_QUERY]->(i)
  )
)
使用定期提交10000加载CSV,其中包含来自的标题'file://1.csv'     
AS行字段终止符“|”
合并(会话:会话{wz_会话:line.session})
在创建SET session.created=timestamp()时,session.batch_id='60893068766'
在匹配集session.updated=timestamp()上
合并(hit:hit{id:line.hit\id,date\u-time:TOINT(line.date\u-time)})
创建时设置hit.created=timestamp()
匹配集上的hit.updated=timestamp()
FOREACH(_拆分中的项目(line.list_ites,,'))|
FOREACH(q IN(在修剪(行列表)时)&“然后_itemselse[]END)|
合并(i:ListItems{key:q,name:split(q,'='))[0],value:split(q,'='))[1]}
创建(点击)-[:WITH_QUERY]->(i)
)
)
但最好是将放松的过程进行到底:

...
WHERE trim(line.list_ites) <> '&'
UNWIND split(line.list_ites, ',') AS _items
UNWIND _items as q
WITH q,split(q,'=') as parts, hit
MERGE (i:ListItems {key: q}) ON CREATE SET i.name=parts[0], i.value=parts[1]
CREATE (hit)-[:WITH_QUERY]->(i)
。。。
其中修剪(线条列表)&'
将拆分(line.list_ites,,')作为_项展开
将项目作为q展开
使用q,将(q,“=”)分割为部分,点击
在创建集i.name=parts[0],i.value=parts[1]上合并(i:ListItems{key:q})
创建(点击)-[:WITH_QUERY]->(i)

hi@michael hunger,事实并非如此。我已经在我的问题中添加了一个“更新”部分Hi@michael hunger,事实并非如此。我已经在我的问题中添加了一个“更新”部分Hi@michael hunger,事实并非如此。我已经在我的问题右侧添加了一个“更新”部分,将该字段展开成行,这肯定会创建重复项,因为每个输入行都是重复的,从
开始,使用行,拆分(line.list_ites,,')作为项将项展开为_项
->您在查询中没有使用
_项
?那么,你为什么要做放松呢?sopy粘贴问题。现在它出现在foreachit中,您对_items所做的操作毫无意义,可能只是使用一个内部foreach loopRight,将该字段展开成行,这肯定会创建重复项,因为每个输入行都是从
开始重复的,使用line,split(line.list_ites,,)AS items将项目作为_items展开
->您在查询中没有使用
\u items
?那么,你为什么要做放松呢?sopy粘贴问题。现在它出现在foreachit中,您对_items所做的操作毫无意义,可能只是使用一个内部foreach loopRight,将该字段展开成行,这肯定会创建重复项,因为每个输入行都是从
开始重复的,使用line,split(line.list_ites,,)AS items将项目作为_items展开
->您在查询中没有使用\u items?那么,你为什么要做放松呢?sopy粘贴问题。现在它出现在foreach中,您对_项所做的操作没有意义,可能只是使用了一个内部foreach循环