Be Intentional About the Batching Model in Your Data Pipelines

โดย Raghotham Murthy

ตอนที่เราสร้าง batch data pipelines จะมีโมเดลอยู่ 2 แบบคือ

  1. Data Time Window (DTW) Batching Model
  2. Arrival Time Window (ATW) Batching Model

Data Time Window Batching Model

โมเดลแบบนี้เราจะถึงข้อมูลจาก source โดยใช้ timestamp จาก source เลย เช่น ถ้าข้อมูลเก็บตอนวันที่ 2023-03-24 เราก็ดึงข้อมูลพวกนี้โดยใช้วันที่ 2023-03-24 เลย ซึ่งชีวิตของ data analyst ก็จะง่ายขึ้น เพราะเหมือนกับเรารับประกันว่าเราจะได้ข้อมูลของวันที่ 2023-03-24 ทั้งหมด

แต่ว่าโมเดล DTW จะไม่ค่อย predictable เท่าไหร่ เพราะว่าอาจจะมีข้อมูลที่ out-of-order อยู่ เช่นข้อมูลของวันนั้น ๆ ยังเก็บเข้า source ไม่ครบทั้งหมด ก็จะทำให้การดึงข้อมูลของเราล่าช้าได้ เพราะต้องรอข้อมูลของวันนั้นให้ครบก่อน (ไม่งั้นต้องมาดึงย้อนหลังเอง)

Arrival Time Window Batching Model

ATW จะเป็นเวลาที่เราได้รับข้อมูลจากการดึงข้อมูลนั้น ๆ คือประมาณว่าเราจะตั้ง schedule ดึงข้อมูล ณ เวลาหนึ่ง เช่น 8:00 น. แล้วข้อมูลที่เข้ามาที่ source ก่อนเวลา 8:00 น. ก็จะถูกดึงเข้ามา แบบนี้ก็จะมีข้อดีขึ้นไม่ต้องรอข้อมูลที่ out-of-order อยู่ ถ้าข้อมูลนั้นมีเมื่อไหร่ มันก็จะถูกดึงมาใน time window ถัดไป

ทั้งนี้ทั้งนั้น เราไม่ต้องเลือกข้างว่าจะทำ DTW หรือ ATW นะ จริง ๆ เราสามารถทำควบคู่กันไปได้เลย คือ เราอาจจะเริ่มที่ ATW ก่อน แล้วเก็บข้อมูลทั้ง data_timestamp กับ arrival_timestamp ไว้ที่ table เดียวกันตอนที่เราดึงข้อมูลมา ประมาณนี้

arrival_time_table จากหนังสือ

เสร็จแล้วก็อาจจะตั้ง schedule ทำ query อีกรอบหนึ่ง

Subsequent query จากหนังสือ

เพื่อไปสร้าง table ที่เป็นแบบ DTW ตามรูปด้านล่าง และสุดท้ายเราก็ให้ data analyst มา query ที่ table นี้ที่เป็น DTW ได้เลย

closed_books_table จากหนังสือ

สุดท้ายแล้ว data analyst สามารถเลือกได้ว่าเค้าจะ query ข้อมูลจาก table ไหน ถ้าอยากได้ข้อมูลเร็ว ๆ ก็ query จาก arrival_time_table ได้ แต่ถ้าอยากได้ข้อมูลครบ ๆ หน่อยก็ query จาก closed_books_table แทน

มันจะมี edge case คือ

multi-national org ที่ใช้หลายๆ operating timezone

ปวดหัวเลยทีนี้ ว่า ต้องยึด timezone ที่ไหน :scream: