ย้ายข้อมูลจากไฟล์ CSV ใน Drupal 8/9

เผยแพร่แล้ว: 2022-02-16

กระบวนการย้ายข้อมูลไปยังฐานข้อมูล Drupal จากไฟล์ CSV สามารถทำได้ผ่าน Migrate API ที่ผสานรวมของ Drupal และโมดูลที่กำหนดเองเพิ่มเติมอีกสามโมดูล (Migrate Source CSV, Migrate Plus และ Migrate Tools)

สิ่งนี้เรียกว่ากระบวนการ ETL (แยก - แปลง - โหลด) ซึ่งดึงข้อมูลจากแหล่งหนึ่งในขั้นตอนแรก แปลงร่างในขั้นตอนที่สอง และในที่สุดก็โหลดไปยังปลายทางบนฐานข้อมูล Drupal ในขั้นตอนที่สาม

บทช่วยสอนนี้จะอธิบายการสร้างโหนดหนังสือ 12 โหนดสำหรับฐานข้อมูลห้องสมุด อ่านต่อเพื่อเรียนรู้วิธี!

ย้ายข้อมูลจากไฟล์ CSV ใน Drupal 8/9

ขั้นตอนที่ # 1 - ติดตั้ง Drush และโมดูลที่จำเป็น

ในการดำเนินการย้ายข้อมูลใน Drupal เราจำเป็นต้องมี Drush Drush ไม่ใช่โมดูล Drupal แต่เป็นอินเทอร์เฟซบรรทัดคำสั่งเพื่อดำเนินการคำสั่ง Drupal ในการติดตั้ง Drush เวอร์ชันล่าสุด

  • เปิด แอปพลิเคชั่นเทอร์มินัลของระบบของคุณ
  • วาง เคอร์เซอร์ไว้นอกไดเร็กทอรี /web
  • ประเภท: composer require drush/drush

การดำเนินการนี้จะติดตั้ง Drush ภายในไดเร็กทอรี vendor/bin/drush ของการติดตั้ง Drupal ของคุณ อย่างไรก็ตาม การพิมพ์ vendor/bin/drush แทน drush นั้นยุ่งยาก ทุกครั้งที่คุณต้องการรันคำสั่ง drush

ตัวเรียกใช้งาน Drush ทำให้สามารถดำเนินการติดตั้ง Drupal เวอร์ชันเฉพาะของ Drush ในแต่ละโปรเจ็กต์ได้

ทำไมสิ่งนี้จึงสมเหตุสมผล

แต่ละโปรเจ็กต์มีข้อกำหนดที่แตกต่างกัน เวอร์ชัน 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

  • พิมพ์ คำสั่งต่อไปนี้เพื่อให้ไฟล์เรียกทำงาน: chmod +x drush.phar
  • พิมพ์ ข้อมูลต่อไปนี้เพื่อย้ายไฟล์ .phar ไปยัง $PATH ของคุณและเรียกใช้ Drush เป็นคำสั่งส่วนกลาง: sudo mv drush.phar /usr/local/bin/ drush

ถึงเวลาติดตั้งโมดูลที่สนับสนุนที่จำเป็นสำหรับการย้ายข้อมูล

  • พิมพ์ ต่อไปนี้:

composer require drupal/migrate_tools
composer require drupal/migrate_source_csv


ย้ายข้อมูลจากไฟล์ CSV ใน Drupal 8/9 เมื่อ Composer ดาวน์โหลดโมดูลเสร็จแล้ว

  • เปิด แบ็กเอนด์ Drupal ในเบราว์เซอร์ของคุณ
  • คลิก ขยาย
  • เปิดใช้งาน Migrate , Migrate Plus , Migrate Tools และ Migrate Source CSV
  • คลิก ติดตั้ง

ย้ายข้อมูลจากไฟล์ CSV ใน Drupal 8/9


ขั้นตอนที่ # 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()));"

รายการนั้นยาวกว่าเล็กน้อย จำไว้ว่าคุณสามารถใช้ปลั๊กอินได้มากเท่าที่คุณต้องการในขั้นตอนกระบวนการ

หากต้องการดูรายการปลั๊กอินปลายทางทั้งหมด

  • ประเภท :

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


"

หมายเหตุ : ปลั๊กอิน csv อยู่ที่นั่นเนื่องจากเราได้เปิดใช้งานโมดูล Migrate Source CSV แล้ว

หากต้องการดูรายการปลั๊กอินกระบวนการทั้งหมด

  • พิมพ์ ต่อไปนี้:

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()));"

หากต้องการดูรายการปลั๊กอินปลายทางทั้งหมด

  • พิมพ์ ต่อไปนี้:

drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->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 และตัวแก้ไขเข้าด้วยกัน ดังนั้นฉันต้องการเพียงหนึ่งฟิลด์ในฐานข้อมูลเพื่อการนี้

