ย้ายข้อมูลจากไฟล์ CSV ใน Drupal 8/9 - OSTraining
เผยแพร่แล้ว: 2022-06-29กระบวนการย้ายข้อมูลไปยังฐานข้อมูล 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
สิ่งนี้จะดาวน์โหลดไฟล์ชื่อ 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 ได้อย่างถูกต้อง
มีข้อเท็จจริงสำคัญบางประการที่ควรสังเกต:
- แต่ละขั้นตอนดำเนินการผ่านปลั๊กอิน Drupal
- คุณได้รับอนุญาตให้ใช้เพียงหนึ่งปลั๊กอิน ในขั้นตอนแรก (คำจำกัดความของแหล่งที่มาคือ การแยก) และหนึ่งปลั๊กอินในขั้นตอนสุดท้าย (คำจำกัดความปลายทาง คือ โหลด) ของกระบวนการ
- กล่าวอีกนัยหนึ่ง คุณสามารถดึงข้อมูลจากแหล่งเดียวเท่านั้น (ไฟล์ CSV, ฟีด JSON ฯลฯ) และเก็บไว้ใน Drupal เฉพาะภายใต้กลุ่มเอนทิตีเฉพาะ เช่น บทความ หน้า ประเภทเนื้อหาที่กำหนดเอง ผู้ใช้ หรือ เอนทิตีการกำหนดค่าเช่นกัน
- คุณได้รับอนุญาตให้ใช้ปลั๊กอินได้มากเท่าที่จำเป็นเพื่อสร้างแบบจำลองข้อมูลเพื่อให้ตรงกับรูปแบบที่ Drupal คาดหวัง
- โดยค่าเริ่มต้น 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 และตัวแก้ไขเข้าด้วยกัน ดังนั้นฉันต้องการเพียงหนึ่งฟิลด์ในฐานข้อมูลเพื่อการนี้

หมายเหตุ: ชื่อฟิลด์ (ชื่อเครื่อง) ไม่จำเป็นต้องตรงกับชื่อคอลัมน์ของไฟล์ 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: "'"
id ของไฟล์ตรงกับชื่อ
เรากำลังใช้ปลั๊กอิน csv
ของโมดูลสนับสนุน 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/
นี่จะ:
- สร้างไดเร็กทอรีชื่อ
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
5 คู่คีย์/ค่าแรกในรูปแบบ drupal_machine_name: csv_column_name จะ จับคู่ระเบียน CSV กับช่องฐานข้อมูลโดยไม่ทำการเปลี่ยนแปลงใดๆ
ฟิลด์ field_editor จะเป็นผลมาจากการต่อกันของ 2 สตริง (ค่าภายในคอลัมน์ editor และ edition_number )
ตัวเลือกตัว คั่น ทำให้สามารถตั้งค่าตัวคั่นระหว่างสตริงทั้งสองได้ ในกรณีนี้คือช่องว่าง
ปลั๊กอิน default_value ช่วยให้เรากำหนดประเภทเอนทิตี เนื่องจากไม่มีข้อมูลนี้ในข้อมูลต้นทาง
ขั้นตอนปลายทาง
ส่วนสุดท้ายของกระบวนการนี้คือขั้นตอนปลายทาง
destination: plugin: entity:node
เรากำลังย้ายเนื้อหาและแต่ละระเบียนจะเป็นโหนด
ขั้นตอนที่ # 5 – ดำเนินการโยกย้าย
- คลิก การกำหนดค่า > การซิงโครไนซ์การกำหนดค่า > นำเข้า > รายการเดียว
- เลือก การโยกย้าย จากดรอปดาวน์
- วาง โค้ดจากไฟล์ .yml ลงใน textarea
- คลิก นำเข้า

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

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

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