我有两个csv文件,即:file1.csv {包含字段:Gene,Tumor,Totalpatients,Level}和file2.csv {Gene,Sample,Value,Abundance}
我需要创建两个文件之间的关系,例如:Gene连接到Tumor并创建为采样等等(类似关系)
我正在尝试以下内容,但它向我显示了所需的结果(在代码下面解释)
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS
FROM 'file///home/file1.csv' AS row
LOAD CSV WITH HEADERS
FROM 'file///home/file2.csv' AS line
MERGE (genes:Genes { name: 'Genes' })
MERGE (cancer:Cancer { name: 'Cancer' })
MERGE (rna:RNA {name: 'RNA'})
MERGE (gene:Gene {name: UPPER(row.Gene)})
MERGE (tumor:Tumor {name: UPPER(row.Tumor)})
MERGE (patient:Patients { name: 'Patients' })
MERGE (total:Totalpatients {name: UPPER(row.Totalpatients)})
MERGE (level:Level {name: UPPER(row.Level)})
MERGE (count:Countpatients {name: UPPER(row.Countpatients)})
MERGE (sample:Sample{name: UPPER(line.Sample)})
MERGE (genes)-[:GENES]->(gene)
MERGE (genes)-[:TUMOR]->(tumor)
MERGE (gene)-[:RNA]->(Sample)
RETURN row;
执行后,关系RNA显示与空节点连接的基因,即没有要显示的属性。
如何纠正?
答案 0 :(得分:0)
如果没有详细了解.csv文件的内容,并假设上面发布的Cypher与您正在执行的内容完全相同...
我认为这可能是一个简单的套管问题。发现差异:
MERGE (sample:Sample{name: UPPER(line.Sample)})
MERGE (gene)-[:RNA]->(Sample)
您的标识符sample
以小写字母'开头。但在关系MERGE
声明中,它是一个大写的' S',即Sample
。
可以通过检查来自:RNA
的{{1}}关系另一端的节点是否有标签来确认。
gene:Gene
如果没有,则MERGE语句在原始语句中创建了MATCH (gene:Gene)-[:RNA]-(sample)
RETURN labels(sample)
节点,因为该模式不存在。当然,Sample
没有标签也没有属性 - 因此你的观察。