Datavin3

Exporta datos desde Neo4j utilizando Apache Hop - Neo4j Cypher

Escrito por Adalennis Buchillón Soris | 4 de marzo de 2024 7:00:00 Z
Exporta datos desde Neo4j utilizando Apache Hop y Neo4j Cypher. Optimiza el manejo de tus datos con nuestra guía paso a paso.

Introducción

¡Hola! En este te guiaremos en cómo exportar datos de una base de datos de 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 una comprensión básica del modelo de grafos de propiedades es el único requisito para completar la tarea.

La idea es exportar datos de una base de datos Neo4j utilizando el transformador (plugin) Neo4j Cypher y cargar los datos en archivos CSV. 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:

  1. Primero, necesitamos identificar los datos que vamos a exportar y el formato.
  2. Implementar una canalización (pipeline) para obtener las etiquetas de los nodos y ejecutar otra canalización (pipeline) para generar los archivos CSV.
  3. Implementar una canalización (pipeline) para extraer los datos de los nodos y cargarlos en los archivos CSV.

La base de datos de grafo

Vamos a utilizar una base de datos Neo4j de ejemplo creada en publicaciones anteriores. Puedes consultar Importando datos relacionales a Neo4j con Apache Hop - Graph Output y Importación de Datos Relacionales a Neo4j usando Apache Hop - Neo4j Output.

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

El esquema del grafo dvdrental:

Esquema de la base de datos grafo 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 formato JSON.

Paso 2: Implementar una canalización (pipeline) para obtener las etiquetas de los nodos

Para tener la menor cantidad de código posible, implementaremos solo dos canalizaciones (pipelines) para completar la tarea. ¿Cómo? Porque en Apache Hop podemos utilizar el plugin Ejecutor de Pipeline (Pipeline executor).

Veámoslo en una imagen:

Implementación de Pipeline executor

La primera canalización (pipeline) obtendrá todas las etiquetas de nodo ejecutando una consulta Cypher y luego ejecutará otro pipeline (usando el transformador Ejecutor de Pipeline) para generar los archivos CSV. Generaremos un archivo CSV por cada etiqueta de nodo.

Pipeline export_labels.hpl

La segunda canalización (pipeline) se utiliza como una plantilla y extraerá los datos del nodo mediante una consulta Cypher para generar un archivo CSV.

Pipeline export_nodes.hpl

Configuremos la canalización (pipeline) export_labels.hpl

Transformación Neo4j Cypher

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

Pestaña Options

Establece el nombre del transformador y selecciona la conexión a la base de datos de Neo4j.

Transformation Neo4j Cypher - Pestaña Options

 

  • Nombre de la transformación (Transform name): el nombre de esta transformación en la canalización (pipeline) (write-graph).
  • Conexión Neo4j (Neo4j Connection): select the Neo4j connection to write the graph to (neo4j-connection).

Pestaña Cypher

Escribe la consulta Cypher.

Consulta Cypher
 
CALL db.labels;
Neo4j Cypher - Pestaña Cypher
 

Pestaña Returns

Utiliza la opción "Obtener campos de salida" (Get Output Fields) para mostrar los campos de resultado de la consulta.

Neo4j Cypher - Pestaña Return
Si previsualizas (Preview) los resultados, deberías ver todas las etiquetas de nodos:

 

Previsualiza Neo4j Cypher

Ahora, volviendo a la canalización (pipeline), ya tenemos la primera transformación configurada, por lo que podemos obtener las etiquetas, pero necesitamos construir una consulta Cypher para obtener los datos de los nodos para cada etiqueta. Para hacerlo, utilizamos el plugin de JavaScript, la segunda transformación en la canalización (pipeline).

 

Pipeline export_labels.hpl

Transformación JavaScript

A continuación, configure la transformación JavaScript para construir las consultas Cypher. Construya las consultas Cypher concatenando el código con el campo de etiqueta.

 
Transformación JavaScript
 

Si previsualizas (Preview) los resultados, deberías ver la consulta Cypher para obtener los datos del nodo según la etiqueta::

Previsualiza JavaScript
 

Transformación Pipeline executor

Finalmente, necesitamos ejecutar otra canalización (pipeline) que obtenga los datos de la consulta Cypher y cargue los datos en un archivo CSV. Utilizamos el complemento Ejecutor de canalización (Pipeline executor) con los campos etiqueta y cypher como parámetros

Pipeline export_labels.hpl
 

Establece la ruta hacia la nueva canalización (pipeline) y añade los parámetros.

🗒 Ten en cuenta que la canalización (pipeline) se ejecutará una vez por cada fila en el flujo de datos: (labelcypher).

Transformación Pipeline executor
 

Paso 3: Implementa una canalización (pipeline) para escribir las etiquetas de los nodos

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

Pipeline export_nodes.hpl
 
Transformación Get variables
 
Primero, configuramos el transformador Obtener variables (Get variables) para obtener el parámetro ${CYPHER} recibido de la primera canalización (pipeline), ya que lo utilizaremos en el próximo transformador.
 
 
Transformación Get variables
  • Nombre de la transformación (Transform name): elige el nombre del transformador (get-cypher).
  • Nombre (Name): elige el nombre del campo (cypher).
  • Variable: establece la variable para obtener el valor (${CYPHER}).
  • Tipo (Type): especifica el tipo de campo (String).

Transformación Neo4j Cypher

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

Pestaña Options

Transformación Neo4j Cypher - Pestaña Options
 
  • Nombre de la transformación (Transform name): establezca el nombre del transformador.
  • Marque la opción Obtener Cypher del campo de entrada (Get Cypher from the input field) y seleccione el campo cypher.

Pestaña Returns

Configure la salida basada en el retorno de la consulta:

MATCH (n:Language) RETURN n;

Transformación Neo4j Cypher - Pestaña Returns

Transformación Text file output

Finalmente, configura la transformación Text file output.

Pestaña File


Transformación Text file output - Pestaña File
Utiliza la variable ${OUTPUT_DIR} añadida al archivo de entorno de desarrollo (env_dev.json) y la variable ${LABEL} para establecer la ruta del archivo de salida.
 
Pestaña Fields
Transformación Text file output - Pestaña Fields

  • Nombre (Name): el campo de salida en la consulta Cypher (n).
  • Tipo (Type): establece el tipo de datos (String).

Los archivos CSV generados

 
Pipeline export_nodes.hpl
Si la canalización (pipeline) principal se ejecuta con éxito, obtendrás un CSV que contiene los datos de cada tipo de nodo:
  • Actor.csv
  • Category.csv
  • Film.csv
  • Language.csv