Migrar datos desde un archivo CSV en Drupal 8/9 - OSTraining
Publicado: 2022-06-29El proceso de migración de datos a una base de datos de Drupal desde un archivo CSV se puede realizar a través de la API de migración integrada de Drupal y tres módulos personalizados adicionales (Migrate Source CSV, Migrate Plus y Migrate Tools).
Esto se conoce como el proceso ETL (Extraer – Transformar – Cargar), en el que los datos se obtienen de una fuente en el primer paso, se transforman en el segundo paso y finalmente se cargan en su destino en la base de datos de Drupal en el tercer paso.
Este tutorial explicará la creación de 12 nodos de libros para una base de datos de biblioteca. ¡Sigue leyendo para aprender cómo!

Paso # 1: instale Drush y los módulos necesarios
Para ejecutar migraciones en Drupal, necesitamos Drush. Drush no es un módulo de Drupal, sino una interfaz de línea de comandos para ejecutar comandos de Drupal. Para instalar la última versión de Drush,
- Abra la aplicación de terminal de su sistema
- Coloque el cursor fuera del directorio
/web
. - Tipo:
composer require drush/drush
Esto instalará Drush dentro del directorio vendor/bin/drush
de su instalación de Drupal. Sin embargo, es engorroso escribir vendor/bin/drush
en lugar de drush
cada vez que desea ejecutar un comando de drush.
El iniciador de Drush permite ejecutar la versión específica de Drush de cada instalación de Drupal por proyecto.
¿Por qué esto tiene sentido?
Cada proyecto tiene requisitos diferentes, las versiones específicas de Drush ayudan a evitar problemas de dependencia. Es posible que algunos módulos de contribución no funcionen correctamente con la última versión de Drush.
Las instrucciones específicas para los sistemas OSX y Windows se pueden encontrar aquí: https://github.com/drush-ops/drush-launcher#installation—phar
Para un sistema Linux:
- Escriba lo siguiente para descargar el archivo llamado drush.phar de GitHub:
wget -O drush.phar https://github.com/drush-ops/drush-launcher/releases/latest/download/drush.phar
Esto descarga el archivo llamado drush.phar
de GitHub.

- Escriba lo siguiente para hacer que el archivo sea ejecutable:
chmod +x drush.phar
- Escriba :
sudo mv drush.phar /usr/local/bin/ drush
Eso moverá el archivo .phar a su $PATH y ejecutará Drush como un comando global.
Ahora es el momento de instalar los módulos contribuidos necesarios para realizar la migración.
- Escribe lo siguiente:
composer require drupal/migrate_tools composer require drupal/migrate_source_csv
Una vez que Composer haya terminado de descargar los módulos,
- Abra el backend de Drupal en su navegador
- Haga clic en Extender
- Habilite Migrar , Migrar Plus , Migrar herramientas y Migrar CSV de origen
- Haga clic en Instalar

Paso # 2 - Más sobre el proceso ETL
El proceso de extracción, transformación y carga de datos se puede lograr definiendo la migración en un archivo .yml y luego ejecutándolo con un comando Drush, para que la base de datos de Drupal se pueda completar correctamente.
Hay algunos datos importantes a tener en cuenta:
- Cada uno de los pasos se realiza a través de plugins de Drupal.
- Solo puede usar un complemento en el primer paso (definición de origen, es decir, extraer) y un complemento en el último paso (definición de destino, es decir, cargar) del proceso.
- En otras palabras, solo puede obtener datos de una fuente (archivo CSV, fuente JSON, etc.) y almacenarlos en Drupal solo en un paquete de entidades en particular, por ejemplo, Artículo, Página, un tipo de contenido personalizado, un usuario o un entidad de configuración, también.
- Puede usar tantos complementos como sea necesario para modelar los datos de modo que coincidan con el formato esperado por Drupal.
- Drupal tiene por defecto una lista de complementos de origen/proceso/destino que se pueden usar dentro del archivo de definición.
Para ver una lista de todos los complementos de origen,
- Abre la ventana de tu terminal
- Tipo :
drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"

Aviso : el complemento csv está ahí porque ya hemos habilitado el módulo Migrar fuente CSV.
Para ver una lista de todos los complementos de proceso,
- Escribe lo siguiente:
drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"
Esa lista es un poco más larga, recuerde que puede usar tantos complementos como necesite en el paso del proceso.

