Drupal 8/9'da CSV Dosyasından Veri Taşıma

Yayınlanan: 2022-02-16

Bir CSV dosyasından bir Drupal veritabanına veri taşıma işlemi, Drupal'ın entegre Migrate API'si ve üç ekstra özel modül (Migrate Source CSV, Migrate Plus ve Migrate Araçları) aracılığıyla gerçekleştirilebilir.

ETL (Çıkart - Dönüştür - Yükle) işlemi olarak bilinen bu işlemde, ilk adımda bir kaynaktan veri alınır, ikinci adımda dönüştürülür ve son olarak üçüncü adımda Drupal veritabanındaki hedefine yüklenir.

Bu öğretici, bir kütüphane veritabanı için 12 kitap düğümünün oluşturulmasını açıklayacaktır. Nasıl olduğunu öğrenmek için okumaya devam edin!

Drupal 8/9'da CSV Dosyasından Veri Taşıma

Adım #1 - Drush ve Gerekli Modülleri Kurun

Drupal'da geçişleri yürütmek için Drush'a ihtiyacımız var. Drush bir Drupal modülü değil, Drupal komutlarını yürütmek için bir komut satırı arayüzüdür. Drush'ın en son sürümünü yüklemek için,

  • Sisteminizin terminal uygulamasını açın
  • İmleci /web dizininin dışına yerleştirin.
  • Tür: besteci drush/drush gerektirir

Bu, Drush'u Drupal kurulumunuzun satıcı/bin/drush dizinine kuracaktır. Ancak, her drush komutu yürütmek istediğinizde drush yerine satıcı/bin/drush yazmak zahmetlidir.

Drush başlatıcısı, her bir Drupal kurulumunun belirli Drush sürümünü proje bazında yürütmeyi mümkün kılar.

Bu neden mantıklı?

Her projenin farklı gereksinimleri vardır, belirli Drush sürümleri bağımlılık sorunlarından kaçınmaya yardımcı olur. Bazı katkı modülleri, Drush'ın en son sürümüyle düzgün çalışmayabilir.

OSX ve Windows sistemleri için özel talimatlar burada bulunabilir: https://github.com/drush-ops/drush-launcher#installation---phar

Linux sistemi için:

  • GitHub'dan drush.phar adlı dosyayı indirmek için aşağıdakini yazın :

wget -O drush.phar
https://github.com/drush-ops/drush-launcher/releases/latest/download/drush.phar

  • Dosyayı yürütülebilir hale getirmek için şunu yazın : chmod +x drush.phar
  • .phar dosyasını $ PATH'inize taşımak için aşağıdakini yazın ve Drush'ı genel bir komut olarak çalıştırın: sudo mv drush.phar /usr/local/bin/ drush

Şimdi, geçişi gerçekleştirmek için gerekli katkıda bulunan modülleri kurma zamanı.

  • Aşağıdakileri yazın :

composer require drupal/migrate_tools
composer require drupal/migrate_source_csv


Drupal 8/9'da CSV Dosyasından Veri Taşıma Composer modülleri indirmeyi bitirdiğinde,

  • Tarayıcınızda Drupal arka ucunu açın
  • Genişlet'i tıklayın
  • Migrate , Migrate Plus , Migrate Tools ve Migrate Source CSV'yi etkinleştirin
  • Yükle'yi tıklayın

Drupal 8/9'da CSV Dosyasından Veri Taşıma


2. Adım - ETL Süreci Hakkında Daha Fazla Bilgi

Verileri Çıkarma, Dönüştürme ve Yükleme işlemi, geçişi bir .yml dosyasında tanımlayarak ve ardından bir Drush komutuyla yürüterek gerçekleştirilebilir, böylece Drupal veritabanı doğru şekilde doldurulabilir.

