Migrar dados de um arquivo CSV no Drupal 8/9
Publicados: 2022-02-16O processo de migração de dados para um banco de dados Drupal a partir de um arquivo CSV pode ser realizado por meio da API Migrate integrada do Drupal e três módulos extras personalizados (Migrate Source CSV, Migrate Plus e Migrate Tools).
Isso é conhecido como o processo ETL (Extract - Transform - Load), no qual os dados são buscados de uma fonte na primeira etapa, transformados na segunda etapa e finalmente carregados em seu destino no banco de dados Drupal na terceira etapa.
Este tutorial explicará a criação de 12 nós de livro para um banco de dados de biblioteca. Continue lendo para saber como!
Etapa # 1 - Instale o Drush e os módulos necessários
Para executar migrações no Drupal, precisamos do Drush. Drush não é um módulo Drupal, mas uma interface de linha de comando para executar comandos Drupal. Para instalar a versão mais recente do Drush,
- Abra o aplicativo de terminal do seu sistema
- Coloque o cursor fora do diretório /web .
- Tipo: compositor requer drush/drush
Isso instalará o Drush dentro do diretório vendor/bin/drush de sua instalação do Drupal. No entanto, é complicado digitar vendor/bin/drush em vez de drush , toda vez que você deseja executar um comando drush.
O iniciador Drush torna possível executar a versão específica do Drush de cada instalação do Drupal por projeto.
Por que isso faz sentido?
Cada projeto tem requisitos diferentes, versões específicas do Drush ajudam a evitar problemas de dependência. Alguns módulos contrib podem não funcionar corretamente com a versão mais recente do Drush.
As instruções específicas para sistemas OSX e Windows podem ser encontradas aqui: https://github.com/drush-ops/drush-launcher#installation---phar
Para um sistema Linux:
- Digite o seguinte para baixar o arquivo chamado drush.phar do GitHub:
wget -O drush.phar
https://github.com/drush-ops/drush-launcher/releases/latest/download/drush.phar
- Digite o seguinte para tornar o arquivo executável: chmod +x drush.phar
- Digite o seguinte para mover o arquivo .phar para seu $PATH e execute Drush como um comando global: sudo mv drush.phar /usr/local/bin/ drush
Agora é hora de instalar os módulos de contribuição necessários para realizar a migração.
- Digite o seguinte:
composer require drupal/migrate_tools
composer require drupal/migrate_source_csv
Assim que o Composer terminar de baixar os módulos,
- Abra o back-end do Drupal no seu navegador
- Clique em Estender
- Ativar Migrate , Migrate Plus , Migrate Tools e Migrate Source CSV
- Clique em Instalar
Etapa # 2 - Mais sobre o processo de ETL
O processo de extração, transformação e carregamento de dados pode ser obtido definindo a migração em um arquivo .yml e, em seguida, executando-o com um comando Drush, para que o banco de dados Drupal possa ser preenchido corretamente.
Existem alguns fatos importantes a serem observados:
- Cada uma das etapas é realizada através de plugins Drupal.
- Você só pode usar um plugin na primeira etapa (definição da fonte, ou seja, Extrair) e um plugin na última etapa (definição de destino, ou seja, Carregar) do processo.
- Em outras palavras, você só pode buscar dados de uma fonte (arquivo CSV, feed JSON etc.) e armazená-los no Drupal apenas em um pacote de entidade específico, por exemplo, Artigo, Página, um tipo de conteúdo personalizado, um usuário ou um entidade de configuração, também.
- Você tem permissão para usar quantos plugins forem necessários para modelar os dados para que correspondam ao formato esperado pelo Drupal.
- O Drupal tem por padrão uma lista de plugins de origem/processo/destino que podem ser usados dentro do arquivo de definição.
Para ver uma lista de todos os plugins de origem,
- Abra a janela do seu terminal.
- Digite o seguinte:
drush ev
"print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"
Essa lista é um pouco maior, lembre-se que você pode usar quantos plugins precisar na etapa do processo.
Para ver uma lista de todos os plugins de destino,
- Tipo :
drush ev
"print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->getDefinitions()));"
Aviso : o plugin csv está lá porque já ativamos o módulo Migrate Source CSV.
Para ver uma lista de todos os plugins de processo,
- Digite o seguinte:
drush ev
"print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"
Essa lista é um pouco maior, lembre-se que você pode usar quantos plugins precisar na etapa do processo.
Para ver uma lista de todos os plugins de destino,
- Digite o seguinte:
drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->getDefinitions()));"

