Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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
Sql server 根据条件克隆某些关系_Sql Server_Neo4j_Impact Analysis - Fatal编程技术网

Sql server 根据条件克隆某些关系

Sql server 根据条件克隆某些关系,sql-server,neo4j,impact-analysis,Sql Server,Neo4j,Impact Analysis,我将两个名为Keys的表和Acc tables的表作为CSV文件从SQL Server导出,并使用下面的命令将它们成功导入Neo4J CREATE INDEX ON :Keys(IdKey) USING PERIODIC COMMIT 500 LOAD CSV FROM 'file:///C:/Keys.txt' AS line MERGE (k:Keys { IdKey: line[0] }) SET k.KeyNam=line[1], k.KeyLib=line[2], k.KeyTyp

我将两个名为Keys的表和Acc tables的表作为CSV文件从SQL Server导出,并使用下面的命令将它们成功导入Neo4J

CREATE INDEX ON :Keys(IdKey) 

USING PERIODIC COMMIT 500
LOAD CSV FROM 'file:///C:/Keys.txt' AS line
MERGE (k:Keys { IdKey: line[0] })
SET k.KeyNam=line[1], k.KeyLib=line[2], k.KeyTyp=line[3], k.KeySubTyp=line[4]

USING PERIODIC COMMIT 500
LOAD CSV FROM 'file:///C:/Acc.txt' AS line
MERGE (callerObject:Keys { IdKey : line[0] })
MERGE (calledObject:Keys { IdKey : line[1] })
MERGE (callerObject)-[rc:CALLS]->(calledObject)
SET rc.AccKnd=line[2], rc.Prop=line[3]
Keys代表源代码对象,Acc代表它们之间的关系。我为三个不同的应用程序项目导入了这两个表三次。因此,为了保持IdKey属性对于三个应用程序是唯一的,我在从sql server导出时将一个五个字符的前缀连接到IdKey,以标识应用程序的对象,因为我们不能像我从手册中学到的那样基于多个字段创建索引。现在,我的目标是构建应用程序之间的关系。例如:

  • Node1是Application1的源代码对象
  • Node2是Application1的另一个源代码对象
  • Node3是Application2的源代码对象
由于Acc中的记录已导入,因此已经创建了从Node1到Node2的调用关系。 节点2的名称等于节点3的名称。所以我们可以说Node2和Node3实际上是相同的源代码。所以我们应该创建一个从Node1到Node3的关系。为了实现它,我在下面写了一个命令。但我想确定这是正确的。因为我不知道它会执行多久

MATCH (caller:Keys)-[rel:CALLS]->(called:Keys),(calledNew:Keys)
WHERE calledNew.KeyNam = called.KeyNam 
and calledNew.IdKey <> called.IdKey
CREATE (caller)-[:CALLS]->(calledNew)
匹配(调用者:键)-[rel:CALLS]->(调用者:键),(调用者新建:键)
其中calledNew.KeyNam=called.KeyNam
并调用new.IdKey调用.IdKey
创建(调用者)-[:调用]->(调用者新建)

假设您也在
:Keys(KeyNam)
上,下面的查询应该是有效的

直接在属性值之间进行比较时,Cypher不会使用索引。因此,此查询将每个
调用方的所有
调用名
放入
名称
集合,然后在
调用的new.KeyNam
和该集合中的项之间进行比较。这将导致使用索引,并将加快识别称为节点的潜在重复

此查询还执行
NOT(调用者)-[:CALLS]->(calledNew)
检查,以避免在相同节点之间创建重复关系

MATCH (caller:Keys)-[rel:CALLS]->(called:Keys) 
WITH caller, COLLECT(called.KeyNam) AS names 
MATCH (calledNew:Keys) 
WHERE calledNew.KeyNam IN names AND NOT (caller)-[:CALLS]->(calledNew) 
CREATE (caller)-[:CALLS]->(calledNew)