Datavin3

Exportar datos desde Neo4j con Apache Hop - Neo4j Cypher e Inyección de Metadatos

Escrito por Adalennis Buchillón Soris | 11 de marzo de 2024 6:00:00 Z

Facilitate la exportación de datos desde Neo4j utilizando Apache Hop, aprovechando Neo4j Cypher e Inyección de Metadatos. Explore esta guía para procesos eficientes de exportación de datos.

Introducción

Hola a todos, este es un artículo instructivo en el que vamos a explicar cómo exportar datos de una base de datos Neo4j a archivos CSV utilizando el complemento de Apache Hop para Cypher.

Si estás aquí, supongo que ya conoces Neo4j y Apache Hop. Digamos que tener un entendimiento básico del modelo de gráficos de propiedades es el único requisito para completar esta tarea.

La idea es exportar datos de una base de datos Neo4j utilizando la transformación Neo4j Cypher (complemento) y cargar los datos en archivos CSV.

Este artículo es similar a "Apache Hop: exportar datos de Neo4j a CSV - Neo4j Cypher", pero en este caso exportamos los datos en formato de tabla en lugar de formato JSON utilizando la inyección de metadatos.

Puedes encontrar el código y los archivos en el repositorio público how-to-apache-hop.

Podemos dividir la tarea en pequeños pasos:

  • Primero, necesitamos identificar los datos que vamos a exportar y el formato.
  • Implementar una solución de inyección de metadatos con 3 pipelines:
    • Un pipeline para obtener las etiquetas de los nodos y ejecutar el pipeline con inyección de metadatos.
    • Un pipeline para inyectar los metadatos necesarios en una plantilla de pipeline.
    • La plantilla de pipeline para extraer los datos de los nodos y generar los archivos CSV.

Veamos esto en una imagen:

 

Implementamos una solución de inyección de metadatos que puede ser utilizada sin importar la cantidad de etiquetas de nodos, y no necesitas realizar ninguna configuración manual para los campos de entrada y salida.

¿Cómo lo logramos? Utilizamos el complemento de Inyección de Metadatos y el complemento de Ejecución de Pipeline.

El primer pipeline obtendrá todas las etiquetas de nodos ejecutando una consulta Cypher y ejecutará otro pipeline (usando el ejecutor de pipelines) para generar los archivos CSV. Generaremos un archivo CSV por cada etiqueta de nodo.

El segundo pipeline se utiliza para obtener los metadatos necesarios y pasar estos metadatos en tiempo de ejecución a una plantilla de pipeline.

La plantilla extraerá los datos de los nodos utilizando una consulta Cypher y generará un archivo CSV por cada etiqueta de nodo.

La base de datos de grafos

Vamos a utilizar una base de datos de grafos de ejemplo Neo4j creada en publicaciones anteriores.

La base de datos de grafos de dvdrental representa los procesos comerciales de una tienda de alquiler de DVD, incluidos datos sobre las películas, actores y datos demográficos del personal.

El esquema de la base de datos de grafos de dvdrental:

 

Paso 1: Identificar los datos a exportar y el formato

Exportaremos los datos de los nodos en este caso:

  • Actor
  • Film
  • Language
  • Category

Deberíamos obtener como resultado un archivo CSV con los datos de los nodos en un formato de tabla.

Paso 2: Obtener las etiquetas de los nodos y ejecutar la inyección de metadatos

 

Primero, configure una transformación Cypher para obtener las etiquetas de los nodos.

Pestaña de opciones

Establezca el nombre de la transformación y seleccione la conexión a la base de datos Neo4j.


  • Nombre de la transformación: el nombre para esta transformación en el flujo de trabajo (read-labels).

  • Conexión de Neo4j: selecciona la conexión de Neo4j para escribir en el gráfico (neo4j-connection).

 

Pestaña Cypher

Escribe la consulta Cypher.

Consulta Cypher
 
Call db.labels;
 
Pestaña Returns
 

Utiliza la opción Get Output Fields para mostrar los campos de resultados de la consulta.

 
Si previzualizas (Preview) los resultados, deberías ver todas las etiquetas de nodo:
 
 
Luego, necesitamos ejecutar otro pipeline que inyecte los metadatos en la plantilla. Utilizamos el plugin de Ejecución de pipeline (Pipeline execution) con los campos label y cypher como parámetros.
 
 
Establece la ruta a la nueva canalización y agrega los parámetros.
 
 
🗒 Ten en cuenta que la canalización se ejecutará una vez por fila en el flujo de datos (label, cypher).

 

