0Pricing
SQL Academy · درس

اختبار SQL: اختبارات dbt وGreat Expectations

اكتب اختبارات لجودة البيانات باستخدام dbt (unique وnot_null وaccepted_values)، واستخدم تأكيدات أكثر شمولًا مع Great Expectations

اختبار SQL: اختبارات dbt وGreat Expectations درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

لماذا نختبر SQL؟

تبقى البيانات غير السليمة غير مرئية إلى أن تتسبب في قرار سيئ. تكشف الاختبارات ما يلي:

  • انجراف المخطط (حذف عمود أو تغيّر نوعه)
  • جودة البيانات (وجود NULL حيث يُمنع، أو التكرارات، أو القيم خارج النطاق)
  • مشكلات الإسناد المرجعي (الصفوف اليتيمة)
  • الثوابت الخاصة بالأعمال (الإيرادات ≥ 0، ومجموع القيم يطابق الإجمالي)

اختبارات dbt المضمّنة

أعلنوا عنها لكل عمود في YAML:

# models/orders.yml
version: 2
models:
  - name: orders
    columns:
      - name: id
        tests:
          - unique
          - not_null
      - name: user_id
        tests:
          - not_null
          - relationships:
              to: ref('users')
              field: id
      - name: status
        tests:
          - accepted_values:
              values: ['pending', 'paid', 'cancelled']

تشغيل اختبارات dbt

نفّذوا جميع الاختبارات:

dbt test
dbt test --select orders
dbt build  # = run + test

الاختبارات المفردة المخصصة

الاختبار ليس سوى SELECT يعيد صفوفًا عند الفشل:

-- tests/no_negative_totals.sql
SELECT id, total
FROM {{ ref('orders') }}
WHERE total < 0

الاختبارات العامة

اختبارات مَعْلَمة لإعادة استخدامها مع أعمدة كثيرة:

-- tests/generic/test_in_range.sql
{% test in_range(model, column_name, min, max) %}
SELECT * FROM {{ model }}
WHERE {{ column_name }} < {{ min }} OR {{ column_name }} > {{ max }}
{% endtest %}

-- Use it in YAML:
columns:
  - name: age
    tests:
      - in_range:
          min: 0
          max: 120

حزمة dbt-utils

تضيف اختبارات أخرى: التركيبات الفريدة، وexpression_is_true، وequal_rowcount، وغير ذلك:

- dbt_utils.expression_is_true:
    expression: "revenue >= 0"
- dbt_utils.equal_rowcount:
    compare_model: ref('staging_orders')

Great Expectations

بديل أكثر شمولًا — إطار عمل بلغة Python يوفّر مكتبة واسعة من التوقعات وتقارير غنية:

import great_expectations as ge

suite = context.add_or_update_expectation_suite('orders')
batch = context.get_validator(batch_request, expectation_suite_name='orders')
batch.expect_column_values_to_not_be_null('id')
batch.expect_column_values_to_be_between('total', 0, 10000)

results = context.run_checkpoint('orders_checkpoint')

متى تستخدمون كل أداة

  • اختبارات dbt — الخيار الأول عند استخدام dbt أصلًا؛ فهي خفيفة وتعتمد على SQL فقط
  • Great Expectations — عند الحاجة إلى تقارير غنية، وعمليات تحقق أوسع، وتنسيقات تتجاوز SQL مثل CSV وparquet

خطورة الاختبار

يدعم dbt 1.0+ مستويي الخطورة warn وerror:

- accepted_values:
    values: [...]
    config:
      severity: warn
      warn_if: ">100"
      error_if: ">1000"

التكامل مع CI

شغّلوا الاختبارات مع كل PR، وامنعوا الدمج عند الفشل:

# GitHub Actions
- run: dbt deps && dbt build --profiles-dir profiles
- if: failure()
  run: echo "::error::dbt tests failed"

لوحات معلومات جودة البيانات

يمكن لـ dbt-utils وdbt-expectations وElementary تحويل نتائج الاختبارات إلى لوحة معلومات في Grafana أو Looker.

اختبارات المخطط مقابل اختبارات الصفوف

اكتشفوا تراجعات المخطط باستخدام "لقطة" snapshot لأنواع الأعمدة في dbt؛ أما اختبارات الصفوف فتكشف أخطاء البيانات.

مراجعة

تحوّل الاختبارات SQL من "ثقوا بي" إلى "تم التحقق منه".

  • اختبارات dbt للتحقق التصريحي داخل مستودع البيانات
  • Great Expectations للتحققات الأوسع والأغنى
  • شغّلوها في CI، وامنعوا الدمج عند الفشل
  • تتبّعوا النتائج بمرور الوقت

اختبار سريع

تريدون اختبار dbt يفشل إذا احتوى أي صف على total < 0. ما النهج الأبسط؟

الأسئلة الشائعة

هل درس «اختبار SQL: اختبارات dbt وGreat Expectations» مجاني؟

نعم — نص درس «اختبار SQL: اختبارات dbt وGreat Expectations» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «اختبار SQL: اختبارات dbt وGreat Expectations»؟

اكتب اختبارات لجودة البيانات باستخدام dbt (unique وnot_null وaccepted_values)، واستخدم تأكيدات أكثر شمولًا مع Great Expectations تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «اختبار SQL: اختبارات dbt وGreat Expectations»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات DBT (أداة بناء البيانات)
  2. SQLFluff وفحص الأسلوب
  3. اختبار SQL: اختبارات dbt وGreat Expectations
  4. التكامل المستمر لتغييرات المخطط (GitHub Actions)
← العودة إلى SQL Academy