أنابيب ETL والتنسيق

أنماط ETL مقابل ELT

4 دقيقة للقراءة

فهم أنماط تكامل البيانات أساسي لمقابلات هندسة البيانات. كن مستعداً لمناقشة متى تستخدم كل نهج والمقايضات المتضمنة.

ETL: استخراج، تحويل، تحميل

النهج التقليدي حيث يحدث التحويل قبل التحميل.

┌─────────┐    ┌──────────────┐    ┌─────────────┐
│ المصادر│───▶│ منطقة التدريج│───▶│  المستودع  │
└─────────┘    │  (تحويل)     │    └─────────────┘
               └──────────────┘

الخصائص

الجانب ETL
موقع التحويل خادم/كتلة ETL مخصصة
الحوسبة منفصلة عن المستودع
البيانات في المستودع نظيفة، محولة فقط
الأفضل لـ محلي، الأنظمة القديمة
الأدوات Informatica, Talend, SSIS

متى تستخدم ETL

  • المستودعات المحلية: حوسبة مستودع محدودة
  • بيانات حساسة: تحتاج للفلترة/الإخفاء قبل التحميل
  • بوابات جودة البيانات: يجب التحقق قبل المستودع
  • متطلبات الامتثال: التحويل في بيئة متحكم بها

مثال أنبوب ETL

# ETL تقليدي مع pandas
import pandas as pd

# استخراج
source_df = pd.read_sql("SELECT * FROM source_orders", source_conn)

# تحويل (على خادم ETL)
transformed_df = (
    source_df
    .drop_duplicates(subset=['order_id'])
    .assign(
        order_date=lambda x: pd.to_datetime(x['order_date']),
        total_amount=lambda x: x['quantity'] * x['unit_price']
    )
    .query('order_status != "cancelled"')
)

# تحميل
transformed_df.to_sql('dim_orders', warehouse_conn, if_exists='append')

ELT: استخراج، تحميل، تحويل

النهج الحديث يستفيد من حوسبة المستودع السحابي.

┌─────────┐    ┌─────────────────────────────────┐
│ المصادر│───▶│           المستودع              │
└─────────┘    │ ┌─────────┐    ┌─────────────┐  │
               │ │  خام   │───▶│   محول     │  │
               │ └─────────┘    └─────────────┘  │
               └─────────────────────────────────┘

الخصائص

الجانب ELT
موقع التحويل داخل المستودع
الحوسبة محرك MPP للمستودع
البيانات في المستودع خام + محولة
الأفضل لـ المستودعات السحابية
الأدوات dbt, Dataform, SQL المستودع

متى تستخدم ELT

  • المستودعات السحابية: حوسبة وفيرة، قابلة للتوسع
  • المرونة مطلوبة: متطلبات التحويل تتغير كثيراً
  • استكشاف البيانات: المحللون يحتاجون وصول للبيانات الخام
  • المخطط عند القراءة: تحديد الهيكل عند وقت الاستعلام

مثال أنبوب ELT

-- استخراج وتحميل: البيانات الخام تصل للتدريج
-- (تتم بواسطة أداة الاستيعاب: Fivetran, Airbyte, مخصص)

-- التحويل في المستودع مع dbt
-- models/staging/stg_orders.sql
WITH source AS (
    SELECT * FROM {{ source('raw', 'orders') }}
),
cleaned AS (
    SELECT
        order_id,
        customer_id,
        CAST(order_date AS DATE) as order_date,
        quantity,
        unit_price,
        quantity * unit_price as total_amount,
        order_status
    FROM source
    WHERE order_status != 'cancelled'
    QUALIFY ROW_NUMBER() OVER (
        PARTITION BY order_id ORDER BY updated_at DESC
    ) = 1
)
SELECT * FROM cleaned

مصفوفة المقارنة

العامل ETL ELT
حوسبة التحويل خادم ETL المستودع
تخزين البيانات الخام ليس في المستودع في المستودع
التأخير أعلى (قفزة إضافية) أقل (تحميل مباشر)
المرونة أقل (تحويلات ثابتة) أعلى (إعادة التحويل)
نموذج التكلفة ترخيص أداة ETL حوسبة المستودع
حجم البيانات أفضل للأصغر أفضل للأكبر
مجموعة المهارات خبرة أداة ETL خبرة SQL

