ย้ายข้อมูลจากไฟล์ 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 ได้อย่างถูกต้อง

มีข้อเท็จจริงสำคัญบางประการที่ควรสังเกต:

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

นี่จะ:

  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

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 แล้ว

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

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