Etapa # 3 - Crie o tipo de conteúdo
- Clique em Estrutura > Tipos de conteúdo > Adicionar tipo de conteúdo
- Crie o tipo de conteúdo 'Livro'
- Clique em Salvar e gerenciar campos
- Use a linha de título do arquivo CSV para criar os campos
Vou concatenar os valores das colunas número_edição e editor, então preciso de apenas um campo no banco de dados para isso.
Atenção: os nomes dos campos (nomes das máquinas) não precisam corresponder exatamente aos nomes das colunas do arquivo CSV, mas faz sentido, pelo menos, relacioná-los com palavras semelhantes - isso facilita o mapeamento dos campos na etapa do processo.
O campo de título é obrigatório para cada nó Drupal, portanto, não há necessidade de criar um campo de título. Você pode deixar o campo do corpo intocado ou pode excluí-lo, depende do que você planeja fazer com seu tipo de conteúdo específico.
Etapa # 4 - O arquivo de definição de migração
Etapa de origem
- Abra seu editor de código preferido
- Digite o seguinte:
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: "'"
O id do arquivo corresponde ao seu nome.
Estamos usando o plugin csv do módulo contrib Migrate Source CSV na seção source.
O número 1 na opção header_row_count indica o valor dos títulos das colunas (todos são colocados na primeira linha).
A definição de ids fornece o identificador exclusivo para cada registro no arquivo CSV, neste caso, a coluna id , que é do tipo integer . Não se esqueça dos colchetes, pois o módulo está esperando um array aqui.
delimitador e anexo referem-se à estrutura do arquivo CSV, no meu caso particular, ele é delimitado por “;” caracteres, enquanto as strings são colocadas entre aspas simples “'”.
Observe também a definição de um caminho. É aí que você deve colocar o arquivo CSV, para que o Drupal possa ler os dados dele.
- Abra seu aplicativo 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/
Isso vai:
- crie um diretório chamado csv dentro da pasta pública de sua instalação do Drupal.
- coloque uma cópia do arquivo CSV dentro desse diretório.
- tornar o arquivo acessível a todos no sistema (isso inclui o plug-in de origem).
Etapa do processo
É aqui que mapeamos cada uma das colunas do arquivo CSV com os campos do tipo de conteúdo:
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
O campo field_editor será o resultado da realização da concatenação de 2 strings (os valores dentro das colunas editor e edition_number ).
Os primeiros 5 pares de chave/valor no formato drupal_machine_name: csv_column_name mapeiam os registros CSV para os campos do banco de dados sem realizar nenhuma alteração.
A opção delimiter permite definir um delimitador entre ambas as strings, neste caso, um espaço em branco.
O plugin default_value nos ajuda a definir um tipo de entidade, pois essa informação não está disponível nos dados de origem.
Etapa de destino
A parte final deste processo é a etapa de destino.
destination:
plugin: entity:node
Estamos migrando o conteúdo e cada registro será um nó.
Etapa # 5 - Execute a migração
- Clique em Configuração > Sincronização de configuração > Importar > Item único
- Selecione Migração na lista suspensa
- Cole o código do arquivo .yml na área de texto
- Clique em Importar
- Clique em Confirmar para sincronizar a configuração. Você receberá a mensagem “A configuração foi importada com sucesso”
- Mude para o aplicativo do terminal.
- Digite o seguinte:
drush migrate:import my_first_migration
Agora você pode verificar o conteúdo do seu site.
Você aprendeu os princípios básicos da migração de dados de um arquivo CSV para o Drupal 8/9.
Como você já viu, o processo de migração requer atenção aos detalhes, portanto, certifique-se de trabalhar primeiro em um servidor de teste, pois um pequeno erro pode quebrar todo o site. Espero que tenham gostado deste tutorial.
Obrigado por ler!