Zakariae Jaafari

المشاريعرئيسي

NYC Taxi dbt Analytics

نمذجة بُعدية بـ dbt وDuckDB: 109,047,518 رحلة صفراء في المصدر، و8,298,395 حقيقة عيّنة، و34 اختبارًا في CI.

نظرة عامة

مستودع analytics engineering للتاكسي الأصفر والأخضر. ingest_data.py يُنزل الملفات الشهرية إلى Parquet في DuckDB (مخطط prod). ثم يبني dbt طبقات staging وintermediate وmarts. عمل من Zoomcamp الوحدة 04، محليًا بدل BigQuery.

الواجهة

dbt docs for the incremental fct_trips mart in taxi_rides_ny (staging → marts star schema)
DuckDB explorer showing prod.yellow_tripdata and prod.green_tripdata
dbt docs project tree for taxi_rides_ny, with sources, models, seeds and packages

المشكلة

تنشر TLC عشرات الملايين من الصفوف بأسماء أعمدة مختلفة بين الأصفر والأخضر. يحتاج المحلل نماذج مكتوبة وموثّقة قابلة للربط.

الحل التقني

تحميل Parquet إلى DuckDB ثم بناء staging → intermediate → marts عبر dbt. تُنشئ الطبقة الوسيطة trip_id من حبيبات الرحلة المستقرة كاملة؛ فقد كانت مفتاح مختصر سابق يسقط 202,906 رحلة صحيحة. يحتفظ النموذج المصحح بكل 8,298,395 صفًا لشهر يناير، وتمنع fixture في CI تكرار الخطأ.

ما يوجد في المستودع

  • ingest_data.py: CSV.gz → Parquet → مخطط DuckDB prod
  • Staging للأصفر والأخضر بتسمية موحّدة
  • مخطط نجمي: dim_zones وdim_vendors وfct_trips تزايدي وfct_monthly_zone_revenue
  • بذور المناطق وأنواع الدفع؛ دوال ماكرو
  • حزم dbt_utils وcodegen؛ وثائق dbt محلية