Review ETL Process
ขั้นตอนยากที่สุดในการทำ Project เกี่ยวกับ Data ทุกคนบอกเป็นเสียงเดียวกันว่า ETL ยากสุด วันนี้เราจะมาทำความรู้จักเกี่ยวกับ ETL กันครับ
ETL คืออะไร (Extract-Transform-Load) คือ กระบวนการหนึ่งในระบบ Data Warehouse โดยระบบที่ออกแบบเอาไว้จะดึงข้อมูลออกมาจากหลายๆ ที่, นำกระบวนการตรวจสอบคุณภาพของข้อมูลมาประยุกต์ใช้, มีการเชื่อมโยงและปรับข้อมูลให้เป็นไปในรูปแบบเดียวกันเพื่อให้ ข้อมูลจากหลายๆ แหล่งสามารถใช้งานร่วมกันได้ และท้ายที่สุดทำการส่งมอบ (Delivery)
- Extract – กระบวน การดึงข้อมูลจากแหล่งของข้อมูลภายนอก
- Transforming – แปลง ข้อมูลเพื่อให้ได้ตรงตามกับความต้องการ ซึ่งเป็นกระบวนการที่ต้องใช้วิธีการเชิงคุณภาพ
- Loading – นำ ข้อมูลเข้าสู่ระบบปลายทางที่ต้องการ ซึ่งโดยทั่วไปจะหมายถึงระบบ Data Warehouse หรือ ฐานข้อมูลอื่นใด
Extract (กระบวนการดึงข้อมูล)
เป็นกระบวนการเริ่มต้นของระบบดึงข้อมูลจาก แหล่งของข้อมูล โดยทั่วไปแล้วระบบ Data warehouse จะประกอบด้วย ข้อมูลจากหลายๆ ที่ ข้อมูลที่อยู่ต่างที่กันนั้นอาจจะอยู่ในรูปแบบที่แตกต่างกันด้วยยกตัวอย่างเช่น อาจจะอยู่ในรูปแบบของฐานข้อมูลคนละชนิด หรือ ไม่ใช่ฐานข้อมูลแท้จริงซึ่งอาจจะเป็นระบบไฟล์ข้อมูลธรรมดา (Flat Files) หรือ ในอีกกรณีคือเป็นข้อมูลในฐานข้อมูลที่ไม่ใช่ระบบ RDBMS (Relational Database System) เช่นข้อมูลในรูปแบบของInformation Management System (IMS) หรือ ข้อมูลอื่นใดนอกระบบเช่น Virtual Storage Access Method (VSAM) หรือ Indexed Sequential Access Method (ISAM) หรือแม้กระทั่งการดึงจากข้อมูลรูปแบบ อื่นๆ ที่ดึงกันสด ๆจากระบบอื่นเลยเช่น Web Spider หรือ Screen scraping ข้อมูลจะถูกดึงเข้าสู่ระบบแบบ on-the-fly เป้าหมายของกระบวนการ Extract นี้คือดึงข้อมูลเข้ามาสู่รูปแบบมาตรฐานเดียวกัน เพื่อให้เหมาะสมต่อการแปลงรูปร่างของข้อมูลในขั้นตอนถัดไป เนื้อแท้ของกระบวนการนี้จะยุ่งเกี่ยวกับกระบวนอ่านข้อมูลที่ถูกดึงเข้าสู่ ระบบ ส่งผลให้เกิดกระบวนการตรวจสอบข้อมูลว่า ตรงตามรูปแบบที่กำหนดไว้เบื้องต้นหรือไม่ ทั้งรูปแบบของข้อมูล และ โครงสร้างของข้อมูล ซึ่งถ้าหากเกิดข้อมูลนั้นไม่ได้มาตรฐานหรือรูปแบบที่กำหนดเอาไว้เบื้องต้น ก็จะเกิดกระบวนการปฏิเสธ (Reject) ข้อมูลนั้นๆ
Transform (กระบวนการแปลงข้อมูล)
ขั้นตอนการแปลงข้อมูลนี้จะมีการใช้กฏหรือฟังชั่น(Function) มากมายเพื่อที่จะแปลงข้อมูลให้ได้ตามที่ต้องการก่อนที่จะ นำข้อมูลเข้าไปยังปลายทาง ข้อมูลจากต้นทางบางแหล่งข้อมูลมีความจำเป็นน้อยมากหรือแทบจะไม่ต้องการ การแปลงข้อมูลเลย แต่ในบางแหล่งอาจจะต้องการกระบวนการที่ซับซ้อน ซึ่งจะกินทรัพยากรระบบและเวลาในการประมวลผล ทั้งนี้ ความซับซ้อนของข้อมูลนั้นขึ้นอยู่กับความต้องการของธุรกิจ หรือ เป้าหมายของการนำข้อมูลไปใช้งาน โดยมีกระบวนการตัวอย่างต่อไปนี้
– Selection คือ เลือกเฉพา Column ที่ต้องการที่จะ Load ยกตัวอย่าง เช่น ถ้าต้นทางข้อมูลมี 3 Column หรือจะเรียกว่ามี 3 attributes เช่น roll_no, age และ salary จะมีการแปลงข้อมูล และ เลือกที่จะไม่มีการแปลงข้อมูลหากว่า column salary มีค่าเป็น Null
– Translation คือ การแปลข้อมูล ยกตัวอย่างเช่น หากข้อมูลต้นทางมีการเก็บข้อมูลเพศว่า 1 เป็นเพศชาย และ 2เป็นเพศหญิง จะต้องมีการแปลจากโค้ดที่กำหนดก่อนหน้านี้ให้ 1 = Male และ 2 = Female กระบวนการนี้เรียกว่า data cleaning หรือ กระบวนการทำความสะอาดข้อมูล
– Encoding free form ยกตัวอย่างเช่นการ mapping จาก “Male” ไปเป็น “1” และ “Mr” ไปเป็น “M”
– Deriving a new calculated value คือกระบวนการคำนวณเพื่อให้ได้ข้อมูลที่ต้องการยกตัวอย่างเช่นsale_amount = qty * unit_price
– Filtering คือ กระบวนการกรองเฉพาะข้อมูลที่กำหนด
– Sorting คือ กระบวนการเรียงข้อมูลที่ต้องการ
– Joining คือ กระบวนการเชื่อมโยงข้อมูลระหว่างตารางข้อมูล
– Aggregation คือ กระบวนการรวบรวม และ สรุปชุดข้อมูล ยกตัวอย่างเช่น การรวมยอด (summarize) ข้อมูลจากหลาย ๆ ระเบียนจนได้มาเป็น ยอดขายรวม เป็นต้น
– Generating surrogate key
– Transposing or pivoting คือการสลับทิศทางตำแหน่งของการแสดงข้อมูล เช่นการย้ายระเบียนไปเป็น Column หรือ ย้าย Column มาเป็นระเบียน เพื่อให้ง่ายต่อการนำข้อมูลไปใช้
– Splitting column into multiple columns คือ กระบวนการหั่นข้อมูลออกเป็นสดมภ์ย่อย ยกตัวอย่างเช่นถ้าข้อมูลเป็นข้อมูลวันที่เช่น 2010/08/13 10:58:02 ก็จะมีการหั่นเป็น Column ย่อย ๆ ได้เป็น 2010,08,13,10,58,02
– Disaggregationคือ กระบวนการยกเลิกการรวมข้อมูล ยกตัวอย่างเช่นแทนที่จะเก็บข้อมูลเป็นระเบียน แต่นำข้อมูลนั้นมาเชื่อมต่อกันเป็นระเบียนเดียว
– Lookup and validate data กระบวนการ Lookup ข้ามตารางเพื่อตรวจสอบความถูกต้องของข้อมูล
– Applying any form of simple or complex data validation กระบวนการนี้หากพบว่าการตรวจสอบข้อมูลผิด พลาดจะมีการปฏิเสธข้อมูลบางส่วนหรือทั้งหมดของข้อมูล แล้วแต่การกำหนดของผู้ที่ออกแบบการประมวลผลนี้
Load (ขั้นตอนการนำข้อมูลเข้าสู่ ระบบ)
กระบวน การโหลดข้อมูลเข้า โดยทั่วไปจะนำข้อมูลเข้าไปในระบบ Data Warehouse ทั้ง นี้ขึ้นอยู่กับความต้องการขององค์กร หรือ ธุรกิจว่าจะให้ข้อมูลไหลไปในทิศทางใด บางองค์กร หรือ บางงานจะมีการสะสมของข้อมูล ความถี่ของการนำข้อมูลเข้าสู่ระบบ อาจจะมีการล้างข้อมูลแล้วทับข้อมูลใหม่ โดยทั่วไปแล้วข้อมูลของ Data Warehouse จะมีการใช้กันปีต่อปี เมื่อขึ้นปีใหม่แล้วจะมีการล้างข้อมูลของปีเก่า และ เก็บไว้ในระบบข้อมูลสำรอง เนื่องจากว่ากระบวนการนำข้อมูลเข้าจะต้องปฏิสัมพันธ์กับฐานข้อมูล (Database) ดังนั้นจะต้องมีประเด็นเรื่องของ Database Constraints, Referential Integrity, Database Triggerเข้ามาเกี่ยวข้อง ด้วยในกระบวนการนำข้อมูลเข้า ซึ่งสิ่งเหล่านี้รวม ๆ แล้วเรียกว่า กระบวนการควบคุมคุณภาพของข้อมูล (Data Quality performance of E-T-L process)
ตัวอย่างการใช้ E-T-L
– สถาบันทางการเงินต้อง การทางการเงินของลูกค้าจากหลายๆแผนกและในแต่ละแผนกอาจจะข้อมูลที่เก็บเอาไว้ ในรูปแบบที่แตกต่างกันออกไป แผนกที่ดูแลลูกค้าอาจจะลูกค้าที่เรียงตามรายชื่อ ซึ่งแผนกบัญชีอาจใช้วิธีค้นหาลูกค้าด้วยหมายเลข ID ระบบ สามารถที่จะรวม ข้อมูลที่แตกต่างกันนี้พร้อมกับเชื่อมโยง ตรวจสอบคุณภาพของข้อมูลและนำเสนอในรูปแบบที่แตกต่างจากที่สองแผนกใช้กันอยู่
หรืออีกทางคือบริษัท หรือองค์กรใช้ E-T-L เพื่อย้ายข้อมูลจากระบบหนึ่งไปอีกระบบหนึ่งอย่างถาวร ยกตัวอย่างเช่น ข้อมูลจากระบบประมวลผลคำ(Word Processing) ซึ่งต้อง การจะแปลงให้เป็นรูปแบบของตัวเลขและตัวอัขระเพื่อเก็บในฐานข้อมูล ด้วยวิธีการเช่นนี้ก็สามารถกระทำได้ผ่านทาง E-T-L
วัฏจักร ในชิวิตจริง
วงจรการใช้งาน E-T-L ในชีวิตจริงประกอบด้วยกระบวนการดังต่อไปนี้
– Cycle initiation – เริ่ม ตั้งต้นวงจร
– Build reference data – สร้างข้อมูลอ้างอิง
– Validation – ตรวจสอบ ความถูกต้อง
– Transform – แปลงรูป ข้อมูล กระบวนการนี้รวมทั้ง การ ทำความสะอาดข้อมูล นำกฏและความต้องการของธุรกิจมาประยุกต์ใช้ ตรวจสอบความสมบูรณ์ของข้อมูล รวมผลข้อมูลหรือยกเลิกการรวมผลข้อมูล
– Stage – คือกระบวน การโหลดตารางข้อมูลตามลำดับขั้น
– Audit report ตรวจสอบ ความถูกต้องของข้อมูลยกตัวอย่างเช่น ความถูกต้องของข้อมูลว่าสามารถเข้ากันได้กับกฏเกณฑ์และความต้องการเบื้องต้น ของธุรกิจ
– Publish – เผยแพร่ ข้อมูลไปยังปลายทางเช่นตารางข้อมูล
– Archive – กระบวนการ เก็บข้อมูลให้เป็นเอกสารสำคัญ
– Clean up – ทำความ สะอาดร่องรอยที่หลงเหลือจากการทำงาน
สิ่งที่ท้าทายของระบบ
กระบวน การทำงานมีความสลับซับซ้อนและละเอียดอ่อนต่อข้อมูลมาก การทำงานอาจจะประสบปัญหาหนักหากใช้ระบบ ที่ออก แบบมาไม่ดี รวมทั้งปริมาณข้อมูลอาจจะเกินกว่าที่ระบบจะรองรับได้ ซึ่งต้องใช้ผู้ออกแบบ(designer) มานั่งเสียเวลาตรวจสอบ ระบบ Data Warehouse เป็นระบบที่มีข้อมูลจากหลายๆแหล่งต้องปฏิสัมพันธ์ด้วย ระบบ เป็นระบบเดียวที่เป็นตัวกลางในการประสาน งานระบบต่างๆ เข้าด้วยกัน การออกแบบระบบ ETL เพื่อการใช้งานจะ ต้องคำนึงถึงความสามารถในการขยายขนาด (Scalability) ของ E-T-L ด้วย เพราะเมื่อปริมาณข้อมูลมีขนาดใหญ่แล้วจะมีปัญหาหรือไม่ ระบบ ETL บางระบบมีความสามารถในการรองรับข้อมูลกระจายไปอยู่ในหลาย ๆ Hard disk ได้และสามารถกระจายการทำงานของ batch ให้ไปทำงานแยกตามเครื่องอื่น ๆ เพื่อช่วยประมวลผลได้ด้วย
ประสิทธิภาพ
การ benchmark จำนวนระเบียนสูงสุดที่ระบบตนสามารถทำได้ อยู่ที่ระดับ TB(terabyte) ต่อ ชั่วโมง หรือที่ระดับ ~1 GB ต่อ วินาที โดยการ Server ที่มี พลังสูงมี CPUs หลายตัว และมี Hard Drive หลายตัว และ มี Gigabit Network Interface รวมทั้งมี หน่วยความจำความเร็วสูงในปริมาณมากด้วย
ในชีวิตจริงนั้น กระบวนการทำงานที่ช้าที่สุดของระบบ ETL นั้นเกิดจากขั้นตอนการโหลดข้อมูลเข้าและออกจาก ฐานข้อมูล ระบบฐานข้อมูลอาจจะทำงานช้าเพราะระบบจะต้องคำนึงถึงการเข้าถึงพร้อมๆกันจาก หลายๆแหล่งข้อมูล(Concurrency) ซึ่งจะก่อให้เกิดความไม่ถูกต้องของข้อมูลตาม มาหากว่าไม่มีตัวนี้ อีกประเด็นสำคัญคือการจัดการกับระบบ Index แนวทาง ปฏิบัติในการทำงานเพื่อให้ได้ประสิทธิภาพที่สูงที่สุดมีแนวหลักคร่าวๆดังนี้
– ดึงข้อมูลออกหรือนำ ข้อมูลเข้าตรงๆให้มากที่สุดแทนที่จะใช้การ Query ข้อมูลเพื่อลดการใช้ทรัพยากรขณะทำการQuery
– ขั้นตอนการแปลงข้อมูล ให้กระภายนอกฐานข้อมูล
– ใช้ bulk load operation ให้มากจุดทีสุดเท่าที่จะทำได้
ถึงแม้ว่าจะใช้กระบวนการ bulk load ก็ตาม ฐานข้อมูลก็ยังเป็นคอขวดประเด็นของปัญหาใน ETL อยู่ เช่นเดิมวิธีการง่าย ๆ ในการเพิ่มประสิทธิภาพของระบบคือ
– Partition tables – พยายาม สร้างหรือทำ partition ให้เป็นขนาดเดียวกันเสมอ
– กระทำการตรวจสอบข้อมูล ในระดับของ ETL ก่อนที่จะโหลดข้อมูลเข้าไปฐานข้อมูล และ พยายามยกเลิกintegrity checking (disable constraint) ในตารางข้อมูลที่จะโหลดเข้า
– ยกเลิกการใช้ Trigger เพื่อลดการทำงานมากเกินไปของ Database
– Generate ID แทนที่จะให้ฐานข้อมูลทำ
– หากตารางนั้นมี Indexes อยู่ ให้ทำการ drop indexes ก่อน แล้วโหลดข้อมูลเข้า หลังจากที่โหลดแล้วจึงมาสร้างIndexes เหล่านั้นใน ภายหลัง
ข้อผิดพลาดของการทำงาน คือ การมี dependencies ระหว่างงานใน ETL มากเกินไปยกตัวอย่างเช่น งาน A ผูกกับงาน B และ งาน C ผูก กับ B ฯลฯ ดังนี้
A => B => C => D => E => F
หากเป็นเช่นนี้จะเกิดลูกโซ่ที่จะต้อง รองานให้แล้วเสร็จจาก A ถึง F เป็นระยะเวลานาน ซึ่งหากเลี่ยงได้ก็ไม่ควรจะผูกงานให้ยาวมากเกินไป ควรจะกระจายงานออกเป็นกลุ่มย่อย ๆ แล้วแยกกันทำงานจะทำได้เร็วและจัดการได้ดีกว่า
Parallel processing ETL
เมื่อเร็วๆที่ผ่านมานี้ระบบ ETL ได้พัฒนาก้าวไปอีกขั้น ด้วยการทำระบบ parallel processing ที่ช่วยกระจายงานไปทำงานในหลายๆเครื่องเพื่อ ช่วยเพิ่มประสิทธิภาพของการทำงานให้เร็วยิ่งขึ้น
Reference Information