الأنماط الهجينة

EtLT: استخراج، تحويل صغير، تحميل، تحويل

شائع عملياً—معالجة مسبقة خفيفة قبل التحميل.

# استخراج مع تحويل خفيف
raw_df = extract_from_source()

# تحويل خفيف (t) - فقط ما يكفي للتحميل
light_transformed = (
    raw_df
    .rename(columns=str.lower)  # توحيد أسماء الأعمدة
    .assign(
        _loaded_at=datetime.utcnow(),
        _source='salesforce'
    )
)

# تحميل للطبقة الخام
load_to_warehouse(light_transformed, 'raw.salesforce_accounts')

# تحويل ثقيل (T) في المستودع مع dbt
# dbt run --models staging.stg_accounts

ETL العكسي

دفع البيانات المحولة للأنظمة التشغيلية.

┌───────────┐    ┌─────────────┐    ┌───────────┐
│ المستودع │───▶│ Census/     │───▶│ Salesforce│
│  (Gold)   │    │ Hightouch   │    │ HubSpot   │
└───────────┘    └─────────────┘    └───────────┘

حالات الاستخدام:

  • مزامنة شرائح العملاء لأدوات التسويق
  • دفع درجات ML للـ CRM
  • تحديث لوحات القيادة التشغيلية

أسئلة المقابلة

السؤال: "متى تختار ETL على ELT؟"

إطار الإجابة:

اختر ETL عندما اختر ELT عندما
مستودع محلي بحوسبة محدودة مستودع سحابي بحوسبة قابلة للتوسع
يجب فلترة البيانات الحساسة قبل التحميل تحتاج بيانات خام للتحليل العشوائي
بوابات جودة بيانات صارمة مطلوبة متطلبات التحويل تتغير بشكل متكرر
تكامل الأنظمة القديمة مجموعة البيانات الحديثة (dbt, Snowflake)

السؤال: "صمم أنبوب بيانات لتحليلات التجارة الإلكترونية في الوقت الحقيقي"

هيكل الإجابة:

1. المصدر: قاعدة بيانات المعاملات (CDC مع Debezium)
2. البث: Kafka للأحداث في الوقت الحقيقي
3. التحميل: Kafka Connect → Snowflake (جداول خام)
4. التحويل: نماذج dbt (مرحلة → حقائق/أبعاد)
5. التقديم: لوحة قيادة BI مع طبقة في الوقت الحقيقي

القرارات الرئيسية:
- نمط ELT للمرونة
- CDC لالتقاط منخفض التأخير
- البث للمقاييس الحساسة للوقت
- تحويلات دفعية للتجميعات التاريخية

مبادئ تصميم أنابيب البيانات

1. القابلية للتكرار

الأنابيب يجب أن تنتج نفس النتيجة عند التشغيل مرات متعددة.

-- سيئ: إلحاق بدون إزالة تكرار
INSERT INTO target SELECT * FROM source;

-- جيد: دمج/upsert
MERGE INTO target t
USING source s ON t.id = s.id
WHEN MATCHED THEN UPDATE ...
WHEN NOT MATCHED THEN INSERT ...;

2. المعالجة التدريجية

معالجة البيانات الجديدة/المتغيرة فقط عند الإمكان.

-- معالجة السجلات الجديدة فقط
SELECT * FROM source
WHERE updated_at > (SELECT MAX(updated_at) FROM target);

3. تطور المخطط

التعامل مع تغييرات مخطط المصدر بأناقة.

# اكتشف الأعمدة الجديدة
source_cols = set(source_df.columns)
target_cols = set(get_target_columns())
new_cols = source_cols - target_cols

if new_cols:
    for col in new_cols:
        add_column_to_target(col)

نظرة المقابلة: هندسة البيانات الحديثة تفضل ELT للمستودعات السحابية، لكن افهم كلا النمطين. كثير من المنظمات لديها نهج هجينة، والأنظمة القديمة لا تزال تستخدم ETL.

بعد ذلك، سنستكشف تنسيق الأنابيب مع Airflow و Prefect و Dagster. :::

اختبار

الوحدة 4: أنابيب ETL والتنسيق

خذ الاختبار