Datavin3

Importando datos relacionales a Neo4j con Apache Hop - Graph Output

Escrito por Adalennis Buchillón Soris | 5 de febrero de 2024 13:45:00 Z

Importe datos relacionales a Neo4j utilizando Apache Hop. Transforme sus datos con el complemento Graph Output.

Introduction

Hola y bienvenido a este tutorial sobre cómo importar datos relacionales en una base de datos Neo4j usando Apache Hop.

Si estás aquí, supongo que ya conoces Neo4jApache Hop, digamos que tener una comprensión básica del modelo de grafo de propiedades es el único requisito para completar la tarea.

 

La idea es exportar datos de un sistema de base de datos relacional (usaremos PostgreSQL en este caso) e importar los datos en una base de datos Neo4j (base de datos de grafo) mediante la transformación Neo4j Graph Output (plugin de Apache Hop).

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

Podemos dividir la tarea en pequeñas piezas:

  1. Primero, necesitamos traducir el esquema relacional a un modelo de grafo.
  2. Luego, configuramos o diseñamos la traducción en Apache Hop. Creamos un objeto de metadatos del modelo de grafo en Apache Hop.
  3. Finalmente, implementamos un pipeline en Apache Hop para extraer los datos de la base de datos relacional y cargar los datos en la base de datos Neo4j.

También puedes revisar nuestro post Apache Hop: Importación de datos relacionales en Neo4j - Neo4j Output, que es similar, pero en ese caso, cargamos todos los nodos, no solo los nodos con al menos una relación y usamos otro plugin de Apache Hop: Neo4j Output.

La base de datos relacionales

Vamos a utilizar una muestra de la base de datos PostgreSQL. La base de datos dvdrental representa los procesos comerciales de una tienda de alquiler de DVD, incluyendo datos sobre las películas, actores y datos demográficos del personal.

 

🗒 Para mantener el grafo más pequeño, elegimos algunas de las entidades más relevantes para nuestro grafo y que probablemente se beneficiarían al comprender las relaciones en nuestro ejemplo.

El modelo de datos relacional primero debe convertirse en un modelo de datos de grafo. Al construir un modelo de grafo a partir de un modelo relacional, hay algunas pautas estándar a seguir.

Paso 1: Traducir el esquema relacional al esquema de grafo

Basándonos en esto, convertimos nuestro modelo relacional a un modelo de grafo.

Nodos and Etiquetas

  • Cada fila en nuestra tabla Actor se convierte en un nodo en nuestro grafo con Actor como etiqueta.
  • Cada fila en nuestra tabla Film se convierte en un nodo con Film como etiqueta.
  • Cada fila en nuestra tabla Category se convierte en un nodo con Category como etiqueta.
  • Cada fila en nuestra tabla Language se convierte en un nodo con Language como etiqueta.

Relaciones

  • La unión entre Actor y Film se convierte en una relación llamada ACTS_IN.
  • La unión entre Film y Category se convierte en una relación llamada BELONGS_TO.
  • La unión entre Film y Language se convierte en una relación llamada IN.

Si dibujamos nuestra traducción en una pizarra, tenemos este modelo de datos de grafo.

Paso 2: Crea el modelo de grafo en Apache Hop

Puedes construir un modelo de grafo de Neo4j en Apache Hop como un objeto de metadatos. Un modelo de grafo en Apache Hop te permite crear nodos con sus atributos, así como las conexiones entre estos nodos.

La pestaña Neo4j Graph Output transformación permite mapear los campos de entrada a propiedades usando un modelo de grafo.

Así es como se configura el modelo de grafo dvdrental.

Pestaña Modelo

  • Nombre del modelo: establece el nombre del modelo de grafo (dvdrental).

Pestaña Nodos

 
  • Nombre: especifica el nombre del nodo (Actor).
  • Etiquetas: elige el nombre de la etiqueta (Actor).
  • Propiedades: establece las claves de propiedad (actor_id, last_name, first_name) y los tipos de propiedad (Integer, String, String).
  • Primario: especifica la clave primaria (actor_id).

Como hicimos para el nodo Actor, configura una entrada para el resto de los nodos: Film, Category y Language.

Pestaña Relaciones

Configura todas las relaciones especificando los campos:

  • Nombre: especifica el nombre de la relación (ACTS_IN).
  • Etiqueta: establece el nombre de la etiqueta para la relación (ACTS_IN).
  • Origen: especifica el nodo de origen de la relación (Actor).
  • Destino: especifica el nodo de destino de la relación (Film).

Como hicimos para la relación ACTS_IN, configura una entrada para el resto de las relaciones: BELONGS_TO e IN.

Pestaña Grafo

Puedes verificar visualmente el modelo que acabas de crear.

Paso 3: Carga los datos en Neo4j

Los datos ahora se pueden importar en la base de datos Neo4j. Usando una entrada de tabla y una transformación Neo4j Graph Output, construimos un pipeline de Apache Hop:

Usando una conexión PostgreSQL y la transformación Table Input, recuperamos los datos de la base de datos dvdrental:
 

Consulta SQL:

SELECT a.actor_id,
a.first_name,
a.last_name,
f.film_id,
f.title,
f.description,
f.rental_rate,
c.category_id,
c.name as category,
l.language_id,
l.name as language
FROM public.actor a
JOIN film_actor fa ON fa.actor_id = a.actor_id
JOIN film f ON f.film_id = fa.film_id
JOIN film_category fc ON fc.film_id = f.film_id
JOIN category c ON c.category_id = fc.category_id
JOIN language l ON l.language_id=f.language_id;


La transformación Neo4j Graph Output permite ingresar datos en la base de datos Neo4j dvdrental utilizando el modelo de grafo dvdrental de Neo4j como referencia.

  • Nombre de la transformación: elige un nombre para esta transformación en el pipeline (write-graph).
  • Conexión Neo4j: selecciona la conexión Neo4j para escribir el grafo (neo4j-connection).
  • Modelo de grafo: selecciona el modelo de grafo que creamos (dvdrental).
  • Campos: para mapear los campos de entrada-salida, puedes usar la opción Map fields.

Solo tenemos que mapear los conceptos siguiendo las mismas reglas.

Puedes seleccionar los campos y hacer clic en la opción Añadir o utilizar la opción Adivinar para generar todos los mapeos.

El mapeo se ve así en la imagen:

Ahora estás listo para ejecutar el pipeline:

El grafo de conocimiento de dvdrental

Si tu pipeline se ejecuta con éxito, obtendrás una base de datos de grafo que contiene tus datos de dvdrental.

Vamos a explorar la base de datos de grafo que acabas de cargar.


Ejecuta el siguiente código Cypher para ver el esquema del grafo:

 

Cypher

CALL db.schema.visualization;

Ejecuta el siguiente código Cypher para ver algunos de los nodos:

Cypher

MATCH (n) RETURN n LIMIT 15;