ETL মানে হলো Extract, Transform, Load। ডেটা নেওয়া, সাজানো, আর কোথাও স্টোর করা।
ধরুন, আপনি বাজার থেকে প্রতিদিনের সবজির দাম নিচ্ছেন (Extract), তারপর শুধু টমেটো আর আলুর দাম আলাদা করতেছেন (Transform), তারপর সেই তথ্য আপনার খাতায় লিখে রেখছেন (Load)। এটাই ETL। বিস্তারিত এখানে ব্যাখ্যা করতেছি না।
গত বছর আমাদের কোম্পানির প্রয়োজনে quickly একটি ETL প্রজেক্ট (JetShift) Python এ ডেভেলপ করি। শুধু আমাদের আর্জেন্ট যেসব ফিচার প্রয়োজন ছিল, শুধু সেগুলোই ক্রিয়েট করেছিলাম। কোন UI ছিল না।
কিছুদিন আগে প্ল্যান করি UI বানাব এবং ধীরে ধীরে আরো ফিচার এড করবো। Next.js এবং shadcn/ui ব্যবহার করে মোটামোটি একটি UI রেডি করলাম।
JetShift এর ব্যাকএন্ড শুরুতে Raw Python দিয়ে ডেভেলপ করেছিলাম। এবার Django তে মুভ করলাম। এর প্রধান কারণ ছিল UI এর জন্য Django-এর বিল্ট-ইন authentication, ORM, logging এবং অন্যান্য প্রয়োজনীয় বেসিক ফিচারগুলো সহজেই ব্যবহার করতে পারা। এই ধরনের কমন ফিচারগুলো নিজে তৈরি করতে সময় দিতে চাচ্ছিলাম না।
Next.js থেকে Django API সাথে কানেশনের জন্য JWT Auth ব্যবহার করেছি। এখন UI থেকে এই কাজগুলো করা যাচ্ছে:
- ডেটাবেজ কানেকশন ক্রিয়েট ও টেস্ট করা
- ডেটা মাইগ্রেট করা
- ETL টাস্ক সেটআপ করা
ডেটা মাইগ্রেট: লাইভ ডেটাবেস বা বড় সাইজের ডেটাবেজ মাইগ্রেট করার ক্ষেত্রে ডেটা chunk করে ট্রান্সফার করা যায়। এছাড়া Cron সেট করে নির্দিষ্ট সময় পর পর ডেটা মাইগ্রেট করা যায়।
ETL টাস্ক: এটিও সেইম ‘ডেটা মাইগ্রেট’ এর মতই কাজ করবে। শুধু একটাই পার্থক্য হচ্ছে এটি কখনো অফ হবে না। নির্দিষ্ট সময় পর পর নতুন ডেটা Reporting সার্ভার বা Warehouse এ সেন্ড করবে।
JetShift প্রজেক্টটি করা হয়েছিল schedule ভাবে ডেটা ট্রান্সফার করার জন্য। আমরা মুলত Reporting সার্ভারে (ClickHouse) ডেটা ট্রান্সফ্রারের জন্যই এটি তৈরি করি। আমরা ClickHouse Cloud ব্যবহার করি। শুধুমাত্র ডেটা ট্রান্সফার আর রিপোর্ট দেখার সময়ই ClickHouse সার্ভার অন করি। কাজ শেষ হলে অটো Idle মোডে চলে যায়। ডেটা ট্রান্সফ্রারের ১ মিনিট আগে ClickHouse সার্ভার API এর মাধ্যমে অটো Idle থেকে Active করা হয়।
শুরুতে আমরা RDS টু Amazon RedShift (zero-ETL), Real-time ডেটা ট্রন্সফার সেটাপ করেছিলাম। Low কনফিগ্রারেশনেও around 3500 USD বিল আসতেছিল। আমার কাছে অনেক কস্টলি মনে হচ্ছিল। আমি Real-time ট্রান্সফার অফ করে AWS Glue ইউজ করে schedule ভাবে ডেটা ট্রান্সফার করার ট্রাই করি। Glue & RedShift এ বিল আসতেছিল around 200-250 USD । কিন্তু Glue তে টাস্ক customize করতে প্যারা লাগতেছিল, ঠিকঠাক ভাবে কাজ করতেছিল না।
আরো কিছু ট্যুল ট্রাই করে, বিরক্ত হয়ে কাস্টম ETL প্রজেক্ট ক্রিয়েট করার প্ল্যান করি। এখন আমাদের কাজ সুন্দর ভাবে হয়ে যাচ্ছে। এখন মাথলি বিল দিচ্ছি শুধু around 20 USD!!!
আমি ফুল প্রজেক্টি ওপেন সোর্স করে দিব। আর কিছু ফিচার এড করবো। তারপর popular কিছু ডেটাবেজের সাপোর্ট দিয়ে ওপেন সোর্স করে দিবো, ইনশা-আল্লাহ্।
Stack & Tools:
Backend: Django (Python)
Frontend: Next.js, shadcn/ui
Job/Flow Management: Prefect
Multi-DB Query Engine: SQLAlchemy
Features:
- Full database migration with schema (partially done)
- Single-table and multi-table migration with schema (done)
- Powerful ETL capabilities (done)
- Easy report generation with JetShift Play (done)
- JetShift CLI (done)
- Event-based database migration
- Real-time data transfer
- And more…
Short Videos:
JetShift 1M Data Transfer (CLI alpha version): https://youtu.be/zsSUzPHZ7Oc
JetShift Basic UI Into: https://youtu.be/6321qJ3PXD0
বিদ্রঃ Airbyte, Glue সহ আরো অনেক ETL ট্যুল available আছে। আমি ভালো লাগা থেকে JetShift প্রজেক্টটি ডেভেলপ করতেছি।