Dikkat edilmesi gereken bazı önemli gerçekler var:

  1. Adımların her biri Drupal eklentileri aracılığıyla gerçekleştirilir.
  2. İşlemin ilk adımında (kaynak tanımı, yani Extract) yalnızca bir eklenti ve sürecin son adımında (hedef tanımı, yani Yük) bir eklenti kullanmanıza izin verilir.
    • Başka bir deyişle, yalnızca bir kaynaktan (CSV dosyası, JSON beslemesi, vb.) veri alabilir ve bunları yalnızca belirli bir varlık paketi altında, örneğin Makale, Sayfa, özel bir içerik türü, bir kullanıcı veya bir Drupal içinde depolayabilirsiniz. yapılandırma varlığı da.
  3. Verileri, Drupal tarafından beklenen formatla eşleşecek şekilde modellemek için gerektiği kadar eklenti kullanmanıza izin verilir.
  4. Drupal, varsayılan olarak, tanım dosyasında kullanılabilecek bir kaynak/süreç/hedef eklenti listesine sahiptir.

Tüm kaynak eklentilerin bir listesini görmek için,

  • Terminal pencerenizi açın .
  • Aşağıdakileri yazın :

drush ev
"print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"

Bu liste biraz daha uzun, işlem adımında ihtiyacınız kadar eklenti kullanabileceğinizi unutmayın.

Tüm hedef eklentilerin bir listesini görmek için,

  • Tür :

drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->getDefinitions()));"


"

Uyarı : Migrate Source CSV modülünü zaten etkinleştirdiğimiz için csv eklentisi orada.

Tüm süreç eklentilerinin bir listesini görmek için,

  • Aşağıdakileri yazın :

drush ev
"print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"

Bu liste biraz daha uzun, işlem adımında ihtiyacınız kadar eklenti kullanabileceğinizi unutmayın.

Uyarı: Migrate Source CSV modülünü zaten etkinleştirdiğimiz için csv eklentisi orada. Tüm işlem eklentilerinin listesini görmek için şunu yazın: drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));" Bu liste biraz daha uzun, işlem adımında ihtiyacınız kadar eklenti kullanabileceğinizi unutmayın. Tüm hedef eklentilerin listesini görmek için şunu yazın: drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->getDefinitions()));"

Tüm hedef eklentilerin listesini görmek için,

  • Aşağıdakileri yazın :

drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->getDefinitions()));"


Uyarı: Migrate Source CSV modülünü zaten etkinleştirdiğimiz için csv eklentisi orada. Tüm işlem eklentilerinin listesini görmek için şunu yazın: drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));" Bu liste biraz daha uzun, işlem adımında ihtiyacınız kadar eklenti kullanabileceğinizi unutmayın. Tüm hedef eklentilerin listesini görmek için şunu yazın: drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->getDefinitions()));"

Adım # 3 - İçerik Türünü Oluşturun

  • Yapı > İçerik türleri > İçerik türü ekle'yi tıklayın .
  • 'Kitap' içerik türünü oluşturun
  • Alanları kaydet ve yönet'e tıklayın
  • Alanları oluşturmak için CSV dosyasının başlık satırını kullanın

Edition_number ve editor sütunlarının değerlerini birleştireceğim, bu yüzden bu amaç için veritabanında yalnızca bir alana ihtiyacım var.

Dikkat: alan adlarının (makine adları) CSV dosyasının sütun adlarıyla tam olarak eşleşmesi gerekmez, ancak bunları en azından benzer sözcüklerle ilişkilendirmek mantıklıdır - bu, işlem adımında alan eşlemesini kolaylaştırır.

Drupal 8/9'da CSV Dosyasından Veri Taşıma

Başlık alanı her Drupal düğümü için zorunludur, bu nedenle başlık alanı oluşturmaya gerek yoktur. Gövde alanına dokunmadan bırakabilir veya silebilirsiniz, bu, kendi içerik türünüzle ne yapmayı planladığınıza bağlıdır.


Adım # 4 - Taşıma Tanım Dosyası

