csv

2016-03-25 19 views
1

'dan içe aktarılırken bağlantılar için değişkenleri kullanma Bir projeyi SQL öykünme veritabanından 'emülasyon' dan neo4j'ye geçirmek istiyorum ve şimdi takılıyorum. 100_000+ form source_id, relationship_type, target_id biçimli bir tablom var. İşte ithalat beyanı var:csv

LOAD CSV WITH HEADERS FROM 
'file:///usr/local/n4jinput/special_semrelations.csv' AS line 
WITH line 
MATCH (s:SemObject {sem_id: TOINT(line.ool_source_id)}) 
MATCH (t:SemObject {sem_id: TOINT(line.ool_target_id)}) 
CREATE (s)-[line.rlt_relation]->(t) 

sorun yaratmak açıklamada olduğunu. [: WHATEVER_IS_IN_THE_CSV] almak için doğru sözdizimi nedir? Birkaç düzine ilişki türüne sahip olduğum için, burada bir çeşit değişken kullanmam gerekiyor ... CYPHER'de bu mümkün değilse, bunu verimli bir şekilde yapmanın başka yolları var mı?

+0

Teşekkür, cybersam, cevap ilk bakışta gerçekten farklı olsa da, prensipte aynıdır ... – cip22

cevap

1

İlişki türleri Cypher'de dinamik olarak parametrelenemez veya belirtilemez. Tanımlanmış bir ilişki türü kümeniz varsa, bir geçici çözüm vardır. ilişki türü, sonra doğru bir ilişki türü oluşturarak dizinin (ler) yinelemenize maçlarının eğer bir dizi doldurmak, ilişki türlerini karşılaştırmak için bir CASE deyimi kullanabilirsiniz: ipucu için

LOAD CSV WITH HEADERS FROM 'file:///myfile.csv' AS line 
MATCH (s:SemObject {sem_id: TOINT(line.ool_source_id)}) 
MATCH (t:SemObject {sem_id: TOINT(line.ool_target_id)}) 
WITH s,t, 
    CASE WHEN line.rlt_relation = "MEMBER_OF" THEN [1] ELSE [] END AS member_of, 
    CASE WHEN line.rlt_relation = "BELONGS_TO" THEN [1] ELSE [] END AS belongs_to 
FOREACH (x IN member_of | CREATE (s)-[:MEMBER_OF]->(t)) 
FOREACH (x IN belongs_to | CREATE (s)-[:BELONGS_TO]->(t)) 
+0

Yanıt ve geçici çözüm için teşekkürler. Bunu deneyeceğim. BTW, Cypher'de ilişki türlerinin dinamik olarak belirtilememesi veya belirli bir iş akışını veya modelleme alışkanlığını uygulamak için teknik nedenlerden dolayı mıdır? – cip22

+0

Nedeni, sorgu planını oluşturma süreciyle ilgili olması gerektiğine inanıyorum. Her bir Cypher sorgusu, daha sonra önbelleğe alınan bir yürütme planı olarak derlenir, böylece sorguda bir dahaki sefere plan yeniden kullanılabilir. Ancak, ilişki türü veya düğüm etiketi parametrelendirilirse, sorgu planı önbelleğe alınamaz (çünkü yürütme planı ilişki türleri/düğüm etiketleri ile değişebilir). –

+0

Bir çekicilik gibi çalışır, teşekkür ederim! – cip22