Перенос данных из CSV-файла в Drupal 8/9 — OSTraining

Опубликовано: 2022-06-29

Процесс переноса данных в базу данных Drupal из CSV-файла можно выполнить с помощью встроенного в Drupal API Migrate и трех дополнительных настраиваемых модулей (Migrate Source CSV, Migrate Plus и Migrate Tools).

Это известно как процесс ETL (извлечение — преобразование — загрузка), в котором данные извлекаются из одного источника на первом этапе, преобразуются на втором этапе и, наконец, загружаются в место назначения в базе данных Drupal на третьем этапе.

В этом руководстве объясняется создание 12 книжных узлов для базы данных библиотеки. Продолжайте читать, чтобы узнать, как!

Шаг № 1 — Установите Drush и необходимые модули

Для выполнения миграций в Drupal нам понадобится Drush. Drush — это не модуль Drupal, а интерфейс командной строки для выполнения команд Drupal. Чтобы установить последнюю версию Drush,

  • Откройте терминальное приложение вашей системы
  • Поместите курсор вне каталога /web .
  • Тип: composer require drush/drush

Это установит Drush в каталог vendor/bin/drush вашей установки Drupal. Однако вводить vendor/bin/drush вместо drush каждый раз, когда вы хотите выполнить команду drush, неудобно.

Средство запуска Drush позволяет запускать определенную версию Drush каждой установки Drupal для каждого проекта.

Почему это имеет смысл?

Каждый проект имеет разные требования, определенные версии Drush помогают избежать проблем с зависимостями. Некоторые модули contrib могут некорректно работать с последней версией Drush.

Конкретные инструкции для систем OSX и Windows можно найти здесь: https://github.com/drush-ops/drush-launcher#installation—phar

Для системы Linux:

  • Введите следующее, чтобы загрузить файл с именем drush.phar с GitHub:
 wget -O drush.phar https://github.com/drush-ops/drush-launcher/releases/latest/download/drush.phar

Это загружает файл с именем drush.phar с GitHub.

  • Введите следующее, чтобы сделать файл исполняемым: chmod +x drush.phar
  • Тип : sudo mv drush.phar /usr/local/bin/ drush

Это переместит файл .phar в ваш $PATH и запустит Drush как глобальную команду.

Пришло время установить необходимые дополнительные модули для выполнения миграции.

  • Введите следующее:
 composer require drupal/migrate_tools composer require drupal/migrate_source_csv

Как только Composer завершит загрузку модулей,

  • Откройте бэкенд Drupal в браузере.
  • Нажмите Продлить
  • Включить Migrate , Migrate Plus , Migrate Tools и Migrate Source CSV
  • Нажмите Установить

Шаг № 2 — Подробнее о процессе ETL

Процесс извлечения, преобразования и загрузки данных можно выполнить, указав миграцию в файле .yml, а затем выполнив ее с помощью команды Drush, чтобы можно было правильно заполнить базу данных Drupal.

Следует отметить несколько важных фактов:

  1. Каждый из шагов выполняется через плагины Drupal.
  2. Вам разрешено использовать только один плагин на первом этапе (определение источника, т.е. извлечение) и один плагин на последнем этапе (определение места назначения, т.е. загрузка) процесса.
    • Другими словами, вы можете получать данные только из одного источника (CSV-файл, канал JSON и т. д.) и хранить их в Drupal только под определенным набором сущностей, например, статьей, страницей, пользовательским типом контента, пользователем или объект конфигурации, а также.
  3. Вам разрешено использовать столько плагинов, сколько необходимо для моделирования данных, чтобы они соответствовали формату, ожидаемому Drupal.
  4. Drupal по умолчанию имеет список плагинов источника/процесса/назначения, которые можно использовать в файле определения.

Чтобы просмотреть список всех исходных плагинов,

  • Откройте окно терминала
  • Тип :
 drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"

Обратите внимание : плагин csv присутствует, потому что мы уже включили модуль Migrate Source CSV.

