refcard - Cómo incluir propiedades con valores NULL utilizando Neo4j MERGE
neo4j tutorial (1)
Tengo una tabla de nodo y una tabla Edge, ambas disponibles como archivos CSV. Logré cargar la tabla de Node por:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM ''file:///NodesETL.csv'' AS line
CREATE (:InfoNodes {id: toString(line.id), description: toString(line.description)})
Esta consulta crea los InfoNodes con los valores de campo del archivo CSV como propiedades de: InfoNodes, lo cual está bien.
Los InfoNodes tienen relaciones con otros InfoNodos, por ejemplo, estas relaciones existen entre Nodos con la misma etiqueta. Estas relaciones se almacenan en una tabla Edge disponible como un archivo CSV adicional. Cada fila de esta tabla Edge contiene campos idfrom e idto que definen las relaciones entre InfoNodes en función de su propiedad de id. La tabla Edge contiene también 3 campos adicionales que representan las propiedades de la relación. La primera propiedad es siempre una cadena y nunca NULL, por ejemplo, nunca una cadena vacía. La segunda propiedad y la tercera propiedad, ambas tipo de cadena, pueden tener valores NULL como "". Entonces, la segunda propiedad y / o la tercera propiedad pueden contener valores NULOS. Intento usar esta tabla Edge para crear las relaciones [: RELATIONSHIP {firstproperty :, secondproperty :, thirdproperty:}] entre (: InfoNodes) por:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM ''file:///EdgesETL.csv'' AS line
MATCH (from:InfoNodes{id: toString(line.idfrom)})
MATCH (to:InfoNodes{id: toString(line.idto)})
MERGE (from)-[:RELATION {firstproperty: toString(line.firstproperty), secondproperty: toString(line.secondproperty), thirdproperty: toString(line.thirdproperty)}]->(to)
Este segundo script Cypher da como resultado un error cuando la segunda propiedad y la tercera propiedad en la tabla Edge contienen valores NULL. El mensaje de error de Neo4j es: No se puede fusionar la relación utilizando el valor de propiedad nulo para la segunda propiedad. Cuando elimino del segundo script el segundo campo de propiedad y segunda propiedad: se produce propiedad que el mismo tipo de error mencionando thirdproperty: No se puede fusionar relación usando el valor de propiedad nulo para thirdproperty Cuando elimino los campos y propiedades secondproperty y thirdproperty del script anterior, entonces el [: RELACIONES] se crean relaciones entre InfoNodes, incluidos los campos de la tabla de la primera propiedad almacenados como propiedad principal: propiedad de la relación [: RELACIÓN].
Pregunta: ¿Cómo extender la segunda secuencia de comandos para cargar de la tabla Edge la segunda propiedad y los campos de la tercera propiedad en la propiedad segunda y tercera propiedad de las relaciones [: RELACIÓN], incluidos los valores NULOS?
No se puede fusionar con valores nulos; ''No se puede fusionar el nodo usando el valor de propiedad nulo'' en neo4j describe el mismo problema, pero no responde mi pregunta en el caso de múltiples campos / propiedades con valores NULL.
Querrá volver a revisar la sección MERGE en la guía del desarrollador. Específicamente, en la introducción, se menciona ON CREATE y ON MATCH. Esto le permite establecer propiedades en los casos en que la FUSIÓN resultó en una creación, o cuando en cambio la FUSIÓN coincidía con los elementos existentes.
Por lo general, querrá fusionar solo las propiedades que definen de forma única el objeto, como los ID, y establecer el resto de las propiedades dentro de ON CREATE.
Su consulta después de este cambio podría verse más o menos así:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM ''file:///EdgesETL.csv'' AS line
MATCH (from:InfoNodes{id: toString(line.idfrom)})
MATCH (to:InfoNodes{id: toString(line.idto)})
MERGE (from)-[r:RELATION {firstproperty: toString(line.firstproperty)}]->(to)
ON CREATE SET r.secondproperty = toString(line.secondproperty), r.thirdproperty = toString(line.thirdproperty)