Paso 3: Implementar una canalización para inyectar los metadatos

La segunda canalización extraerá los datos del nodo y generará un archivo CSV con el nombre de la etiqueta.


Primero, obtenemos el parámetro ${LABEL} recibido de la primera canalización porque lo usaremos en transformaciones futuras.


  • Nombre (Name): el nombre del campo (label).
  • Variable: la variable para obtener el valor (${LABEL}).
  • Tipo (Type): especifica el tipo de campo (String).

Demos un paso atrás. Hasta ahora, tenemos todas las etiquetas (labels) que necesitamos para construir la consulta Cypher para pasar como metadatos a la plantilla de la canalización, pero también necesitamos construir los campos de salida y los tipos de datos para cada consulta Cypher.

Para hacerlo, necesitamos todas las propiedades asociadas con una etiqueta (label).

Ejemplo

 

Configure una transformación Cypher para obtener las propiedades por etiqueta (label).

Pestaña Options

  • Conexión Neo4j (Neo4j Connection): selecciona la conexión (neo4j-connection).

Pestaña Cypher

  • Establece la consulta Cypher para obtener las propiedades.

Consulta Cypher

CALL db.schema.nodeTypeProperties;

Pestaña Return

  • Utiliza la opción Obtener campos de salida (Get Output Fields) para configurar la salida de la consulta.

Si ejecutas la consulta en tu base de datos Neo4j, obtendrás el siguiente resultado:

 

Ahora, tenemos todas las etiquetas almacenadas en el campo de etiqueta y todas las propiedades, por lo que podemos:

  • Filtrar por etiqueta y obtener solo las propiedades asociadas con la etiqueta que recibimos del canal anterior en un momento determinado.
  • Modificar los campos propertyName y propertyTypes eliminando los caracteres ("", [, ]) y asignando algunos tipos de datos a los tipos de datos de Hop (Long, Double) para construir la consulta Cypher que pasaremos como metadatos a la plantilla del canal.

Aplicamos todos estos cambios en el siguiente bloque de transformaciones:

 

Puedes verificar los resultados revisando los registros. Para la etiqueta (Label) Language, por ejemplo, obtenemos los siguientes valores:

 

Finalmente, configuramos la transformación de Inyección de Metadatos. Pero, ¿qué campos necesitamos como metadatos?

La plantilla de la canalización extraerá los datos de nodo de la base de datos de grafos dvdrental con una transformación Neo4j Cypher y generará un archivo CSV con una transformación de salida de archivo de texto.

 
  • Neo4j Cypher: Para esta transformación, necesitamos establecer la consulta Cypher que construimos como cypher_query y las propiedades de nodo que almacenamos en el campo concat.
 

Transformación Text file output

Para esta transformación, necesitamos establecer los nombres de los campos de salida que almacenamos en concat y los tipos de campos que almacenamos en propertyTypes.
 

Para hacerlo, configure la transformación de Inyección de Metadatos de la siguiente manera:

  • Navegue y seleccione la plantilla de canalización.
  • Establezca el campo cypher_query para inyectar el campo Cypher.

 

  • Set the return fields for the Neo4j Cypher transform.
  • Establezca los campos de retorno para la transformación de Cypher de Neo4j.

Paso 4: Crear una canalización para ser utilizada como plantilla

A continuación, configure el transformador Neo4j Cypher para obtener los datos utilizando el campo cypher previamente creado que almacena la consulta.

Pestaña Options

  • Conexión Neo4j (Neo4j Connection): selecciona la conexión (neo4j-connection).

Finalmente, configura la transformación Salida de texto (Text output).

Pestaña File


Utilice la variable ${OUTPUT_DIR} añadida al archivo de entorno de desarrollo y la variable ${LABEL} para establecer la ruta de salida del archivo.

 

Los archivos CSV generados

 

Si la canalización principal se ejecuta correctamente, obtendrás un archivo CSV que contiene los datos de cada tipo de nodo:

  • Actor.csv
  • Category.csv
  • Film.csv
  • Language.csv