Migrate Plus
Proporciona extensiones a la funcionalidad del framework de migración del core de Drupal con entidades de configuración, plugins adicionales y ejemplos.
migrate_plus
Install
composer require 'drupal/migrate_plus:^6.0'
Overview
Migrate Plus es un módulo de extensión integral para el framework Migrate del core de Drupal. Proporciona mejoras esenciales incluyendo la capacidad de almacenar configuraciones de migración como entidades de configuración, permitiendo que sean cargadas, modificadas y exportadas de forma flexible a través del sistema de gestión de configuración de Drupal.
El módulo introduce grupos de migración para organizar migraciones relacionadas y compartir configuración común. Proporciona tres nuevos tipos de plugins: plugins de autenticación para asegurar peticiones HTTP, plugins de obtención de datos para recuperar contenido de diversas fuentes, y plugins de análisis de datos para procesar formatos de datos JSON, XML y SOAP.
Además, Migrate Plus incluye más de 20 plugins de proceso para transformar datos durante la migración, plugins de fuente para fuentes de datos basadas en URL y tablas SQL, y un plugin de destino para escribir directamente en tablas de base de datos. El módulo también proporciona un sistema de eventos para la manipulación orientada a objetos de los datos de origen antes del procesamiento.
Features
- Almacenamiento de entidades de configuración para migraciones que permite definiciones de migración basadas en YAML que pueden exportarse/importarse a través del sistema de configuración de Drupal
- Grupos de migración para organizar migraciones y compartir configuración común entre múltiples migraciones
- Plugin de fuente URL que soporta recuperación de datos basada en archivos y HTTP con fetchers y parsers conectables
- Plugins de análisis de datos JSON, XML y SOAP para analizar varios formatos de datos de fuentes remotas
- Plugins de autenticación HTTP incluyendo métodos de autenticación Basic, Digest, NTLM y OAuth2
- Plugins de proceso entity lookup y entity generate para emparejar y crear entidades durante la migración
- Más de 20 plugins de proceso incluyendo reemplazo de cadenas, manipulación DOM, operaciones de arrays y procesamiento condicional
- Plugins de fuente y destino de tabla para migrar datos hacia/desde tablas de base de datos arbitrarias
- Evento PREPARE_ROW para manipulación orientada a objetos de los datos de origen antes de que comience el procesamiento
- Soporte para paginación en fuentes JSON con múltiples tipos de paginador (urls, cursor, page, paginator)
Use Cases
Importar contenido desde una API JSON
Use el plugin de fuente 'url' con el fetcher de datos 'http' y el parser de datos 'json' para importar contenido desde APIs REST. Configure la autenticación si es necesario, especifique el item_selector para localizar datos dentro de la estructura JSON, y mapee campos usando el pipeline de proceso. Soporta paginación a través de varios tipos de paginador incluyendo paginación basada en cursor y en número de página.
Migrar datos desde feeds XML externos
Use la fuente 'url' con el parser 'xml' o 'simple_xml'. El parser 'xml' usa XMLReader para streaming eficiente en memoria de archivos grandes, mientras que 'simple_xml' proporciona soporte completo de XPath para archivos más pequeños. Configure item_selector usando sintaxis similar a XPath para identificar elementos a importar.
Buscar y crear términos de taxonomía durante la migración
Use el plugin de proceso 'entity_lookup' para encontrar términos existentes por nombre, o 'entity_generate' para crear términos que no existen. Configure bundle_key y bundle para coincidir con el vocabulario. Esto es ideal para poblar campos de referencia a entidades durante la migración de nodos.
Migrar datos entre tablas de base de datos
Use el plugin de fuente 'table' para leer desde cualquier tabla SQL y el plugin de destino 'table' para escribir en tablas no registradas con la API de Schema de Drupal. Configure id_fields para seguimiento y fields para mapeo de columnas. Soporta inserciones por lotes para rendimiento.
Procesar contenido HTML durante la migración
Use el plugin de proceso 'dom' para convertir cadenas HTML a objetos DOMDocument, luego aplique transformaciones usando los plugins dom_remove, dom_select, dom_str_replace y dom_apply_styles. Exporte de vuelta a cadena usando 'dom' con método export.
Compartir configuración entre múltiples migraciones
Cree una entidad de configuración migration_group con shared_configuration conteniendo ajustes comunes como conexión a base de datos de origen, credenciales de autenticación, o mapeos de campos predeterminados. Todas las migraciones en el grupo heredan esta configuración.
Migrar archivos desde datos blob
Use el plugin de proceso 'file_blob' cuando los datos de origen contienen contenido binario de archivos (como imágenes codificadas en base64). Decodifique los datos primero usando el plugin callback con base64_decode, luego use file_blob para crear archivos en URIs especificadas.
Migración condicional de campos
Use 'skip_on_value' para omitir filas o campos basándose en valores de origen. Use 'gate' para lógica condicional más compleja donde un campo diferente controla si el valor actual pasa.
Pipelines de proceso reutilizables
Cree archivos YAML en module/migrations/process/ conteniendo cadenas de plugins de proceso comunes. Referencie usando el plugin de proceso 'snippet' con configuración de module y path. Esto promueve la reutilización de código y mantenibilidad.
Tips
- Use grupos de migración para organizar migraciones relacionadas y compartir configuración común como conexiones de base de datos o URLs de origen
- El plugin 'entity_generate' extiende 'entity_lookup' - si solo necesita encontrar entidades existentes, use 'entity_lookup' para mejor rendimiento
- Para archivos XML grandes, use el parser 'xml' (XMLReader) en lugar de 'simple_xml' para evitar problemas de memoria
- Suscríbase al evento MigrateEvents::PREPARE_ROW para manipulación compleja de filas en lugar de escribir plugins de proceso personalizados
- Al depurar migraciones, use 'drush migrate:import --idlist' para probar filas específicas
- El plugin 'snippet' ayuda a mantener los principios DRY permitiendo reutilización del pipeline de proceso entre migraciones
- Use 'access_check: false' en entity_lookup al migrar como usuario de confianza para evitar fallos de búsqueda relacionados con permisos
- Configure batch_size en el destino table para mejorar el rendimiento al importar conjuntos de datos grandes
- Use el plugin transpose para combinar arrays paralelos antes de sub_process cuando los datos de origen tienen arrays relacionados
Technical Details
Hooks 2
hook_migration_plugins_alter
Implementado por migrate_plus para integrar configuración compartida de grupo en las migraciones, establecer la clase de migración predeterminada, convertir idMap nulo a array vacío, y eliminar el prefijo del deriver para migraciones basadas en entidades de configuración.
hook_migrate_prepare_row
Implementado por migrate_plus para despachar el evento PREPARE_ROW, permitiendo respuestas orientadas a objetos para la preparación de filas.