ย้ายข้อมูลจากไฟล์ CSV ใน Drupal 8/9
เผยแพร่แล้ว: 2022-02-16กระบวนการย้ายข้อมูลไปยังฐานข้อมูล Drupal จากไฟล์ CSV สามารถทำได้ผ่าน Migrate API ที่ผสานรวมของ Drupal และโมดูลที่กำหนดเองเพิ่มเติมอีกสามโมดูล (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 ทำให้สามารถดำเนินการติดตั้ง 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
เมื่อ Composer ดาวน์โหลดโมดูลเสร็จแล้ว
- เปิด แบ็กเอนด์ Drupal ในเบราว์เซอร์ของคุณ
- คลิก ขยาย
- เปิดใช้งาน Migrate , Migrate Plus , Migrate Tools และ Migrate Source CSV
- คลิก ติดตั้ง
ขั้นตอนที่ # 2 - เพิ่มเติมเกี่ยวกับกระบวนการ ETL
กระบวนการแยก แปลง และโหลดข้อมูลสามารถทำได้โดยกำหนดการย้ายข้อมูลในไฟล์ .yml แล้วดำเนินการด้วยคำสั่ง Drush จึงสามารถเติมฐานข้อมูล Drupal ได้อย่างถูกต้อง
มีข้อเท็จจริงสำคัญบางประการที่ควรสังเกต:
- แต่ละขั้นตอนดำเนินการผ่านปลั๊กอิน Drupal
- คุณได้รับอนุญาตให้ใช้เพียงหนึ่งปลั๊กอิน ในขั้นตอนแรก (คำจำกัดความของแหล่งที่มาคือ การแยก) และหนึ่งปลั๊กอินในขั้นตอนสุดท้าย (คำจำกัดความปลายทาง คือ โหลด) ของกระบวนการ
- กล่าวอีกนัยหนึ่ง คุณสามารถดึงข้อมูลจากแหล่งเดียวเท่านั้น (ไฟล์ CSV, ฟีด JSON ฯลฯ) และเก็บไว้ใน Drupal เฉพาะภายใต้กลุ่มเอนทิตีเฉพาะ เช่น บทความ หน้า ประเภทเนื้อหาที่กำหนดเอง ผู้ใช้ หรือ เอนทิตีการกำหนดค่าเช่นกัน
- คุณได้รับอนุญาตให้ใช้ปลั๊กอินได้มากเท่าที่จำเป็นเพื่อสร้างแบบจำลองข้อมูลเพื่อให้ตรงกับรูปแบบที่ Drupal คาดหวัง
- โดยค่าเริ่มต้น 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()));"
รายการนั้นยาวกว่าเล็กน้อย จำไว้ว่าคุณสามารถใช้ปลั๊กอินได้มากเท่าที่คุณต้องการในขั้นตอนกระบวนการ
หากต้องการดูรายการปลั๊กอินปลายทางทั้งหมด
- พิมพ์ ต่อไปนี้:
drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->getDefinitions()));"

ขั้นตอนที่ # 3 - สร้างประเภทเนื้อหา
- คลิก โครงสร้าง > ประเภทเนื้อหา > เพิ่มประเภทเนื้อหา
- สร้าง ประเภทเนื้อหา 'หนังสือ'
- คลิก บันทึกและจัดการช่อง
- ใช้ แถวชื่อเรื่องของไฟล์ CSV เพื่อสร้างช่อง
ฉันจะเชื่อมค่าของคอลัมน์ edition_number และตัวแก้ไขเข้าด้วยกัน ดังนั้นฉันต้องการเพียงหนึ่งฟิลด์ในฐานข้อมูลเพื่อการนี้
หมายเหตุ: ชื่อฟิลด์ (ชื่อเครื่อง) ไม่จำเป็นต้องตรงกับชื่อคอลัมน์ของไฟล์ CSV ทุกประการ แต่อย่างน้อยก็สมเหตุสมผลที่จะเชื่อมโยงพวกเขาด้วยคำที่คล้ายกัน ซึ่งจะทำให้การแมปฟิลด์ในขั้นตอนกระบวนการง่ายขึ้น
ฟิลด์ หัวเรื่อง จำเป็นสำหรับทุกโหนดของ 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 จะสามารถอ่านข้อมูลได้
- เปิด แอปพลิเคชันเทอร์มินัลของคุณ
- ประเภท :
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/
นี่จะ:
- สร้างไดเร็กทอรีชื่อ csv ภายในโฟลเดอร์สาธารณะของการติดตั้ง Drupal
- วางสำเนาของไฟล์ CSV ไว้ในไดเร็กทอรีนั้น
- ทำให้ทุกคนในระบบสามารถเข้าถึงไฟล์ได้ (ซึ่งรวมถึงปลั๊กอินต้นทาง)
ขั้นตอนกระบวนการ
นี่คือที่ที่เราแมปแต่ละคอลัมน์ของไฟล์ 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
- คลิก นำเข้า
- คลิก ยืนยันเพื่อซิงโครไนซ์การกำหนดค่า คุณจะได้รับข้อความ“ นำเข้าการกำหนดค่าสำเร็จแล้ว”
- เปลี่ยน เป็นแอปพลิเคชันเทอร์มินัล
- พิมพ์ ต่อไปนี้:
drush migrate:import my_first_migration
คุณสามารถตรวจสอบเนื้อหาบนเว็บไซต์ของคุณได้แล้ว
คุณได้เรียนรู้หลักการพื้นฐานของการย้ายข้อมูลจากไฟล์ CSV ไปยัง Drupal 8/9 แล้ว
ดังที่คุณได้เห็นแล้ว ขั้นตอนการโยกย้ายนั้นต้องการความเอาใจใส่ในรายละเอียด ดังนั้นตรวจสอบให้แน่ใจว่าคุณทำงานบนเซิร์ฟเวอร์การจัดเตรียมก่อน เพราะความผิดพลาดเพียงเล็กน้อยอาจทำให้ทั้งเว็บไซต์เสียหาย ฉันหวังว่าคุณจะชอบบทช่วยสอนนี้
ขอบคุณที่อ่าน!