Data pipeline แท้จริงแล้วมันคืออะไร
จากที่ได้เกริ่นเรื่องการดึงข้อมูลจากแหล่งข้อมูล (Data Collection) ไปในบท สรุปหน้าที่ของนักวิทยาศาสตร์ข้อมูลและกระบวนการทางวิทยาการข้อมูล นั้น จะมาลงรายละเอียดในเรื่องนี้กันให้ลึกขึ้นอีกสักนิด ว่าในขั้นตอนนี้ มีกระบวนการอะไรบ้างที่เกี่ยวข้อง
ที่เคยยกตัวอย่างไว้ว่า “เปรียบเทียบแหล่งข้อมูลกับบ่อน้ำมันดิบก็น่าจะพอทำให้เห็นภาพ น้ำมันดิบที่ได้จากแท่นขุดเจาะ ยังไม่สามารถนำมาใช้งานได้เลยในทันที เช่นกัน แหล่งข้อมูลต่าง ๆ ไม่จำเป็นจะต้องอยู่แหล่งเดียว อาจจะมีข้อมูลหลายประเภท ทั้งข้อความ รูปภาพ วิดีโอ และ เสียง สิ่งเหล่านี้ยังไม่สามารถ ให้คำตอบในสิ่งที่เราอยากรู้เพื่อแก้ไขปัญหาได้ จึงจำเป็นต้องมีทักษะ ที่ช่วยนำข้อมูล ต่าง ๆ เหล่านี้ รวบรวม จัดกลุ่ม ให้สามารถนำมาใช้งานได้ง่ายขึ้น ”
เมื่อบ่อน้ำมันมีหลายแห่ง มีความแตกต่างของสารน้ำมัน ดังนั้นก็จะมาเข้าสู่วิธีการที่จัดการน้ำมันด้วยวิธีการทำ Data Pipeline นั้นเอง (ให้แทนคำว่าน้ำมัน เป็น ข้อมูลด้วยนะ ยกตัวอย่างให้เห็นภาพง่ายเท่านั้นเอง)
Data pipeline แท้จริงแล้วมันคืออะไร
คำว่า pipeline ถูกนำไปใช้ในหลายๆงาน ซึ่งมีลักษณะเป็นระบบ (System) ที่มีขั้นตอน ซึ่งในการทำงานกับสิ่งที่เรียกว่าข้อมูล (Data) ข้อมูลบนคอมพิวเตอร์เป็นสิ่งที่สมมติขึ้นมาว่ามันคือเอกสารที่มีตัวหนังสือ หรือสิ่งที่ทำให้เกิดเสียง เกิดรูปภาพ วิดีโอ แท้จริงแล้วมันคือสิ่งที่ถูกกำหนดให้เป็นอยู่ในรูปเอกสารต่าง ๆ ซึ่งมันคือจำนวน binary อัดรวมกันจนเป็นสื่อเอกสารที่ ทำให้มนุษย์เข้าใจและเราสามารถรับรู้สิ่งนั้น ๆได้ แต่วิธีที่จะทำให้เข้าใจในเรื่องของ Data Pipeline ให้ลองจินตนาการขึ้นว่ามันเป็นเหมือนกับ น้ำในท่อที่รอการระบายหรือไหลไปในทิศทางที่เราต้องการ
เมื่อมีอะไรที่ถูกเปรียบเทียบกับ “ท่อ” หรือ “ระบบ” สิ่งนั้นมักจะตกเป็นหน้าที่ของผู้คนที่คลั่งไคล้การทำงานกับสิ่งที่ซับซ้อนหรือมีทักษะการทำระบบ ถูกนิยามว่าเป็น “วิศวกร” ดังนั้น สิ่งที่เรากำลังพูดถึงกันอยู่มันเกี่ยวกับข้อมูล จึงถูกเรียกว่า วิศวกรข้อมูล (Data Engineer)
Data Engineer คือใคร มีหน้าที่อะไร
จะขอเกริ่นเพื่อให้เห็นภาพคร่าว ๆ ว่าคนที่มีหน้าที่ทำ Data Engineer คือ คนที่ช่วยสร้างระบบในการส่งข้อมูล (Data Pipeline) และจัดเก็บข้อมูลต่าง ๆ ซึ่งทักษะที่จำเป็นจะเน้นไปทางด้านการเขียนโปรแกรม วิศวกรรมซอฟต์แวร์ และ เครื่องมือในการจัดการกับข้อมูลต่าง ๆ
คราวนี้เมื่อเรารู้ว่า การทำ Data pipeline และ คนที่มีหน้าที่จัดการข้อมูลนั้นคือ Data Engineer คราวนี้เรามาเรียนรู้แนวคิดและวิธีจัดการกับข้อมูลกัน จากในหลายๆเรื่องจะมีส่วนที่คาบเกี่ยวกันทั้งสิ้น จะมากหรือน้อยขึ้นอยู่กับการนำไปใช้งาน จากที่เคยเล่าว่า ขั้นตอนของการทำ Data Science มันมีส่วนที่ต้องจัดการข้อมูล อยู่ในเรื่องของ Data pipeline จริง ๆแล้วก็เป็นส่วนหนึ่งของวิชา “การออกแบบคลังข้อมูล” หรือ Data Warehouse โดยในบทความนี้ จะนำหลักการและแนวคิด ในการทำระบบจากวิชานี้กัน ทั้งหมดนี้จะเป็นแนวคิดและเฟรมเวิร์คสำหรับการทำ ETL Engineer
หลักการทำงานของคลังข้อมูล หลักๆแล้วจะแบ่งออกเป็น 3 ส่วนใหญ่ๆ คือ
1. การเก็บรวบรวมและได้มาซึ่งข้อมูล
2. การจัดเก็บข้อมูล
3. การเข้าถึงข้อมูลสารสนเทศแล้วส่งต่อไปยังผู้ใช้ข้อมูล
จากทั้ง 3 ส่วนนี้ คุ้นๆมั้ยว่า มันคล้ายๆกัน
ให้ลองนึกว่า Data Engineer กำลังทำสิ่งพวกนี้อยู่ แล้วในฐานะ Data Science นั้นเป็นเหมือนกับผู้ใช้งาน ที่นำข้อมูลที่ถูกลำเลียงมา ไปวิเคราะห์หรือสร้างโมเดลบางอย่างต่อ
ซึ่งในส่วนของข้อ 1 และ 2 นั้นเป็นเหมือนกับเบื้องหลังของการทำงาน โดยจะประกอบไปด้วยเทคนิคอีก 3 ฟังก์ชันด้วยกัน นั่นคือ อีทีแอล (ETL) เป็นตัวย่อมาจากคำว่า
Data Extraction - การสกัดข้อมูล
Transformation – การเปลี่ยนแปลง/ เปลี่ยนรูปข้อมูล
Loading – การถ่ายโอนข้อมูล
โดยการทำงานของ 3 ฟังก์ชันนี้จะทำงานแบบเรียงต่อกันทีละฟังก์ชันเป็นลำดับ โดยเริ่มจาก การสกัดข้อมูล การค้นข้อมูล จากแหล่งข้อมูลต้นทาง (Data Extraction) จากนั้นก็ทำการเปลี่ยนรูปให้อยู่รูปแบบที่เหมาะสมหรือเป็นมาตรฐานตามที่กำหนดเอาไว้ สมมติว่ามีการนำข้อมูลมาจากหลายๆ แหล่งที่คิดว่าเป็นข้อมูลคล้ายๆกัน แต่ว่ามีการจัดเก็บที่ไม่เหมือนกันเลย ดังนั้นจะต้องนำมาจัดการให้มีความคล้ายกันเสียก่อน จึงจะนำไปใช้งานได้ (Transformation/Data Processing) สุดท้ายจึงจะนำข้อมูลไปจัดเก็บเอาไว้ที่ฐานข้อมูล เพื่อพักข้อมูลเอาไว้ (Staging) ก่อนหรือนำไปใช้งานเลยก็สุดแล้วแต่การออกแบบ
Data Extraction - การสกัดข้อมูล
สิ่งที่จะต้องคำนึงถึงในการสกัดข้อมูล และ ความเข้าใจหลักการพื้นฐาน ข้อเท็จจริงหรือแนวปฏิบัติสำหรับการสกัดข้อมูล คือ “เราจะต้องออกแบบการสกัดข้อมูลให้มีการใช้งานหรือยุ่งกับแหล่งข้อมูลต้นทางให้น้อยที่สุด”
- แหล่งข้อมูลอาจจะมีข้อมูลจำนวนมาก ทำให้การลำเลียงข้อมูลนำมาในปริมาณทั้งหมดไม่ได้
- การสกัดข้อมูลจะต้องทำให้เร็วที่สุด หมายความว่า บางครั้งข้อมูลมีการเปลี่ยนแปลงอยู่เสมอ
- ไม่ควรทำการสกัดข้อมูลจากแหล่งข้อมูลบ่อยๆ เพราะจะเป็นการรบกวนระบบเครือข่ายของแหล่งข้อมูลต้นทาง
- ควรทำการเปลี่ยนระบบให้น้อยที่สุด
จากรายละเอียดเบื้องต้นนั้น จำเป็นต้องให้ความสำคัญและใส่ใจในรายละเอียดกับระบบเพราะเป็นการดำเนินงานของธุรกิจที่ข้อมูลของธุรกิจนั้นๆ อาจจะกระจายตัวอยู่หลายแห่ง ซึ่งจะมีการเปลี่ยนแปลงของข้อมูลอยู่ตลอดเวลา เช่นการเพิ่มข้อมูล การปรับปรุงข้อมูล การลบข้อมูล ดังนั้นเมื่อเราทำการออกแบบการสกัดข้อมูลจะต้องให้ความสนใจกับสถานะของข้อมูลระบบให้มากๆ
วิธีในการถ่ายโอนข้อมูลในครั้งแรกจะเรียกว่า Full Load หรือ Initial Load หลังจากที่ระบบได้ดำเนินงานไปสักพักแล้วมีข้อมูลเพิ่มขึ้นหรือเปลี่ยนแปลง จะต้องทำการสกัดข้อมูลที่เพิ่มขึ้นหรือเปลี่ยนแปลงในครั้งถัดๆไปด้วย จะเรียกว่า Ongoing Incremental load โดยในขั้นตอนนี้จะมีเรื่องของการตั้งเวลา หรือกำหนดเวลาสำหรับการสกัดข้อมูลและทำการถ่ายโอนข้อมูล (Batch) เข้ามาเกี่ยวข้อง
จากการถ่ายโอนทั้ง 2 เหตุการณ์ ต่างเวลากันจึงจำเป็นต้องมีการพิจารณาถึงขั้นตอนการทำงานของวิธีการถ่ายโอนให้เหมาะสม โดยพิจารณาไปตามขั้นตอนดังนี้
Source Identification – ระบุแหล่งข้อมูลและโครงสร้างของแหล่งข้อมูล เช่น Server อยู่ที่ไหน IP Address อะไร ฐานข้อมูลชื่ออะไร ตารางชื่ออะไร คอลัมน์มีอะไรบ้าง
Method for extraction – การกำหนดวิธีในการสกัดข้อมูลสำหรับแต่ละแหล่งข้อมูล เพราะว่าในแต่ละแหล่งมีรูปแบบที่ไม่เหมือนกัน ความยากง่ายของระบบแตกต่างกัน จะเป็นการสร้างฟังก์ชันโปรแกรมเอง หรือ จะใช้เครื่องที่มีอยู่แล้วเพื่อความรวดเร็วในการทำงาน
Extraction frequency – การกำหนดความถี่ในการสกัดข้อมูลจากแหล่งข้อมูล เช่น สกัดวันละครั้ง อาทิตย์ละครั้ง จะต้องดูตามความเหมาะสมในการสกัดเพราะบางระบบ ไม่อนุญาตให้ไปดึงข้อมูลทุกวันเช่น การจำกัดด้วยโควตา หรือ data transfer เป็นต้น
Time window – การกำหนดช่วงเวลาที่เหมาะสม เช่นจะต้องทำการดึงข้อมูลหรือสกัดข้อมูลในช่วงกลางคืน อาจจะเป็นทุกเที่ยงคืน หรือ ตีหนึ่ง เพราะในช่วงกลางวัน มีการใช้งานจากผู้ใช้งาน โดยจะใช้การตั้งเวลาเป็นตัวจัดการ (Batch)
Job sequencing - การกำหนดลำดับการทำงาน จะต้องดูว่างานไหนควรทำในช่วงไหน ก่อน-หลัง เป็นขั้นตอน ซึ่งเป็นไปตามคิวหรือไม่ สามารถทำงานพร้อมกัน Asynchronous ได้หรือไม่ หรือต้องรอให้เสร็จเป็นลำดับ
Exception handing – กำหนดวิธีการจัดการข้อมูลที่ไม่สามารถสกัดได้ อย่างเช่น Server Down หรือระบบเครือข่ายเกิดข้อผิดพลาด เป็นต้น ซึ่งจะทำให้ข้อมูลในช่วงเวลา นั้นหายไป
เทคนิคในการสกัดข้อมูลแบบต่างๆ
ก่อนที่จะทำการสกัดจำเป็นต้องทำความเข้าใจต่อโครงสร้างข้อมูลและการจัดเก็บข้อมูลในระบบเสียก่อน เพื่อประสิทธิภาพในการสกัด ซึ่งข้อมูลจะมีการเปลี่ยนแปลงอยู่เสมอ
โดยส่วนใหญ่แล้วข้อมูลที่ถูกเก็บในระบบที่กำลังใช้งานหรือดำเนินการอยู่ จะมีการเปลี่ยนแปลงอยู่เสมอ สามารถแบ่งออกได้เป็น 2 ประเภท คือ (1) ข้อมูลปัจจุบัน และ (2) ข้อมูลที่มีการเปลี่ยนแปลงไปตามกาลเวลา ดังนั้นเราจะต้องออกแบบและกำหนดเทคนิคที่ใช้ในการสกัดให้สอดคล้องกับชนิดของข้อมูลที่ถูกเก็บอยู่ในระบบ
สิ่งที่จะเป็นต้องคำนึงถึงของประเภทข้อมูล
(1) ข้อมูลปัจจุบัน ส่วนใหญ่นั้นข้อมูลที่เป็นปัจจุบันที่แสดงถึงข้อมูล ณ เวลานั้นๆ เป็นข้อมูลแบบชั่วคราวสามารถเปลี่ยนแปลงได้ ไม่สามารถรู้ได้ว่าจะเปลี่ยนแปลงเมื่อไร ข้อมูลเหล่านี้จะยังคงไม่มีการเปลี่ยนแปลงไปจนกว่าจะเกิด Transaction หรือธุรกรรมทางธุรกิจ เช่น ชื่อ ที่อยู่ หรือยอดเงินในบัญชี เป็นต้น
(2) ข้อมูลลักษณะนี้จะมีการเปลี่ยนแปลงเกิดขึ้นและรวมถึงการเพิ่มข้อมูลเข้าสู่ฐานข้อมูลในแต่ละครั้ง โดยแต่ละครั้งที่มีการเปลี่ยนแปลงเกิดขึ้นเราจะต้องทำการเก็บเวลาที่ใช้ในการอ้างอิงด้วย สามารถบอกได้ถึงลำดับการเปลี่ยนแปลง และ สถานะปัจจุบัน โดยจะต้องเก็บสถานะต่างๆของข้อมูลที่เกิดจากการเปลี่ยนแปลงข้อมูลด้วย เพื่อเอาไว้วิเคราะห์ปัญหาที่อาจเกิดขึ้น รวมถึงสถิติต่างๆย้อนหลังด้วย
เทคนิคการสกัดข้อมูลแบบทันที
การสกัดข้อมูลแบบทันที จะเกิดขึ้นเมื่อแหล่งข้อมูลมีการเพิ่มขึ้นหรือมีการเปลี่ยนแปลง โดยจะสกัดแบบทันทีมีวิธีการทำอยู่ 3 แบบได้แก่
1. การสกัดข้อมูลโดยใช้ Logs จากฐานข้อมูล โดยปกติของระบบจัดการฐานข้อมูลจะมีการเขียนข้อมูลลง Logs อยู่แล้ว เมื่อมีการ เพิ่ม ลบ ปรับปรุงข้อมูลเรคคอร์ดหนึ่ง ในฐานข้อมูล โดยการอ่าน Logs นั้นจะไม่ทำให้การทำงานของระบบที่ทำงานอยู่เพิ่มขึ้น
2. การสกัดข้อมูลโดยใช้ Database Triggers วิธีการนี้จะเป็นการสกัดจากระบบการดำเนินการจากฐานข้อมูลโดยใช้ Trigger หรือเขียนโปรแกรมขึ้นมา โดยโปรแกรม Trigger นั้นจะถูกเก็บอยู่ในฐานข้อมูลและถูกเรียกใช้งานก็ต่อเมื่อมีเหตุการณ์ที่เรากำหนดไว้ล่วงหน้า หรือเกิดเหตุการณ์ที่เกี่ยวข้องกับข้อมูลที่เราต้องการสกัด
3. การสกัดข้อมูลโดยทำการสร้างแอปพลิเคชันไว้ที่แหล่งข้อมูล การสร้างโปรแกรมที่เกี่ยวข้อง การสกัดข้อมูลสำหรับเขียนข้อมูลลงไฟล์และฐานข้อมูล ในทุกๆครั้งที่มีการใช้งาน จะเพิ่ม ลบ แก้ไข ต่างๆขึ้นอยู่กับเงื่อนไขที่ต้องการเก็บข้อมูล โดยวิธีนี้แตกต่างจาก 2 วิธีแรก แต่ก็เป็นวิธีที่ใช้กันเยอะในหลายๆระบบ
เทคนิคการสกัดข้อมูลแบบรอเวลา
การสกัดในลักษณะนี้มักจะเรียกว่า Batch หรือ Scheduling จะเป็นการตั้งเวลาเอาไว้ เพื่อ เพิ่ม ลบ แก้ไขข้อมูล ซึ่งจะเกิดขึ้นตามเวลาที่ได้กำหนดเอาไว้ โดยมี 2 แบบได้แก่
1. การสกัดข้อมูลโดยใช้ข้อมูลวันและเวลา วิธีการนี้จะต้องแนบ Time stamp เอาไว้ด้วยเสมอเพื่อเป็นตัวบอกว่ามีการ เพิ่มหรือแก้ไขลงในฐานข้อมูลไปเมื่อไร โดยใช้ช่วงเวลาที่แน่นอน
2. การสกัดข้อมูลโดยการเปรียบเทียบไฟล์ วิธีการนี้สามารถเรียกได้อย่างหนึ่งว่า snapshot differential technique เป็นการเปรียบเทียบไฟล์ข้อมูลที่ได้จากการสกัดข้อมูล 2 ครั้งล่าสุด ถ้าคลังข้อมูลทำการสกัดข้อมูลวันละ 1 ครั้ง โดยมีขั้นตอนว่า จะเริ่มสกัดข้อมูลในวันปัจจุบันแล้วสำเนาเก็บไว้แล้วนำไปเปรียบเทียบกับข้อมูลก่อนหน้า เพื่อเปรียบเทียบ เราจะทราบถึงข้อมูลที่มีการเปลี่ยนแปลง เพราะเกิดความแตกต่างระหว่างข้อมูลทั้ง 2 ครั้ง
Transformation – การเปลี่ยนแปลง/ เปลี่ยนรูปข้อมูล
ในการเปลี่ยนแปลงข้อมูลนั้น ขั้นตอนนี้จะเริ่มทำงานก็ต่อเมื่อข้อมูลที่ได้รับมาจากขั้นตอนการสกัดนั้นยังไม่มีคุณภาพเพียงพอ หรือยังไม่เป็นมาตรฐาน คำว่าไม่มีคุณภาพเพียงพอหรือไม่เป็นมาตรฐานจากที่เขียนไว้ตอนต้นแล้ว ความหมายก็คือ อาจจะยังมีข้อมูลไม่ครบถ้วนหรือ ข้อมูลที่ได้มาจากหลายๆแหล่งมีความสัมพันธ์กันแต่อาจจะไม่ตรงกันซึ่งจะต้องนำมาตรวจสอบความถูกต้องเสียก่อน ซึ่งในขั้นตอนนี้จะมีหน้าที่ในการทำความสะอาดข้อมูล(Data Cleansing/ Data wrangling) และ รวมข้อมูลทำให้ข้อมูลเป็นมาตรฐานตามที่กำหนด
ดังนั้นก่อนที่จะทำการเปลี่ยนแปลงข้อมูลจะต้องเข้าใจถึงโครงสร้างและแหล่งของข้อมูล เทคนิคต่างๆที่ใช้ในการเปลี่ยนแปลงข้อมูลเสียก่อน ซึ่งการเปลี่ยนแปลงข้อมูลสามารถแบ่งเป็นขั้นตอนย่อยๆ ได้หลายขั้นตอนดังนี้
Selection – สำหรับ Data Engineer หรือคนที่เคยใช้ SQL คงจะคุ้นเคยกันดีอยู่แล้ว ซึ่ง Select ก็คือการเลือกกลุ่มข้อมูลบางกลุ่มจากแหล่งข้อมูล Selection เป็นขั้นตอนหนึ่งในการสกัดข้อมูล ในบางกรณีโครงสร้างของข้อมูลก็อาจจะไม่เหมาะในการสกัดข้อมูล อาจจะต้องทำการสกัดใหม่อีกครั้งแล้วค่อยเลือกข้อมูลเพื่อทำการเปลี่ยนแปลง
Splitting/Joining – การแบ่งส่วนของข้อมูล บางครั้งข้อมูลมาเป็นชุด โดยในแต่ละชุดจะรวมข้อมูลที่แตกต่างกันอยู่โดยใช้ อักขระอักษรบางตัวมากำหนดในการแบ่ง ยกตัวอย่างเช่น 2021-01-01 ซึ่งเราเข้าใจกันเป็นมาตรฐานอยู่แล้วว่า ถ้าข้อมูลมาในรูปแบบที่ยกตัวอย่าง เป็นวันเดือนปีแน่นอน แล้วกั้นด้วยตัวอักขระ Dash (ต้องเข้าใจข้อมูลหรือมีการตกลงกันในการกำหนดรูปแบบ อาจจะเป็น พ.ศ. หรือ ค.ศ.)
Conversion – การทำให้ข้อมูลเป็นมาตรฐานเดียวกัน และทำให้ field ต่างๆเข้าใจได้ง่ายขึ้น
Summarization – บางครั้งในการออกแบบ ผู้ออกแบบฐานข้อมูลอาจจะคิดไปเองว่าจะต้องเก็บข้อมูลทั้งหมดอย่างละเอียด ซึ่งจริงๆแล้ว ผู้ใช้ข้อมูลอาจจะไม่ได้ต้องการข้อมูลอื่นๆ นอกจากข้อมูลที่ผู้ใช้อยากรู้ ยกตัวอย่างเช่น ยอดขาย ดังนั้นจำเป็นต้องสรุปข้อมูลเพื่อให้สอดคล้องต่อความต้องการ
Enrichment – การจัดแจงข้อมูลของ column ที่มีอยู่ใหม่ และทำให้เข้าใจได้ง่าย ทำให้มีประโยชน์มากขึ้น เช่น อาจจะใช้ 1 column ที่มีข้อมูลสร้างมุมมองขึ้นใหม่ ก่อนที่จะป้อนข้อมูลไปยังคลังข้อมูล
Format Revisions – การเปลี่ยนชนิดของข้อมูลและความยาวของข้อมูล ควรจะทำการสร้างมาตรฐาน และ ทำการเปลี่ยนแปลงชนิดของข้อมูลให้มีความหมายไปตามลักษณะข้อมูลที่มันเป็น เพื่อที่ผู้ใช้สามารถเข้าใจได้ง่ายขึ้น
Decoding of Fields – การถอดรหัสที่อาจเกิดขึ้นจากแหล่งข้อมูลหลายแหล่ง เราอาจจะพบข้อมูลที่เป็นรหัส เช่น เพศ เป็น 1 และ 2 หรือ M และ F หากพบเจอรหัสลักษณะนี้ เราจำเป็นต้องถอดรหัสลับและเปลี่ยนข้อมูลเหล่านั้นให้เป็นข้อมูลที่ผู้ใช้สามารถเข้าใจ
Calculated and Derived Values – การคำนวณหรือหาผลสรุปของข้อมูลและการนำข้อมูลเหล่านั้นไปใช้ เราจะต้องทำการคำนวนก่อนที่เก็บข้อมูลลงในคลังข้อมูล
Splitting of Single Fields – การแยกข้อมูลที่รวมอยู่ใน column เดียวออกจากกันเพื่อเพิ่มประสิทธิภาพในการทำงานของระบบ ยกตัวอย่างเช่น ข้อมูลที่อยู่ บางระบบเก็บ จังหวัด เขต รหัสไปรษณีย์เอาไว้ใน column เดียวกัน เมื่อนำไปใช้งาน เช่นการ ค้นหา Search ก็จะทำได้ยาก
Merging Information – การผสานข้อมูลที่มีรายละเอียดแต่ละส่วนกระจายอยู่หลายแหล่งเข้าด้วยกัน ยกตัวอย่างเช่น ข้อมูลเกี่ยวกับสินค้า อาจจะมาจากหลายสาขาแต่มีความอธิบายลักษณะจากแหล่งเดียวกัน
Character set conversion – การแปลงชุดข้อมูลที่เป็นตัวอักษรให้เป็นมาตรฐาน เพื่อใช้ในการจัดเก็บข้อมูลในคลังข้อมูล บางครั้งเราอาจจะเจอข้อมูลที่มีการเข้ารหัสที่ไม่สามารถอ่านออกได้ จะต้องแปลงข้อมูลให้อยู่ในลักษณะที่มนุษย์เข้าใจ
Conversion of Units of Measurements - การแปลงหน่วย หลายๆบริษัทที่กระจายการทำธุรกิจในหลายๆประเทศ หน่วยต่างๆจะต้องนำมาคิดพิจารณาเพื่อเปลี่ยนแปลงค่าให้ตรงกันด้วย
Date/Time Conversion – การแปลงหน่วยของวันและเวลาให้อยู่ในมาตรฐานเดียวกัน เช่น 12/12/2021 กับ 12 ธันวาคม 2564 ทำให้เป็น Format เดียวกัน
Key Restructuring – การสร้างคีย์ใหม่แทนที่ของเดิม เช่น การแสดงโค้ดของสินค้าซึ่งถูกกำหนดโดยสามารถบอกถึงแหล่งที่มาได้และมีความซับซ้อน อาจจะกำหนดเป็น Primary key ถ้าสินค้ามีการเคลื่อนย้ายในฐานข้อมูลก็อาจจะทำให้เกิดปัญหากับระบบเดิม
Deduplication – การขจัดความซ้ำซ้อนของข้อมูล ตัวอย่างเช่น มีการจัดเก็บข้อมูลลูกค้ามีการเก็บเอาไว้หลาย Record แต่สำหรับคลังข้อมูลจะต้องเก็บเอาไว้เพียงข้อมูลเดียวเพื่อลดความซ้ำซ้อนลง
Loading – การถ่ายโอนข้อมูล
เมื่อผ่านกระบวนการทั้ง 2 ขั้นตอนที่ผ่านมาแล้ว เราจะทำการถ่ายโอนข้อมูลที่จัดการ ทำความสะอาดข้อมูล (Data Cleansing/ Data wrangling) เปลี่ยนแปลงข้อมูล (Transform) และ ประมวลผลข้อมูลเป็นที่เสร็จสิ้น (Data Processing) เราก็จะทำการโอนถ่ายข้อมูลเข้าสู่คลังข้อมูล เป็นขั้นตอนสุดท้ายของ อีทีแอล โดยในขั้นตอนนี้จะต้องหาเวลาที่เหมาะสมที่จะนำข้อมูลเข้า เพื่อไม่กระทบต่อการทำงานของระบบการดำเนินงานของระบบคลังข้อมูล ซึ่งวิธีการถ่ายโอนข้อมูลจะมีลักษณะของการส่งข้อมูลอยู่ 3 ลักษณะ หรือ คนละช่วงเวลา คนละเหตุการณ์ได้แก่
Initial Load
การโอนข้อมูลจากแหล่งข้อมูลไปยังคลังข้อมูลครั้งแรก สามารถถ่ายโอนข้อมูลได้ภายในครั้งเดียว สามารถใช้วิธี load ในการถ่ายโอนข้อมูลได้โดยตรง แต่ถ้าทำการแบ่ง Initial ออกเป็นการทำงานหลายๆ ครั้งเราจะต้องใช้วิธี load ในการถ่ายโอนข้อมูลครั้งแรกแล้วใช้วิธีการ append ในการถ่ายโอนข้อมูลในครั้งถัดๆไป
Incremental load
การเพิ่มข้อมูลที่มีการเปลี่ยนเข้าสู่คลังข้อมูลอย่างต่อเนื่องตามความจำเป็นในลักษณะที่เป็นระยะๆ ในหลายๆแอปฯ อาจจะมีการเปลี่ยนแปลงเกิดขึ้นในแหล่งข้อมูล ณ ช่วงเวลาหนึ่ง จำเป็นจะต้องเก็บช่วงเวลาการเปลี่ยนแปลงนั้นๆ
Full refresh
การลบข้อมูลทั้งหมดออกจากคลังข้อมูลแล้วทำการโอนข้อมูลที่ล่าสุด ลงไปในคลังข้อมูล ซึ่งการถ่ายโอนข้อมูลใหม่จะเหมือนกับการทำ Initial load อีกครั้ง
ข้อควรระวัง
ในการโหลดข้อมูลในแต่ละครั้ง ระบบที่มีข้อมูลปริมาณมากๆ จะทำให้ใช้เวลาในการโอนถ่ายค่อนข้างใช้เวลานาน ผู้ดูแลระบบ จำเป็นที่จะต้องทำการปิดระบบชั่วคราว โดยหาช่วงเวลาที่เหมาะสมไม่ส่งผลกระทบต่อผู้ใช้งาน ในการโหลดข้อมูล อาจจะพิจารณาแบ่งส่วนการถ่ายโอนเป็นช่วงๆ หรือส่วนเล็กทีละส่วน เพื่อให้ได้ใช้เวลาในแต่ละครั้งน้อยลง โดยมีข้อดีอยู่ 2 ข้อ คือ
1. อาจจะทำให้สามารถถ่ายโอนแบบขนานได้
2. อาจจะสำรองข้อมูลเอาไว้ก่อนแล้วจึงถ่ายโอนส่วนที่สำคัญลงคลังข้อมูล
จากขั้นตอนพื้นฐานของ “อีทีแอล” นั้นซึ่งกระบวนการ เริ่มจาก การสกัดข้อมูล, การประมวลผลข้อมูล เช่น การรวบรวมข้อมูลเข้าด้วยกัน การแยกข้อมูล การทำความสะอาดข้อมูล การปรับรูปแบบของข้อมูลต่างๆ หลังจากประมวลเบื้องต้นเป็นที่เรียบร้อย ทำการโอนข้อมูลที่ได้จากการประมวลผลเข้าสู่คลังข้อมูล นั้นทั้งหมดนี้ มีเทคนิคที่ควรเรียนรู้อีก 2 ประเภท คือ
1. สถาปัตยกรรมการใช้ Staging area ในการสกัดข้อมูล
2. สถาปัตยกรรมการสกัดข้อมูลโดยใช้หน่วยความจำ
สถาปัตยกรรมการใช้ Staging Area ในการสกัดข้อมูล คืออะไร
Staging Area หรือจะเรียกอีกอย่างว่า Data Staging เป็นที่พักข้อมูล ซึ่งจะอยู่ในรูปแบบของฐานข้อมูล หรือ ที่จัดเก็บเพื่อทำการประมวลผล (Transform) ที่ได้ทำการสกัดมาไว้เรียบร้อยแล้ว ก่อนที่จะนำไปไว้ที่คลังข้อมูล
สถาปัตยกรรมการสกัดข้อมูลโดยใช้หน่วยความจำ
เทคนิคนี้จะไม่มีที่เก็บข้อมูลหรือที่พักข้อมูลก่อนที่จะนำไปเก็บเข้าสู่คลังข้อมูล แต่จะเป็นการประมวลผลแล้วนำไปยังคลังข้อมูลโดยทันทีหลังจากที่ Transform เสร็จ
สรุป สำหรับเนื้อหาบทความนี้เป็นส่วนหนึ่งเล็กๆของประสบการณ์ของผู้เขียนด้านการทำระบบที่ยุ่งเกี่ยวกับข้อมูล สามารถนำมาใช้ Data Engineer ได้ และเรียบเรียงมาจากการเนื้อหาการออกแบบระบบคลังข้อมูล ซึ่งจะเห็นว่า ถ้าทำงานด้าน Data Science ส่วนที่สำคัญและขาดไม่ได้ก็คือด้านการทำระบบ
บทความนี้เป็นบทความฟรีที่ผู้เขียนรวบรวมไว้เพื่อเป็นองค์ความรู้ อยากให้ช่วยกด google ads ที่ผู้อ่านเห็น อย่าได้เลื่อนผ่านช่วยสร้างรายได้ให้แก่ผู้เขียนด้วยนะครับ
ติดต่อสอบถาม พูดคุยแลกเปลี่ยนกันได้ที่ Fanpage
Ref : การออกแบบคลังข้อมูลบทที่ 8 การสกัด การเปลี่ยนแปลงและการถ่ายโอนข้อมูล อ.โกเมศ อัมพวัน คณะวิทยาการสารสนเทศ ม.บูรพา