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 เดียวกันตอนที่เราดึงข้อมูลมา ประมาณนี้

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

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

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

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

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

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