Migrar dados de um arquivo CSV no Drupal 8/9 - OSTraining
Publicados: 2022-06-29O 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!
Passo # 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:
composer require 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
Isso baixa o arquivo chamado drush.phar
do GitHub.
- Digite o seguinte para tornar o arquivo executável:
chmod +x drush.phar
- Tipo :
sudo mv drush.phar /usr/local/bin/ drush
Isso moverá o arquivo .phar para seu $PATH e executará o Drush como um comando global.
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
- Tipo :
drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->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 title
é 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.
delimiter
e enclosure
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
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.
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 ).
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!