Para ver una lista de todos los complementos de destino,
- Escribe lo siguiente:
drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->getDefinitions()));"

Paso #3 – Crea el Tipo de Contenido
- Haga clic en Estructura > Tipos de contenido > Agregar tipo de contenido
- Crear el tipo de contenido 'Libro'
- Haga clic en Guardar y administrar campos
- Use la fila de título del archivo CSV para crear los campos
Voy a concatenar los valores de las columnas número_edición y editor, por lo que solo necesito un campo en la base de datos para este propósito.

Aviso: los nombres de los campos (nombres de las máquinas) no tienen que coincidir exactamente con los nombres de las columnas del archivo CSV, pero tiene sentido relacionarlos al menos con palabras similares, lo que facilita la asignación de campos en el paso del proceso.

El campo de title
es obligatorio para todos los nodos de Drupal, por lo que no es necesario crear un campo de título. Puede dejar el campo del cuerpo intacto o puede eliminarlo, depende de lo que planee hacer con su tipo de contenido en particular.
Paso # 4 – El Archivo de Definición de Migración
Paso de origen
- Abra su editor de código preferido
- Escribe lo siguiente:
id: my_first_migration label: Migrate terms from a CSV source source: plugin: csv path: public://csv/library.csv header_row_count: 1 ids: [id] delimiter: ';' enclosure: "'"
El id del archivo coincide con su nombre.
Estamos usando el complemento csv
del módulo contrib Migrate Source CSV en la sección de fuente.
El número 1 en la opción header_row_count
indica el valor de los títulos de las columnas (todos se colocan en la primera fila).
La definición de ids
proporciona el identificador único para cada registro en el archivo CSV, en este caso, la columna id
, que es de tipo integer
. No olvide los corchetes, ya que el módulo espera una matriz aquí.
delimiter
y enclosure
se refieren a la estructura del archivo CSV, en mi caso particular, está delimitado por “;” caracteres, mientras que las cadenas se encierran entre comillas simples “'“.

Note también, la definición de un camino. Ahí es donde debe colocar el archivo CSV, para que Drupal pueda leer los datos de él.
- Abra su aplicación de terminal.
- Tipo :
mkdir web/sites/default/files/csv cp /home/ path/to /library.csv web/sites/default/files/csv/ chmod -R 777 web/sites/default/files/csv/
Esta voluntad:
- cree un directorio llamado
csv
dentro de la carpeta pública de su instalación de Drupal. - coloque una copia del archivo CSV dentro de ese directorio.
- haga que el archivo sea accesible para todos en el sistema (eso incluye el complemento fuente).
Paso de proceso
Aquí es donde mapeamos cada una de las columnas del archivo CSV con los campos en el tipo de contenido:
process: title: title field_id: id field_author: author field_location: location field_availability: availability field_editor: plugin: concat source: - editor - edition_number delimiter: ' ' type: plugin: default_value default_value: book
Los primeros 5 pares clave/valor en la forma drupal_machine_name: csv_column_name asignan los registros CSV a los campos de la base de datos sin realizar ningún cambio.
El campo field_editor será el resultado de realizar la concatenación de 2 cadenas (los valores dentro de las columnas editor y edition_number ).
La opción de delimitador permite establecer un delimitador entre ambas cadenas, en este caso, un espacio en blanco.
El complemento default_value nos ayuda a definir un tipo de entidad ya que esta información no está disponible en los datos de origen.
Paso de destino
La parte final de este proceso es el paso de destino.
destination: plugin: entity:node
Estamos migrando contenido y cada registro será un nodo.
Paso #5 – Ejecutar la Migración
- Haga clic en Configuración > Sincronización de configuración > Importar > Elemento único
- Seleccione Migración en el menú desplegable
- Pegue el código del archivo .yml en el área de texto
- Haga clic en Importar

- Haga clic en Confirmar para sincronizar la configuración. Recibirá el mensaje "La configuración se importó con éxito"
- Cambie a la aplicación de terminal.
- Escribe lo siguiente:
drush migrate:import my_first_migration

Ahora puede comprobar el contenido de su sitio.

Ha aprendido los principios básicos de la migración de datos de un archivo CSV a Drupal 8/9.
Como ya ha visto, el proceso de migración requiere atención a los detalles, así que asegúrese de trabajar primero en un servidor provisional porque un pequeño error podría romper todo el sitio. Espero que les haya gustado este tutorial.
¡Gracias por leer!