วันจันทร์ที่ 16 มกราคม พ.ศ. 2560

Pentaho Data Integration (Excel to Mysql DB) [Transformation]



บทความนี้เป็นการนำข้อมูลที่อยู่ในไฟล์เอกสาร Excel ไปเข้าสู้ฐานข้อมูล MySql ซึ่งจะใช้โปรแกรม Xampp ในการจำลองฐานข้อมูลบน Localhost

Process ที่ใช้ใน Pentaho Data Integration (PDI)
  1. Microsoft Excel Input ใช้ในการนำเข้าข้อมูลเพื่อนำข้อมูลไป Transform เข้าสู่ MySQL
  2. Insert / Update หรือ Table Output ซึ่งบทความนี้จะใช้ Insert / Update เนื่องจาก Table Output จะเป็นการ Run เพียงรอบเดียวถ้ามีการ Run อีกรอบจะทำให้ข้อมูลมีการซ้ำหรือข้อมูลไม่เข้าสู่ฐานข้อมูลเนื่องจากเกิดการซ้ำของ Primary Key แต่การใช้ Inert / Update นั้นจะตรวจสอบว่าในฐานข้อมูลมี Primary Key ตัวนี้แล้วหรือไม่ ถ้ามีแล้วจะทำการ Update ข้อมูลที่เปลี่ยนแปลงใน Row เดิม แต่ถ้ายังไม่เคยมีข้อมูลนี้เลยจะถูก Insert เข้าไปเป็น Row ใหม่ในฐานข้อมูล


Flow ของ Process

ข้อมูลใน Excel (OP_data_testing.xls)

โครงสร้างฐานข้อมูล MySQL


ขั้นตอนแรกในทำการเปิด Service MySQL ในโปรแกรม Xampp ก่อน

สร้างฐานข้อมูลใน Localhost ตามโครงสร้างด้านบนซึ่งจะตั้งชื่อฐานข้อมูลชื่อว่า pentaho_data และ Table ชิ่อ people


เมื่อเตรียมความพร้อมของฐานข้อมูลเรียบร้อยให้เปิดโปรแกรม Pentaho Data Integration(PDI) ขึ้นมา ใครยังไม่ได้ติดตั้งโปรแกรมหรีอลืมวิธีการเปิดใช้งาน ตามอ่านจากบนความตาม Link นี้ได้เลยครับ และทำการวาง Process ให้เรียบร้อยดังภาพด้านล่าง

เราจะมาเริ่มทำการตั้งค่า Microsoft Excel Input กันเลย ให้คลิกขวาที่ Process อะ Edit

และให้ตั้งค่า Spread sheet type (engine) ให้เลือกเป็น Excel 2007 XLSX (Apache POI)

เลือก File ที่จะทำเข้าข้อมูลที่ File or Directory กด Browse และเลือก File ที่เตรียมไว้ และกด Add


ไปที่เมนู Content ในส่วนของ Encoding ให้เลือกเป็น UTF-8

ไปที่เมนู Fields และกดปุ่ม "Get Fields from header row..." จะได้ Rows ของข้อมูลตามภาพด้านล่าง เมื่อได้ตามภาพแล้วให้กดปุ่ม "OK" เป็นอันเสร็จ Process Microsoft Excel Input

เนื่องด้วยเราจะนำข้อมูลที่ได้จากเอกสาร Excel นำข้อมูลเข้า MySQL เราจึงจำเป็นต้องสร้าง Connection ขึ้นมาเพื่อให้สามารถเข้าถึงฐานข้อมูลที่เราเตรียมไว้ได้

เริ่มด้วยการไปที่เมนูด้านซ้ายเลือก View และ Transformations->ชื่อของProject->Database connections ให้ดับเบิลคลิกจะเป็นการสร้าง Connection ใหม่


ส่วนของ Connection Type ให้เลือกเป็น MySQL และ Access เลือกเป็น Native (JDBC) และตั้งชื่อ Connections นี้ให้เรียบร้อยในที่นี้ขอตั้งเป็น Testing_DB

การ Setting ให้ตั้งค่าตามรูปด้านล่าง ให้ตรวจเช็ค User Name และ Password ของ MySQL ที่ติดตั้งว่าใช้ User Name หรือ Password อะไรในการเข้าถึงฐานข้อมูล

ให้ไปส่วนของ Option เพื่อไปตั้งค่าให้รองรับภาษาไทย เพิ่ม Parameters ตามภาพด้านล่าง

เสร็จสิ้นการตั้งค่าสุดท้ายให้ทดสอบการ Connect ว่าใช้งานได้หรือไม่ ไปที่เมนู General และกด Test

ถ้าสามารถ Connect ได้จะขึ้นกล่องข้อมูลตามภาพด้านล่าง

***ถ้าโปรแกรมค้าง จากที่ได้ทดสอบมาเกิดจากโปรแกรม Xampp ให้ปิด Service ในส่วนของ Apache ก่อนแล้วจึงกด Test

เมื่อสามารถ Connect เข้าสู่ฐานข้อมูลได้แล้วให้กดปุ่ม "OK" ได้เลย ก็จะได้ Connections ใหม่ที่เราเพิ่มขึ้นมา

ในส่วนต่อไปเราจะมาทำในส่วนของ Process Insert / Update กัน โดยเริ่มจากการกดคลิกขวา Edit เหมือนเดิม

ในช่องของ Connection ให้เลือกฐานข้อมูลที่เราได้เพิ่มไว้ คือ "Testing_DB"

ช่อง Target table คือการเลือก Table ว่าเราจะนำข้อมูลเข้าที่ Table ไหนในฐานข้อมูล pentaho_data ให้กดที่ Browse จะมีหน้าต่างขึ้นมาให้เลือกตามภาพด้านล่าง คือเลือก table "people" ที่เราได้สร้างไว้ตอนต้น และกด "OK"

ต่อไปคือการที่เราจะทำการมองหา Value ว่ามีแล้วหรือไม่จาก Primary Key ในที่นี้ Primary Key ของ Table นี้คือ "id" ดังนั้นให้เรามองไปยัง The key(s) to look up the value(s) และให้กด Get Fields จะได้แบบภาพด้านล่าง

เราจะตรวจเช็คเฉพาะ Primary Key ถ้าข้อมูลที่จะนำเข้านั้นมีในฐานข้อมูลแล้ว เราก็จะให้ทำการ Update ดังนั้นเราจะลบ FNAME, LNAME และ pass ออกให้เหลือแต่ ID สามารถเลือกไปที่ช่องเรากดปุ่ม Delete ได้

เราจะทำการตั้งค่าให้ถ้า ID ของ Excel เหมือนกับ ID ของฐานข้อมูล จะให้ทำการ Update แต่ถ้าไม่มีจะให้ทำการ Insert ลงไป โดย Table field(ช่องสีแดง) จะเป็นของฐานข้อมูล ส่วน Stream field1 คือส่วนของ Excel ดังนั้นให้เลือกตามที่สร้างไว้ ในที่นี้ได้สร้างให้ชื่อของไอดีฐานข้อมูลเป็นตัวเล็ก "id" ส่วนของ Comparator จะเลือกเป็น LIKE เนื่องจากเป็น String จะได้ตามภาพด้านล่างเลยครับ

ส่วนของ Update Fields นั้นคือจะให้ข้อมูล Fields ไหนของ Excel ไปเป็น Fields อะไรของฐานข้อมูล า่วนของช่อง Update นั้นจะเลือก Primary Key เป็น N คือ No คือจะไม่มีการ Update ในส่วนของ id  เมื่อได้เหมือนภาพด้านล่างแล้วให้กด OK ในการเสร็จ Process นี้ได้เลย

ต่อมาเป็นการ Run เพื่อดูผลงานเรากันครับ

เปิด phpmyAdmin ให้ดูว่าไม่มีข้อมูลอยู่ตอนแรกครับ

กด F9 ในการ Run ได้เลยครับ และกด Run ตามไปเลย

ถ้าการ Run ไม่มีข้อผิดพลาดทุก Process จะขึ้นเครื่องหมายถูกสีเขียวครับ
มาดู MySQL กันดีกว่ามีข้อมูลเข้ามาแล้วหรือยัง

ได้ข้อมูลเรียบร้อยบทความนี้ขอจบเพียงเท่านี้นะครับ

ขอเพิ่มเกร็ดที่ได้จากการทดลอง Insert/Update และ Table output คือแนะนำให้ใช้ Insert/Update ดีกว่าเพื่อเราจะต่อยอดทำการ Interval ให้ข้อมูลที่เพิ่มเข้ามาใหม่เข้าไปในฐานข้อมูลเองเลย โดยที่เราไม่ต้องมานั่งกด Run ทุกครั้ง

ไม่มีความคิดเห็น:

แสดงความคิดเห็น