Kaynak Adımı

  • Tercih ettiğiniz kod düzenleyiciyi açın
  • Aşağıdakileri yazın :

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: "'"

Dosyanın kimliği, adıyla eşleşiyor.

Kaynak bölümünde Katkıda Bulunan Kaynak CSV'yi Geçir modülünün csv eklentisini kullanıyoruz.

header_row_count seçeneğindeki 1 sayısı, sütun başlıklarının değerini gösterir (hepsi ilk satıra yerleştirilir).

ids tanımı, CSV dosyasındaki her kayıt için benzersiz tanımlayıcıyı sağlar; bu durumda, tamsayı türündeki id sütunu. Modül burada bir dizi beklediği için parantezleri unutmayın.

sınırlayıcı ve ek , CSV dosyasının yapısını ifade eder, benim özel durumumda “;” ile sınırlandırılmıştır. karakterler, dizeler ise “'“ tek tırnak işaretleri arasına alınır.

Drupal 8/9'da CSV Dosyasından Veri Taşıma

Ayrıca, bir yolun tanımına dikkat edin. Bu, CSV dosyasını yerleştirmeniz gereken yerdir, böylece Drupal ondan verileri okuyabilir.

  • Terminal uygulamanızı açın .
  • Tür :

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/

Bu irade:

  1. Drupal kurulumunuzun ortak klasörünün içinde csv adında bir dizin oluşturun.
  2. CSV dosyasının bir kopyasını bu dizine yerleştirin.
  3. dosyayı sistemdeki herkes için erişilebilir hale getirin (kaynak eklentiyi içerir).

Süreç Adımı

CSV dosyasının sütunlarının her birini içerik türündeki alanlarla eşlediğimiz yer burasıdır:

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

field_editor alanı, 2 dizenin ( editör ve sürüm_numarası sütunları içindeki değerler) birleştirilmesinin gerçekleştirilmesinin sonucu olacaktır.
drupal_machine_name: csv_column_name biçimindeki ilk 5 anahtar/değer çifti, CSV kayıtlarını herhangi bir değişiklik yapmadan veritabanı alanlarıyla eşler.

Sınırlayıcı seçeneği, her iki dize arasında bir sınırlayıcı, bu durumda bir boşluk ayarlamayı mümkün kılar.

default_value eklentisi, bu bilgi kaynak verilerde bulunmadığından bir varlık türü tanımlamamıza yardımcı olur.

Hedef Adım

Bu sürecin son kısmı ise varış aşamasıdır.

destination:
plugin: entity:node

İçeriği taşıyoruz ve her kayıt bir düğüm olacak.


Adım # 5 - Taşımayı Gerçekleştirin

  • Yapılandırma > Yapılandırma senkronizasyonu > İçe Aktar > Tek öğe'ye tıklayın
  • Açılır menüden Taşıma'yı seçin
  • .yml dosyasındaki kodu textarea'ya yapıştırın
  • İçe Aktar'ı tıklayın

Drupal 8/9'da CSV Dosyasından Veri Taşıma

  • Yapılandırmayı senkronize etmek için Onayla'ya tıklayın . “Yapılandırma başarıyla içe aktarıldı” mesajını alacaksınız.
  • Terminal uygulamasına geçin .
  • Aşağıdakileri yazın :

drush migrate:import my_first_migration


Drupal 8/9'da CSV Dosyasından Veri Taşıma

Artık sitenizdeki içeriği kontrol edebilirsiniz.

Drupal 8/9'da CSV Dosyasından Veri Taşıma

Bir CSV dosyasından Drupal 8/9'a veri taşımanın temel ilkelerini öğrendiniz.

Daha önce de görmüş olduğunuz gibi, taşıma işlemi ayrıntılara dikkat etmeyi gerektirir, bu nedenle önce bir hazırlama sunucusunda çalıştığınızdan emin olun çünkü küçük bir hata tüm siteyi bozabilir. Umarım bu öğreticiyi beğenmişsinizdir.

Okuduğunuz için teşekkürler!