Чтобы просмотреть список всех подключаемых модулей процессов,

  • Введите следующее:
 drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"

Этот список немного длиннее, помните, что вы можете использовать столько плагинов, сколько вам нужно на этапе процесса.

Чтобы просмотреть список всех подключаемых модулей назначения,

  • Введите следующее:
 drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->getDefinitions()));"


Шаг № 3 — Создайте тип контента

  • Щелкните Структура > Типы содержимого > Добавить тип содержимого.
  • Создайте тип контента «Книга»
  • Нажмите Сохранить и управлять полями.
  • Используйте строку заголовка CSV-файла для создания полей.

Я собираюсь объединить значения столбцов edition_number и editor, поэтому для этой цели мне нужно только одно поле в базе данных.

Примечание: имена полей (имена машин) не обязательно должны точно совпадать с именами столбцов CSV-файла, но имеет смысл хотя бы связать их похожими словами — это упрощает сопоставление полей на шаге процесса.

Поле title является обязательным для каждого узла Drupal, поэтому нет необходимости создавать поле заголовка. Вы можете оставить поле тела нетронутым или удалить его, это зависит от того, что вы планируете делать с вашим конкретным типом контента.


Шаг № 4 – Файл определения миграции

Исходный шаг

  • Откройте предпочитаемый редактор кода
  • Введите следующее:
 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: "'"

Идентификатор файла соответствует его имени.

Мы используем плагин csv модуля contrib Migrate Source CSV в разделе исходного кода.

Число 1 в опции header_row_count указывает на значение заголовков столбцов (все они помещаются в первую строку).

Определение ids предоставляет уникальный идентификатор для каждой записи в CSV-файле, в данном случае это столбец id , имеющий тип integer . Не забудьте скобки, так как модуль ожидает здесь массив.

delimiter и enclosure относятся к структуре CSV-файла, в моем конкретном случае он разделен символом «;» символов, тогда как строки заключаются в одинарные кавычки «'».

Обратите также внимание на определение пути. Именно туда вы должны поместить файл CSV, чтобы Drupal смог прочитать данные из него.

  • Откройте приложение терминала.
  • Тип :
 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/

Это будет:

  1. создайте каталог с именем csv внутри общедоступной папки вашей установки Drupal.
  2. поместите копию файла CSV в этот каталог.
  3. сделать файл доступным для всех в системе (включая исходный плагин).

Шаг процесса

Здесь мы сопоставляем каждый из столбцов CSV-файла с полями в типе контента:

 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

Первые 5 пар ключ/значение в форме drupal_machine_name: csv_column_name сопоставляют записи CSV с полями базы данных без внесения каких-либо изменений.

Поле field_editor будет результатом объединения двух строк (значения внутри столбцов editor и edition_number ).

Опция разделителя позволяет установить разделитель между обеими строками, в данном случае пробел.

Плагин default_value помогает нам определить тип объекта, поскольку эта информация недоступна в исходных данных.

Шаг назначения

Заключительной частью этого процесса является шаг назначения.

 destination: plugin: entity:node

Мы переносим контент, и каждая запись будет узлом.


Шаг № 5 — Выполните миграцию

  • Щелкните Конфигурация > Синхронизация конфигурации > Импорт > Отдельный элемент.
  • Выберите « Миграция » в раскрывающемся списке.
  • Вставьте код из файла .yml в текстовое поле.
  • Нажмите Импорт
  • Нажмите Подтвердить, чтобы синхронизировать конфигурацию. Вы получите сообщение «Конфигурация успешно импортирована».
  • Перейдите в терминальное приложение.
  • Введите следующее:
 drush migrate:import my_first_migration

Теперь вы можете проверить содержимое вашего сайта.

Вы изучили основные принципы переноса данных из файла CSV в Drupal 8/9.

Как вы уже видели, процесс миграции требует внимания к деталям, поэтому сначала убедитесь, что вы работаете на промежуточном сервере, потому что одна маленькая ошибка может сломать весь сайт. Надеюсь, вам понравился этот урок.

Спасибо за чтение!