2017-10-01 2 views
1

Je suis incapable de créer des relations d'importation des fichiers .csv dans Neo4jImpossible de créer des relations d'importation dans un csv Neo4j

Les noeuds que j'ai sont pour les fournisseurs médicaux et conditions médicales

La relation est provider- [GOURMANDISE ] -> Condition

Voici un sous-ensemble de mes fournisseurs csv:

Provider,ProviderID,Office,Street,City,State,Zip,Phone 
Dr. Mxxxxi MD,1,The xxx Hospital,1xxx xxx Hwy,Ft Wright,KY,4xxxxx,(xxx) xxx-3304 

Voici un sous-ensemble de mes conditions csv:

condition,conditionID 
Acute Leukemia,1 
Acute Lymphoid Leukemia,2 
Acute Myeloid Leukemia,3 
Adrenal Gland Cancer,4 
.... 

est ici un sous-ensemble de mes relations csv:

ProviderID,ConditionID 
1,1 
1,2 
1,3 
1,4 
1,5 
1,6 
1,7 
1,8 
1,9 
... 

Voici l'importation/créer des déclarations:

// Create providers 
USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///providers.csv" AS row 
CREATE (:Provider {provider: row.Provider, providerID: row.ProviderID, officeName: row.OfficeName, street:row.Street, city:row.City, state:row.State, zip:row.Zip, phone: row.Phone}); 

étiquette Ajouté 1, créé 1 nœud, définissez 7 propriétés, déclaration complétée en 283 ms

// Create conditions 
USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///conditions.csv" AS row 
CREATE (:Condition {Condition: row.condition, ConditionID: 
row.conditionID}); 

Ajouté 100 la Bels, créé 100 nœuds, définir 200 propriétés, déclaration terminée en 262 ms.

Je crée des index:

CREATE INDEX ON :Provider(providerID); 
CREATE INDEX ON :Condition(conditionID); 

C'est l'importation/create de la relation et le résultat:

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///ProviderConditionsTreated.csv" AS row 
MATCH (p:Provider { providerID: row.ProviderID}) 
WITH p 
MATCH (c:Condition { conditionID: p.ConditionID}) 
CREATE (p)-[t:TREATS]->(c); 

(aucune modification, aucun enregistrement)

J'ai aussi essayé avec aucun enregistrement

MATCH (p:Provider { providerID: row.ProviderID}) 
MATCH (c:Condition { conditionID: row.ConditionID}) 
CREATE (p)-[t:TREATS]->(c); 

(aucune modification, aucun enregistrement)

Répondre

3

Je vois deux problèmes avec votre requête d'importation:

  1. La langue Cypher est case-sensitive pour les étiquettes, les types et les noms de propriétés. Dans votre fichier providers.csv, l'attribut ProviderID commence par un caractère majuscule, mais dans le fichier conditions.csv, l'attribut conditionID commence par un minuscule. Tout en les chargeant avec les commandes LOAD CSV, celles-ci sont en fait changées en providerId et ConditionId. Il est préférable de garder ces valeurs cohérentes à la fois pour les fichiers CSV et pour les propriétés de vertex. Vous ne devriez pas utiliser WITH p car vous ne pourrez plus accéder à la variable row. Ceci est corrigé dans votre dernière requête. Cependant, même cela peut être simplifié en utilisant une seule clause MATCH.

En conclusion, la requête suivante a fonctionné pour moi:

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///relations.csv" AS row 
MATCH 
    (p:Provider { providerID: row.ProviderID}), 
    (c:Condition { ConditionID: row.ConditionID}) 
CREATE (p)-[t:TREATS]->(c); 

Créé 4 relations, complétées après 110 ms.

+0

J'ai corrigé les cas et j'ai lancé l'instruction de création de relation et elle fonctionnait parfaitement! Merci Gabor! –

+0

De rien. Merci pour la question détaillée et l'énoncé du problème reproductible. –