หมายเหตุ: ชื่อฟิลด์ (ชื่อเครื่อง) ไม่จำเป็นต้องตรงกับชื่อคอลัมน์ของไฟล์ CSV ทุกประการ แต่อย่างน้อยก็สมเหตุสมผลที่จะเชื่อมโยงพวกเขาด้วยคำที่คล้ายกัน ซึ่งจะทำให้การแมปฟิลด์ในขั้นตอนกระบวนการง่ายขึ้น

ย้ายข้อมูลจากไฟล์ CSV ใน Drupal 8/9

ฟิลด์ หัวเรื่อง จำเป็นสำหรับทุกโหนดของ 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: "'"

id ของไฟล์ตรงกับชื่อ

เรากำลังใช้ปลั๊กอิน csv ของโมดูลสนับสนุน Migrate Source CSV ในส่วนแหล่งที่มา

หมายเลข 1 ที่ตัวเลือก header_row_count ระบุค่าของชื่อคอลัมน์ (ทั้งหมดอยู่ในแถวแรก)

คำจำกัดความของ รหัส ระบุตัวระบุเฉพาะสำหรับแต่ละเร็กคอร์ดในไฟล์ CSV ในกรณีนี้คือคอลัมน์ id ซึ่งเป็นประเภท จำนวนเต็ม อย่าลืมวงเล็บ เนื่องจากโมดูลต้องการอาร์เรย์ที่นี่

ตัวคั่น และ กล่องหุ้ม หมายถึงโครงสร้างของไฟล์ CSV ในกรณีของฉัน มันถูกคั่นด้วย “;” อักขระ ในขณะที่สตริงอยู่ระหว่างเครื่องหมายอัญประกาศเดี่ยว "'"

ย้ายข้อมูลจากไฟล์ CSV ใน Drupal 8/9

สังเกตด้วย คำจำกัดความของเส้นทาง นั่นคือที่ที่คุณต้องวางไฟล์ 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

ฟิลด์ field_editor จะเป็นผลมาจากการต่อกันของ 2 สตริง (ค่าภายในคอลัมน์ editor และ edition_number )
คู่คีย์/ค่า 5 คู่แรกในรูปแบบ drupal_machine_name: csv_column_name จะ จับคู่ระเบียน CSV กับช่องฐานข้อมูลโดยไม่ทำการเปลี่ยนแปลงใดๆ

ตัวเลือกตัว คั่น ทำให้สามารถตั้งค่าตัวคั่นระหว่างสตริงทั้งสองได้ ในกรณีนี้คือช่องว่าง

ปลั๊กอิน default_value ช่วยให้เรากำหนดประเภทเอนทิตี เนื่องจากไม่มีข้อมูลนี้ในข้อมูลต้นทาง

ขั้นตอนปลายทาง

ส่วนสุดท้ายของกระบวนการนี้คือขั้นตอนปลายทาง

destination:
plugin: entity:node

เรากำลังย้ายเนื้อหาและแต่ละระเบียนจะเป็นโหนด


ขั้นตอนที่ # 5 - ดำเนินการโยกย้าย

  • คลิก การกำหนดค่า > การซิงโครไนซ์การกำหนดค่า > นำเข้า > รายการเดียว
  • เลือก การโยกย้าย จากดรอปดาวน์
  • วาง โค้ดจากไฟล์ .yml ลงใน textarea
  • คลิก นำเข้า

ย้ายข้อมูลจากไฟล์ CSV ใน Drupal 8/9

  • คลิก ยืนยันเพื่อซิงโครไนซ์การกำหนดค่า คุณจะได้รับข้อความ“ นำเข้าการกำหนดค่าสำเร็จแล้ว”
  • เปลี่ยน เป็นแอปพลิเคชันเทอร์มินัล
  • พิมพ์ ต่อไปนี้:

drush migrate:import my_first_migration


ย้ายข้อมูลจากไฟล์ CSV ใน Drupal 8/9

คุณสามารถตรวจสอบเนื้อหาบนเว็บไซต์ของคุณได้แล้ว

ย้ายข้อมูลจากไฟล์ CSV ใน Drupal 8/9

คุณได้เรียนรู้หลักการพื้นฐานของการย้ายข้อมูลจากไฟล์ CSV ไปยัง Drupal 8/9 แล้ว

ดังที่คุณได้เห็นแล้ว ขั้นตอนการโยกย้ายนั้นต้องการความเอาใจใส่ในรายละเอียด ดังนั้นตรวจสอบให้แน่ใจว่าคุณทำงานบนเซิร์ฟเวอร์การจัดเตรียมก่อน เพราะความผิดพลาดเพียงเล็กน้อยอาจทำให้ทั้งเว็บไซต์เสียหาย ฉันหวังว่าคุณจะชอบบทช่วยสอนนี้

ขอบคุณที่อ่าน!