Migracja danych z pliku CSV w Drupal 8/9 - Szkolenie OSTraining
Opublikowany: 2022-06-29Proces migracji danych do bazy danych Drupala z pliku CSV można zrealizować za pomocą zintegrowanego API Migrate i trzech dodatkowych modułów niestandardowych (Migrate Source CSV, Migrate Plus i Migrate Tools).
Jest to tak zwany proces ETL (Extract – Transform – Load), w którym dane są pobierane z jednego źródła w pierwszym kroku, przekształcane w drugim kroku, a na koniec ładowane do miejsca docelowego w bazie danych Drupala w trzecim kroku.
Ten samouczek wyjaśni tworzenie 12 węzłów książki dla bazy danych biblioteki. Czytaj dalej, aby dowiedzieć się, jak!
Krok #1 – Zainstaluj Drush i wymagane moduły
Do wykonania migracji w Drupalu potrzebujemy Drush. Drush nie jest modułem Drupala, ale interfejsem wiersza poleceń do wykonywania poleceń Drupala. Aby zainstalować najnowszą wersję Drush,
- Otwórz aplikację terminala swojego systemu
- Umieść kursor poza katalogiem
/web
. - Typ:
composer require drush/drush
Spowoduje to zainstalowanie Drush w katalogu vendor/bin/drush
Twojej instalacji Drupala. Jednak kłopotliwe jest wpisywanie vendor/bin/drush
zamiast drush
, za każdym razem, gdy chcesz wykonać polecenie drush.
Program uruchamiający Drush umożliwia wykonanie określonej wersji Drush każdej instalacji Drupala na podstawie projektu.
Dlaczego to ma sens?
Każdy projekt ma inne wymagania, konkretne wersje Drush pomagają uniknąć problemów z zależnościami. Niektóre moduły contrib mogą nie działać poprawnie z najnowszą wersją programu Drush.
Szczegółowe instrukcje dla systemów OSX i Windows można znaleźć tutaj: https://github.com/drush-ops/drush-launcher#installation—phar
Dla systemu Linux:
- Wpisz następujące polecenie, aby pobrać plik o nazwie drush.phar z GitHub:
wget -O drush.phar https://github.com/drush-ops/drush-launcher/releases/latest/download/drush.phar
Spowoduje to pobranie pliku o nazwie drush.phar
z usługi GitHub.
- Wpisz następujące polecenie, aby plik był wykonywalny:
chmod +x drush.phar
- Wpisz :
sudo mv drush.phar /usr/local/bin/ drush
Spowoduje to przeniesienie pliku .phar do $PATH i uruchomienie Drush jako polecenia globalnego.
Teraz nadszedł czas, aby zainstalować wymagane moduły wniesione w celu przeprowadzenia migracji.
- Wpisz następujące polecenie:
composer require drupal/migrate_tools composer require drupal/migrate_source_csv
Gdy Composer zakończy pobieranie modułów,
- Otwórz backend Drupala w swojej przeglądarce
- Kliknij Rozszerz
- Włącz Migrate , Migrate Plus , Migrate Tools i Migrate Source CSV
- Kliknij Zainstaluj
Krok #2 – Więcej o procesie ETL
Proces wyodrębniania, przekształcania i wczytywania danych można osiągnąć, definiując migrację w pliku .yml, a następnie wykonując ją za pomocą polecenia Drush, dzięki czemu baza danych Drupala może zostać poprawnie zapełniona.
Należy zwrócić uwagę na kilka ważnych faktów:
- Każdy z kroków jest wykonywany za pomocą wtyczek Drupala.
- Możesz użyć tylko jednej wtyczki w pierwszym kroku (definicja źródła, tj. Extract) i jednej wtyczki w ostatnim kroku (definicja miejsca docelowego, tj. Load) procesu.
- Innymi słowy, możesz pobierać dane tylko z jednego źródła (plik CSV, kanał JSON itp.) i przechowywać je w Drupal tylko w ramach konkretnego pakietu encji, na przykład artykułu, strony, niestandardowego typu treści, użytkownika lub jednostka konfiguracyjna.
- Możesz używać tak wielu wtyczek, jak to konieczne, aby modelować dane tak, aby odpowiadały formatowi oczekiwanemu przez Drupala.
- Drupal ma domyślnie listę wtyczek źródłowych/procesowych/docelowych, których można użyć w pliku definicji.
Aby zobaczyć listę wszystkich wtyczek źródłowych,
- Otwórz okno terminala
- Typ :
drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"
Uwaga : wtyczka csv jest dostępna, ponieważ włączyliśmy już moduł Migrate Source CSV.
Aby zobaczyć listę wszystkich wtyczek procesowych,
- Wpisz następujące polecenie:
drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"
Ta lista jest nieco dłuższa, pamiętaj, że możesz użyć tylu wtyczek, ile potrzebujesz na etapie procesu.
Aby zobaczyć listę wszystkich wtyczek docelowych,
- Wpisz następujące polecenie:
drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->getDefinitions()));"
Krok #3 – Utwórz typ treści
- Kliknij Struktura > Typy zawartości > Dodaj typ zawartości
- Utwórz typ treści „Książka”
- Kliknij Zapisz i zarządzaj polami
- Użyj wiersza tytułu pliku CSV, aby utworzyć pola
Zamierzam skonkatenować wartości kolumn numer_edycji i edytora, więc do tego celu potrzebuję tylko jednego pola w bazie danych.
Uwaga: nazwy pól (nazwy maszyn) nie muszą dokładnie odpowiadać nazwom kolumn w pliku CSV, ale ma sens przynajmniej powiązać je z podobnymi słowami – ułatwia to mapowanie pól na etapie procesu.
Pole title
jest obowiązkowe dla każdego węzła Drupal, więc nie ma potrzeby tworzenia pola tytułu. Możesz pozostawić pole ciała nietknięte lub możesz je usunąć, w zależności od tego, co planujesz zrobić z konkretnym typem treści.
Krok nr 4 – Plik definicji migracji
Krok źródłowy
- Otwórz preferowany edytor kodu
- Wpisz następujące polecenie:
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: "'"
Identyfikator pliku odpowiada jego nazwie.
Używamy wtyczki csv
modułu contrib Migrate Source CSV w sekcji source.
Liczba 1 w opcji header_row_count
wskazuje wartość tytułów kolumn (wszystkie są umieszczone w pierwszym wierszu).
Definicja ids
zapewnia unikalny identyfikator dla każdego rekordu w pliku CSV, w tym przypadku kolumnę id
, która jest typu integer
. Nie zapomnij o nawiasach, ponieważ moduł oczekuje tutaj tablicy.
delimiter
i enclosure
odnoszą się do struktury pliku CSV, w moim konkretnym przypadku jest on oddzielony znakiem „;” znaków, podczas gdy łańcuchy są ujęte w pojedyncze cudzysłowy „'”.
Zwróć także uwagę na definicję ścieżki. Tam należy umieścić plik CSV, aby Drupal mógł z niego odczytać dane.
- Otwórz aplikację terminala.
- Typ :
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/
Spowoduje to:
- utwórz katalog o nazwie
csv
w publicznym folderze instalacji Drupala. - umieść kopię pliku CSV w tym katalogu.
- udostępnić plik wszystkim w systemie (w tym wtyczce źródłowej).
Etap procesu
Tutaj mapujemy każdą kolumnę pliku CSV z polami w typie zawartości :
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
Pierwsze 5 par klucz/wartość w postaci nazwa_maszyny_drupal: nazwa_kolumny_csv mapuje rekordy CSV na pola bazy danych bez wprowadzania jakichkolwiek zmian.
Pole field_editor będzie wynikiem wykonania konkatenacji 2 stringów (wartości wewnątrz edytora i kolumn edition_number ).
Opcja delimiter umożliwia ustawienie separatora między obydwoma ciągami, w tym przypadku spacją.
Wtyczka default_value pomaga nam zdefiniować typ jednostki, ponieważ ta informacja nie jest dostępna w danych źródłowych.
Krok docelowy
Ostatnią częścią tego procesu jest etap docelowy.
destination: plugin: entity:node
Przenosimy zawartość i każdy rekord będzie węzłem.
Krok 5 – Wykonaj migrację
- Kliknij Konfiguracja > Synchronizacja konfiguracji > Importuj > Pojedynczy element
- Wybierz Migracja z menu rozwijanego
- Wklej kod z pliku .yml do obszaru tekstowego
- Kliknij Importuj
- Kliknij Potwierdź, aby zsynchronizować konfigurację. Otrzymasz komunikat „Konfiguracja została zaimportowana pomyślnie”
- Przejdź do aplikacji terminala.
- Wpisz następujące polecenie:
drush migrate:import my_first_migration
Możesz teraz sprawdzić zawartość swojej witryny.
Poznałeś podstawowe zasady migracji danych z pliku CSV do Drupala 8/9.
Jak już zauważyłeś, proces migracji wymaga dbałości o szczegóły, więc upewnij się, że najpierw pracujesz na serwerze pomostowym, ponieważ jeden mały błąd może zepsuć całą witrynę. Mam nadzieję, że podobał Ci się ten samouczek.
Dziękuje za przeczytanie!