مشاركة عبر


الاتصال ب dbt Cloud

dbt (أداة بناء البيانات) هي بيئة تطوير تمكن محللي البيانات ومهندسي البيانات من تحويل البيانات ببساطة عن طريق كتابة عبارات محددة. يعالج dbt تحويل عبارات التحديد هذه إلى جداول وطرق عرض. تقوم dbt بتجميع التعليمات البرمجية الخاصة بك إلى SQL الخام ثم تشغل هذه التعليمة البرمجية على قاعدة البيانات المحددة في Azure Databricks. يدعم dbt أنماط الترميز التعاونية وأفضل الممارسات مثل التحكم في الإصدار والوثائق والنمطية.

لا يقوم dbt باستخراج البيانات أو تحميلها. يركز dbt على خطوة التحويل فقط، باستخدام بنية "التحويل بعد التحميل". يفترض dbt أن لديك بالفعل نسخة من بياناتك في قاعدة البيانات الخاصة بك.

تركز هذه المقالة على dbt Cloud. تأتي dbt Cloud مزودة بدعم جاهز لجدولة الوظائف، CI/CD، تقديم الوثائق، المراقبة والتنبيه، وبيئة تطوير متكاملة (IDE).

يتوفر أيضا إصدار محلي من dbt يسمى dbt Core. تمكنك dbt Core من كتابة التعليمات البرمجية ل dbt في محرر النص أو IDE الذي تختاره على جهاز التطوير المحلي ثم تشغيل dbt من سطر الأوامر. يتضمن dbt Core واجهة سطر أوامر dbt (CLI). dbt CLI مجاني للاستخدام مصدر مفتوح. لمزيد من المعلومات، راجع الاتصال ب dbt Core.

نظرا لأن dbt Cloud وdbt Core يمكنهما استخدام مستودعات git المستضافة (على سبيل المثال، على GitHub أو GitLab أو BitBucket)، يمكنك استخدام dbt Cloud لإنشاء مشروع dbt ثم جعله متاحا لمستخدمي dbt Cloud وdbt Core. لمزيد من المعلومات، راجع إنشاء مشروع dbt واستخدام مشروع موجود على موقع dbt على الويب.

للحصول على نظرة عامة على dbt، شاهد فيديو YouTube التالي (26 دقيقة).

الاتصال ب dbt Cloud باستخدام Partner Connect

يصف هذا القسم كيفية توصيل مستودع Databricks SQL ب dbt Cloud باستخدام Partner Connect، ثم منح dbt Cloud حق الوصول للقراءة إلى بياناتك.

الاختلافات بين الاتصالات القياسية وdbt Cloud

للاتصال ب dbt Cloud باستخدام Partner Connect، اتبع الخطوات الواردة في الاتصال بشركاء إعداد البيانات باستخدام Partner Connect. يختلف اتصال dbt Cloud عن اتصالات إعداد البيانات وتحويلها القياسية بالطرق التالية:

  • بالإضافة إلى كيان الخدمة ورمز الوصول الشخصي المميز، ينشئ Partner Connect مستودع SQL (نقطة نهاية SQL سابقا) يسمى DBT_CLOUD_ENDPOINT بشكل افتراضي.

خطوات الاتصال

للاتصال ب dbt Cloud باستخدام Partner Connect، قم بما يلي:

  1. الاتصال بشركاء إعداد البيانات باستخدام Partner Connect.

  2. بعد الاتصال ب dbt Cloud، تظهر لوحة معلومات dbt Cloud. لاستكشاف مشروع dbt Cloud، في شريط القوائم، بجوار شعار dbt، حدد اسم حساب dbt الخاص بك من القائمة المنسدلة الأولى إذا لم يتم عرضه، ثم حدد مشروع Databricks Partner Connect Trial من القائمة المنسدلة الثانية إذا لم يتم عرضه.

    تلميح

    لعرض إعدادات المشروع، انقر فوق القائمة "ثلاثة خطوط" أو "هامبرغر"، وانقر فوق مشاريع إعدادات >الحساب، ثم انقر فوق اسم المشروع. لعرض إعدادات الاتصال، انقر فوق الارتباط الموجود بجانب الاتصال. لتغيير أي إعدادات، انقر فوق تحرير.

    لعرض معلومات الرمز المميز للوصول الشخصي إلى Azure Databricks لهذا المشروع، انقر فوق أيقونة "person" على شريط القوائم، وانقر فوق Profile > Credentials > Databricks Partner Connect Trial، وانقر فوق اسم المشروع. لإجراء تغيير، انقر فوق تحرير.

خطوات لمنح dbt Cloud حق الوصول للقراءة إلى بياناتك

يمنح Partner Connect إذن إنشاء فقط لكيان خدمة DBT_CLOUD_USER فقط في الكتالوج الافتراضي. اتبع هذه الخطوات في مساحة عمل Azure Databricks لمنح كيان الخدمة DBT_CLOUD_USER حق الوصول للقراءة إلى البيانات التي تختارها.

تحذير

يمكنك تكييف هذه الخطوات لمنح dbt Cloud وصولا إضافيا عبر الكتالوجات وقواعد البيانات والجداول داخل مساحة العمل الخاصة بك. ومع ذلك، كأفضل ممارسة أمان، توصي Databricks بشدة بمنح حق الوصول فقط إلى الجداول الفردية التي تحتاج إلى أساس خدمة DBT_CLOUD_USER للعمل معها والوصول للقراءة فقط إلى هذه الجداول.

  1. انقر فوق أيقونة الكتالوج كتالوج في الشريط الجانبي.

  2. حدد مستودع SQL (DBT_CLOUD_ENDPOINT) في القائمة المنسدلة في أعلى اليمين.

    تحديد مستودع

    1. ضمن مستكشف الكتالوج، حدد الكتالوج الذي يحتوي على قاعدة البيانات للجدول.
    2. حدد قاعدة البيانات التي تحتوي على الجدول.
    3. تحديد جدولك.

    تلميح

    إذا لم تتمكن من رؤية الكتالوج أو قاعدة البيانات أو الجدول مدرجا، أدخل أي جزء من الاسم في المربعات تحديد كتالوج أو تحديد قاعدة بيانات أو تصفية الجداول، على التوالي، لتضييق نطاق القائمة.

    تصفية الجداول

  3. انقر فوق أذونات.

  4. انقر فوق منح.

  5. بالنسبة إلى النوع لإضافة مستخدمين أو مجموعات متعددة، حدد DBT_CLOUD_USER. هذا هو كيان خدمة Azure Databricks الذي أنشأه Partner Connect لك في القسم السابق.

    تلميح

    إذا لم تتمكن من رؤية DBT_CLOUD_USER، فابدأ الكتابة DBT_CLOUD_USER في المربع النوع لإضافة عدة مستخدمين أو مجموعات حتى يظهر في القائمة، ثم حدده.

  6. امنح حق الوصول للقراءة فقط عن طريق تحديد SELECT و READ METADATA.

  7. وانقر فوق موافق.

كرر الخطوات من 4 إلى 9 لكل جدول إضافي تريد منح dbt Cloud حق الوصول للقراءة إليه.

استكشاف أخطاء اتصال dbt Cloud وإصلاحها

إذا قام شخص ما بحذف المشروع في dbt Cloud لهذا الحساب، وقمت بالنقر فوق لوحة dbt ، فستظهر رسالة خطأ تفيد بأنه لا يمكن العثور على المشروع. لإصلاح ذلك، انقر فوق حذف الاتصال، ثم ابدأ من بداية هذا الإجراء لإنشاء الاتصال مرة أخرى.

الاتصال ب dbt Cloud يدويا

يصف هذا القسم كيفية توصيل مجموعة Azure Databricks أو مستودع Databricks SQL في مساحة عمل Azure Databricks إلى dbt Cloud.

هام

توصي Databricks بالاتصال بمستودع SQL. إذا لم يكن لديك استحقاق الوصول إلى Databricks SQL، أو إذا كنت ترغب في تشغيل نماذج Python، يمكنك الاتصال بمجموعة بدلا من ذلك.

المتطلبات

الخطوة 1: التسجيل في dbt Cloud

انتقل إلى dbt Cloud - Signup وأدخل بريدك الإلكتروني واسمك ومعلومات شركتك. أنشئ كلمة مرور وانقر فوق إنشاء حسابي.

الخطوة 2: إنشاء مشروع dbt

في هذه الخطوة، يمكنك إنشاء مشروع dbt، والذي يحتوي على اتصال بمجموعة Azure Databricks أو مستودع SQL، ومستودع يحتوي على التعليمات البرمجية المصدر الخاصة بك، وبيئة واحدة أو أكثر (مثل بيئات الاختبار والإنتاج).

  1. تسجيل الدخول إلى dbt Cloud.

  2. انقر فوق أيقونة الإعدادات، ثم انقر فوق إعدادات الحساب.

  3. انقر فوق مشروع جديد.

  4. بالنسبة إلى الاسم، أدخل اسما فريدا لمشروعك، ثم انقر فوق متابعة.

  5. لاختيار اتصال، انقر فوق Databricks، ثم انقر فوق التالي.

  6. بالنسبة إلى الاسم، أدخل اسما فريدا لهذا الاتصال.

  7. لتحديد محول، انقر فوق Databricks (dbt-databricks).

    إشعار

    توصي Databricks باستخدام dbt-databricks، والذي يدعم كتالوج Unity، بدلا من dbt-spark. بشكل افتراضي، تستخدم dbt-databricksالمشاريع الجديدة . لترحيل مشروع موجود إلى dbt-databricks، راجع الترحيل من dbt-spark إلى dbt-databricks في وثائق dbt.

  8. ضمن Settings، ل Server Hostname، أدخل قيمة اسم مضيف الخادم من المتطلبات.

  9. بالنسبة لمسار HTTP، أدخل قيمة مسار HTTP من المتطلبات.

  10. إذا كانت مساحة العمل الخاصة بك ممكنة كتالوج Unity، ضمن الإعدادات الاختيارية، أدخل اسم الكتالوج لاستخدام dbt Cloud.

  11. ضمن بيانات اعتماد التطوير، للرمز المميز، أدخل رمز الوصول الشخصي أو الرمز المميز لمعرف Microsoft Entra من المتطلبات.

  12. بالنسبة للمخطط، أدخل اسم المخطط حيث تريد أن يقوم dbt Cloud بإنشاء الجداول وطرق العرض (على سبيل المثال، default).

  13. انقر فوق اختبار الاتصال.

  14. إذا نجح الاختبار، فانقر فوق التالي.

لمزيد من المعلومات، راجع الاتصال ب Databricks ODBC على موقع dbt على الويب.

تلميح

لعرض إعدادات هذا المشروع أو تغييرها، أو لحذف المشروع تماما، انقر فوق أيقونة الإعدادات، وانقر فوق مشاريع إعدادات >الحساب، وانقر فوق اسم المشروع. لتغيير الإعدادات، انقر فوق تحرير. لحذف المشروع، انقر فوق تحرير > حذف المشروع.

لعرض قيمة الرمز المميز للوصول الشخصي إلى Azure Databricks لهذا المشروع أو تغييرها، انقر فوق أيقونة "الشخص"، وانقر فوق بيانات اعتماد ملف التعريف>، وانقر فوق اسم المشروع. لإجراء تغيير، انقر فوق تحرير.

بعد الاتصال بمجموعة Azure Databricks أو مستودع Databricks SQL، اتبع الإرشادات المعروضة على الشاشة لإعداد مستودع، ثم انقر فوق متابعة.

بعد إعداد المستودع، اتبع الإرشادات التي تظهر على الشاشة لدعوة المستخدمين ثم انقر فوق إكمال. أو انقر فوق تخطي وإكمال.

برنامج تعليمي

في هذا القسم، يمكنك استخدام مشروع dbt Cloud للعمل مع بعض البيانات النموذجية. يفترض هذا القسم أنك قمت بالفعل بإنشاء مشروعك وأن dbt Cloud IDE مفتوح لهذا المشروع.

الخطوة 1: إنشاء النماذج وتشغيلها

في هذه الخطوة، يمكنك استخدام dbt Cloud IDE لإنشاء النماذج وتشغيلها، وهي select عبارة عن عبارات تنشئ إما طريقة عرض جديدة (الافتراضي) أو جدولا جديدا في قاعدة بيانات، استنادا إلى البيانات الموجودة في نفس قاعدة البيانات. ينشئ هذا الإجراء نموذجا يستند إلى جدول العينة diamonds من مجموعات بيانات العينة.

استخدم التعليمات البرمجية التالية لإنشاء هذا الجدول.

DROP TABLE IF EXISTS diamonds;

CREATE TABLE diamonds USING CSV OPTIONS (path "/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", header "true")

يفترض هذا الإجراء أن هذا الجدول قد تم إنشاؤه بالفعل في قاعدة بيانات مساحة default العمل الخاصة بك.

  1. مع فتح المشروع، انقر فوق تطوير في أعلى واجهة المستخدم.

  2. انقر فوق تهيئة مشروع dbt.

  3. انقر فوق Commit and sync، وأدخل رسالة تثبيت، ثم انقر فوق Commit.

  4. انقر فوق إنشاء فرع، وأدخل اسما لفرعك، ثم انقر فوق إرسال.

  5. إنشاء النموذج الأول: انقر فوق إنشاء ملف جديد.

  6. في محرر النص، أدخل عبارة SQL التالية. تحدد هذه العبارة تفاصيل قيراط والقص واللون والوضوح فقط لكل معين من diamonds الجدول. ترشد config الكتلة dbt لإنشاء جدول في قاعدة البيانات استنادا إلى هذه العبارة.

    {{ config(
      materialized='table',
      file_format='delta'
    ) }}
    
    select carat, cut, color, clarity
    from diamonds
    

    تلميح

    للحصول على خيارات إضافية config مثل الاستراتيجية merge التزايدية، راجع تكوينات Databricks في وثائق dbt.

  7. انقر فوق حفظ باسم.

  8. بالنسبة إلى اسم الملف، أدخل models/diamonds_four_cs.sql ثم انقر فوق إنشاء.

  9. إنشاء نموذج ثان: انقر فوق أيقونة (إنشاء ملف جديد) في الزاوية العلوية اليسرى.

  10. في محرر النص، أدخل عبارة SQL التالية. تحدد هذه العبارة قيما فريدة من colors العمود في diamonds_four_cs الجدول، مع فرز النتائج بترتيب أبجدي أولا إلى آخر. نظرا لعدم وجود config كتلة، يوجه هذا النموذج dbt لإنشاء طريقة عرض في قاعدة البيانات استنادا إلى هذه العبارة.

    select distinct color
    from diamonds_four_cs
    sort by color asc
    
  11. انقر فوق حفظ باسم.

  12. بالنسبة إلى اسم الملف، أدخل models/diamonds_list_colors.sql، ثم انقر فوق إنشاء.

  13. إنشاء نموذج ثالث: انقر فوق أيقونة (إنشاء ملف جديد) في الزاوية العلوية اليسرى.

  14. في محرر النص، أدخل عبارة SQL التالية. هذا البيان متوسط أسعار الماس حسب اللون، وفرز النتائج حسب متوسط السعر من الأعلى إلى الأدنى. يرشد هذا النموذج dbt لإنشاء طريقة عرض في قاعدة البيانات استنادا إلى هذه العبارة.

    select color, avg(price) as price
    from diamonds
    group by color
    order by price desc
    
  15. انقر فوق حفظ باسم.

  16. بالنسبة إلى اسم الملف، أدخل models/diamonds_prices.sql وانقر فوق إنشاء.

  17. تشغيل النماذج: في سطر الأوامر، قم بتشغيل dbt run الأمر مع المسارات إلى الملفات الثلاثة السابقة. في default قاعدة البيانات، ينشئ dbt جدولا واحدا باسم diamonds_four_cs واثنين من طرق العرض المسماة diamonds_list_colors و diamonds_prices. يحصل dbt على أسماء طرق العرض والجدول هذه من أسماء الملفات ذات الصلة .sql .

    dbt run --model models/diamonds_four_cs.sql models/diamonds_list_colors.sql models/diamonds_prices.sql
    
    ...
    ... | 1 of 3 START table model default.diamonds_four_cs.................... [RUN]
    ... | 1 of 3 OK created table model default.diamonds_four_cs............... [OK ...]
    ... | 2 of 3 START view model default.diamonds_list_colors................. [RUN]
    ... | 2 of 3 OK created view model default.diamonds_list_colors............ [OK ...]
    ... | 3 of 3 START view model default.diamonds_prices...................... [RUN]
    ... | 3 of 3 OK created view model default.diamonds_prices................. [OK ...]
    ... |
    ... | Finished running 1 table model, 2 view models ...
    
    Completed successfully
    
    Done. PASS=3 WARN=0 ERROR=0 SKIP=0 TOTAL=3
    
  18. قم بتشغيل التعليمات البرمجية SQL التالية لسرد معلومات حول طرق العرض الجديدة وتحديد كافة الصفوف من الجدول وطرق العرض.

    إذا كنت تتصل بمجموعة، يمكنك تشغيل رمز SQL هذا من دفتر ملاحظات مرفق بالمجموعة، مع تحديد SQL كلغة افتراضية لدفتر الملاحظات. إذا كنت تتصل بمستودع SQL، يمكنك تشغيل رمز SQL هذا من استعلام.

    SHOW views IN default
    
    +-----------+----------------------+-------------+
    | namespace | viewName             | isTemporary |
    +===========+======================+=============+
    | default   | diamonds_list_colors | false       |
    +-----------+----------------------+-------------+
    | default   | diamonds_prices      | false       |
    +-----------+----------------------+-------------+
    
    SELECT * FROM diamonds_four_cs
    
    +-------+---------+-------+---------+
    | carat | cut     | color | clarity |
    +=======+=========+=======+=========+
    | 0.23  | Ideal   | E     | SI2     |
    +-------+---------+-------+---------+
    | 0.21  | Premium | E     | SI1     |
    +-------+---------+-------+---------+
    ...
    
    SELECT * FROM diamonds_list_colors
    
    +-------+
    | color |
    +=======+
    | D     |
    +-------+
    | E     |
    +-------+
    ...
    
    SELECT * FROM diamonds_prices
    
    +-------+---------+
    | color | price   |
    +=======+=========+
    | J     | 5323.82 |
    +-------+---------+
    | I     | 5091.87 |
    +-------+---------+
    ...
    

الخطوة 2: إنشاء نماذج أكثر تعقيدا وتشغيلها

في هذه الخطوة، يمكنك إنشاء نماذج أكثر تعقيدا لمجموعة من جداول البيانات ذات الصلة. تحتوي جداول البيانات هذه على معلومات حول دوري رياضي خيالي لثلاثة فرق تلعب موسما مكونا من ست مباريات. ينشئ هذا الإجراء جداول البيانات، وينشئ النماذج، ويشغل النماذج.

  1. قم بتشغيل التعليمات البرمجية SQL التالية لإنشاء جداول البيانات الضرورية.

    إذا كنت تتصل بمجموعة، يمكنك تشغيل رمز SQL هذا من دفتر ملاحظات مرفق بالمجموعة، مع تحديد SQL كلغة افتراضية لدفتر الملاحظات. إذا كنت تتصل بمستودع SQL، يمكنك تشغيل رمز SQL هذا من استعلام.

    تبدأ الجداول وطرق العرض في هذه الخطوة بالمساعدة zzz_ في التعرف عليها كجزء من هذا المثال. لا تحتاج إلى اتباع هذا النمط للجداول وطرق العرض الخاصة بك.

    DROP TABLE IF EXISTS zzz_game_opponents;
    DROP TABLE IF EXISTS zzz_game_scores;
    DROP TABLE IF EXISTS zzz_games;
    DROP TABLE IF EXISTS zzz_teams;
    
    CREATE TABLE zzz_game_opponents (
    game_id INT,
    home_team_id INT,
    visitor_team_id INT
    ) USING DELTA;
    
    INSERT INTO zzz_game_opponents VALUES (1, 1, 2);
    INSERT INTO zzz_game_opponents VALUES (2, 1, 3);
    INSERT INTO zzz_game_opponents VALUES (3, 2, 1);
    INSERT INTO zzz_game_opponents VALUES (4, 2, 3);
    INSERT INTO zzz_game_opponents VALUES (5, 3, 1);
    INSERT INTO zzz_game_opponents VALUES (6, 3, 2);
    
    -- Result:
    -- +---------+--------------+-----------------+
    -- | game_id | home_team_id | visitor_team_id |
    -- +=========+==============+=================+
    -- | 1       | 1            | 2               |
    -- +---------+--------------+-----------------+
    -- | 2       | 1            | 3               |
    -- +---------+--------------+-----------------+
    -- | 3       | 2            | 1               |
    -- +---------+--------------+-----------------+
    -- | 4       | 2            | 3               |
    -- +---------+--------------+-----------------+
    -- | 5       | 3            | 1               |
    -- +---------+--------------+-----------------+
    -- | 6       | 3            | 2               |
    -- +---------+--------------+-----------------+
    
    CREATE TABLE zzz_game_scores (
    game_id INT,
    home_team_score INT,
    visitor_team_score INT
    ) USING DELTA;
    
    INSERT INTO zzz_game_scores VALUES (1, 4, 2);
    INSERT INTO zzz_game_scores VALUES (2, 0, 1);
    INSERT INTO zzz_game_scores VALUES (3, 1, 2);
    INSERT INTO zzz_game_scores VALUES (4, 3, 2);
    INSERT INTO zzz_game_scores VALUES (5, 3, 0);
    INSERT INTO zzz_game_scores VALUES (6, 3, 1);
    
    -- Result:
    -- +---------+-----------------+--------------------+
    -- | game_id | home_team_score | visitor_team_score |
    -- +=========+=================+====================+
    -- | 1       | 4               | 2                  |
    -- +---------+-----------------+--------------------+
    -- | 2       | 0               | 1                  |
    -- +---------+-----------------+--------------------+
    -- | 3       | 1               | 2                  |
    -- +---------+-----------------+--------------------+
    -- | 4       | 3               | 2                  |
    -- +---------+-----------------+--------------------+
    -- | 5       | 3               | 0                  |
    -- +---------+-----------------+--------------------+
    -- | 6       | 3               | 1                  |
    -- +---------+-----------------+--------------------+
    
    CREATE TABLE zzz_games (
    game_id INT,
    game_date DATE
    ) USING DELTA;
    
    INSERT INTO zzz_games VALUES (1, '2020-12-12');
    INSERT INTO zzz_games VALUES (2, '2021-01-09');
    INSERT INTO zzz_games VALUES (3, '2020-12-19');
    INSERT INTO zzz_games VALUES (4, '2021-01-16');
    INSERT INTO zzz_games VALUES (5, '2021-01-23');
    INSERT INTO zzz_games VALUES (6, '2021-02-06');
    
    -- Result:
    -- +---------+------------+
    -- | game_id | game_date  |
    -- +=========+============+
    -- | 1       | 2020-12-12 |
    -- +---------+------------+
    -- | 2       | 2021-01-09 |
    -- +---------+------------+
    -- | 3       | 2020-12-19 |
    -- +---------+------------+
    -- | 4       | 2021-01-16 |
    -- +---------+------------+
    -- | 5       | 2021-01-23 |
    -- +---------+------------+
    -- | 6       | 2021-02-06 |
    -- +---------+------------+
    
    CREATE TABLE zzz_teams (
    team_id INT,
    team_city VARCHAR(15)
    ) USING DELTA;
    
    INSERT INTO zzz_teams VALUES (1, "San Francisco");
    INSERT INTO zzz_teams VALUES (2, "Seattle");
    INSERT INTO zzz_teams VALUES (3, "Amsterdam");
    
    -- Result:
    -- +---------+---------------+
    -- | team_id | team_city     |
    -- +=========+===============+
    -- | 1       | San Francisco |
    -- +---------+---------------+
    -- | 2       | Seattle       |
    -- +---------+---------------+
    -- | 3       | Amsterdam     |
    -- +---------+---------------+
    
  2. إنشاء النموذج الأول: انقر فوق أيقونة (إنشاء ملف جديد) في الزاوية العلوية اليسرى.

  3. في محرر النص، أدخل عبارة SQL التالية. تنشئ هذه العبارة جدولا يوفر تفاصيل كل لعبة، مثل أسماء الفرق والنتائج. ترشد config الكتلة dbt لإنشاء جدول في قاعدة البيانات استنادا إلى هذه العبارة.

    -- Create a table that provides full details for each game, including
    -- the game ID, the home and visiting teams' city names and scores,
    -- the game winner's city name, and the game date.
    
    {{ config(
      materialized='table',
      file_format='delta'
    ) }}
    
    -- Step 4 of 4: Replace the visitor team IDs with their city names.
    select
      game_id,
      home,
      t.team_city as visitor,
      home_score,
      visitor_score,
      -- Step 3 of 4: Display the city name for each game's winner.
      case
        when
          home_score > visitor_score
            then
              home
        when
          visitor_score > home_score
            then
              t.team_city
      end as winner,
      game_date as date
    from (
      -- Step 2 of 4: Replace the home team IDs with their actual city names.
      select
        game_id,
        t.team_city as home,
        home_score,
        visitor_team_id,
        visitor_score,
        game_date
      from (
        -- Step 1 of 4: Combine data from various tables (for example, game and team IDs, scores, dates).
        select
          g.game_id,
          go.home_team_id,
          gs.home_team_score as home_score,
          go.visitor_team_id,
          gs.visitor_team_score as visitor_score,
          g.game_date
        from
          zzz_games as g,
          zzz_game_opponents as go,
          zzz_game_scores as gs
        where
          g.game_id = go.game_id and
          g.game_id = gs.game_id
      ) as all_ids,
        zzz_teams as t
      where
        all_ids.home_team_id = t.team_id
    ) as visitor_ids,
      zzz_teams as t
    where
      visitor_ids.visitor_team_id = t.team_id
    order by game_date desc
    
  4. انقر فوق حفظ باسم.

  5. بالنسبة إلى اسم الملف، أدخل models/zzz_game_details.sql ثم انقر فوق إنشاء.

  6. إنشاء نموذج ثان: انقر فوق أيقونة (إنشاء ملف جديد) في الزاوية العلوية اليسرى.

  7. في محرر النص، أدخل عبارة SQL التالية. تنشئ هذه العبارة طريقة عرض تسرد سجلات خسارة الفريق لهذا الموسم.

    -- Create a view that summarizes the season's win and loss records by team.
    
    -- Step 2 of 2: Calculate the number of wins and losses for each team.
    select
      winner as team,
      count(winner) as wins,
      -- Each team played in 4 games.
      (4 - count(winner)) as losses
    from (
      -- Step 1 of 2: Determine the winner and loser for each game.
      select
        game_id,
        winner,
        case
          when
            home = winner
              then
                visitor
          else
            home
        end as loser
      from zzz_game_details
    )
    group by winner
    order by wins desc
    
  8. انقر فوق حفظ باسم.

  9. بالنسبة إلى اسم الملف، أدخل models/zzz_win_loss_records.sql ثم انقر فوق إنشاء.

  10. تشغيل النماذج: في سطر الأوامر، قم بتشغيل dbt run الأمر مع المسارات إلى الملفين السابقين. في default قاعدة البيانات (كما هو محدد في إعدادات المشروع)، ينشئ dbt جدولا واحدا باسم zzz_game_details وطريقة عرض واحدة باسم zzz_win_loss_records. يحصل dbt على أسماء طرق العرض والجدول هذه من أسماء الملفات ذات الصلة .sql .

    dbt run --model models/zzz_game_details.sql models/zzz_win_loss_records.sql
    
    ...
    ... | 1 of 2 START table model default.zzz_game_details.................... [RUN]
    ... | 1 of 2 OK created table model default.zzz_game_details............... [OK ...]
    ... | 2 of 2 START view model default.zzz_win_loss_records................. [RUN]
    ... | 2 of 2 OK created view model default.zzz_win_loss_records............ [OK ...]
    ... |
    ... | Finished running 1 table model, 1 view model ...
    
    Completed successfully
    
    Done. PASS=2 WARN=0 ERROR=0 SKIP=0 TOTAL=2
    
  11. قم بتشغيل التعليمات البرمجية SQL التالية لسرد معلومات حول طريقة العرض الجديدة وتحديد كافة الصفوف من الجدول وطريقة العرض.

    إذا كنت تتصل بمجموعة، يمكنك تشغيل رمز SQL هذا من دفتر ملاحظات مرفق بالمجموعة، مع تحديد SQL كلغة افتراضية لدفتر الملاحظات. إذا كنت تتصل بمستودع SQL، يمكنك تشغيل رمز SQL هذا من استعلام.

    SHOW VIEWS FROM default LIKE 'zzz_win_loss_records';
    
    +-----------+----------------------+-------------+
    | namespace | viewName             | isTemporary |
    +===========+======================+=============+
    | default   | zzz_win_loss_records | false       |
    +-----------+----------------------+-------------+
    
    SELECT * FROM zzz_game_details;
    
    +---------+---------------+---------------+------------+---------------+---------------+------------+
    | game_id | home          | visitor       | home_score | visitor_score | winner        | date       |
    +=========+===============+===============+============+===============+===============+============+
    | 1       | San Francisco | Seattle       | 4          | 2             | San Francisco | 2020-12-12 |
    +---------+---------------+---------------+------------+---------------+---------------+------------+
    | 2       | San Francisco | Amsterdam     | 0          | 1             | Amsterdam     | 2021-01-09 |
    +---------+---------------+---------------+------------+---------------+---------------+------------+
    | 3       | Seattle       | San Francisco | 1          | 2             | San Francisco | 2020-12-19 |
    +---------+---------------+---------------+------------+---------------+---------------+------------+
    | 4       | Seattle       | Amsterdam     | 3          | 2             | Seattle       | 2021-01-16 |
    +---------+---------------+---------------+------------+---------------+---------------+------------+
    | 5       | Amsterdam     | San Francisco | 3          | 0             | Amsterdam     | 2021-01-23 |
    +---------+---------------+---------------+------------+---------------+---------------+------------+
    | 6       | Amsterdam     | Seattle       | 3          | 1             | Amsterdam     | 2021-02-06 |
    +---------+---------------+---------------+------------+---------------+---------------+------------+
    
    SELECT * FROM zzz_win_loss_records;
    
    +---------------+------+--------+
    | team          | wins | losses |
    +===============+======+========+
    | Amsterdam     | 3    | 1      |
    +---------------+------+--------+
    | San Francisco | 2    | 2      |
    +---------------+------+--------+
    | Seattle       | 1    | 3      |
    +---------------+------+--------+
    

الخطوة 3: إنشاء الاختبارات وتشغيلها

في هذه الخطوة، يمكنك إنشاء اختبارات، وهي تأكيدات تقوم بها حول نماذجك. عند تشغيل هذه الاختبارات، يخبرك dbt ما إذا كان كل اختبار في مشروعك يمر أو يفشل.

هناك نوعان من الاختبارات. ترجع اختبارات المخطط، المكتوبة في YAML، عدد السجلات التي لا تجتاز تأكيدا. عندما يكون هذا الرقم صفرا، تمر جميع السجلات، وبالتالي تنجح الاختبارات. اختبارات البيانات هي استعلامات محددة يجب أن ترجع صفر سجلات لتمريرها.

  1. إنشاء اختبارات المخطط: انقر فوق أيقونة (إنشاء ملف جديد) في الزاوية العلوية اليسرى.

  2. في محرر النص، أدخل المحتوى التالي. يتضمن هذا الملف اختبارات المخطط التي تحدد ما إذا كانت الأعمدة المحددة تحتوي على قيم فريدة أو ليست خالية أو تحتوي على القيم المحددة فقط أو مجموعة.

    version: 2
    
    models:
      - name: zzz_game_details
        columns:
          - name: game_id
            tests:
              - unique
              - not_null
          - name: home
            tests:
              - not_null
              - accepted_values:
                  values: ['Amsterdam', 'San Francisco', 'Seattle']
          - name: visitor
            tests:
              - not_null
              - accepted_values:
                  values: ['Amsterdam', 'San Francisco', 'Seattle']
          - name: home_score
            tests:
              - not_null
          - name: visitor_score
            tests:
              - not_null
          - name: winner
            tests:
              - not_null
              - accepted_values:
                  values: ['Amsterdam', 'San Francisco', 'Seattle']
          - name: date
            tests:
              - not_null
      - name: zzz_win_loss_records
        columns:
          - name: team
            tests:
              - unique
              - not_null
              - relationships:
                  to: ref('zzz_game_details')
                  field: home
          - name: wins
            tests:
              - not_null
          - name: losses
            tests:
              - not_null
    
  3. انقر فوق حفظ باسم.

  4. بالنسبة إلى اسم الملف، أدخل models/schema.yml، ثم انقر فوق إنشاء.

  5. إنشاء اختبار البيانات الأول: انقر فوق أيقونة (إنشاء ملف جديد) في الزاوية العلوية اليسرى.

  6. في محرر النص، أدخل عبارة SQL التالية. يتضمن هذا الملف اختبار بيانات لتحديد ما إذا كانت أي ألعاب حدثت خارج الموسم العادي.

    -- This season's games happened between 2020-12-12 and 2021-02-06.
    -- For this test to pass, this query must return no results.
    
    select date
    from zzz_game_details
    where date < '2020-12-12'
    or date > '2021-02-06'
    
  7. انقر فوق حفظ باسم.

  8. بالنسبة إلى اسم الملف، أدخل tests/zzz_game_details_check_dates.sql، ثم انقر فوق إنشاء.

  9. إنشاء اختبار بيانات ثان: انقر فوق أيقونة (إنشاء ملف جديد) في الزاوية العلوية اليسرى.

  10. في محرر النص، أدخل عبارة SQL التالية. يتضمن هذا الملف اختبار بيانات لتحديد ما إذا كانت أي نتائج سلبية أو أي ألعاب تم ربطها.

    -- This sport allows no negative scores or tie games.
    -- For this test to pass, this query must return no results.
    
    select home_score, visitor_score
    from zzz_game_details
    where home_score < 0
    or visitor_score < 0
    or home_score = visitor_score
    
  11. انقر فوق حفظ باسم.

  12. بالنسبة إلى اسم الملف، أدخل tests/zzz_game_details_check_scores.sql، ثم انقر فوق إنشاء.

  13. إنشاء اختبار بيانات ثالث: انقر فوق أيقونة (إنشاء ملف جديد) في الزاوية العلوية اليسرى.

  14. في محرر النص، أدخل عبارة SQL التالية. يتضمن هذا الملف اختبار بيانات لتحديد ما إذا كان لدى أي فرق سجلات فوز أو خسارة سلبية، أو كان لديها سجلات فوز أو خسارة أكثر من الألعاب التي تم لعبها، أو لعبت ألعابا أكثر مما كان مسموحا به.

    -- Each team participated in 4 games this season.
    -- For this test to pass, this query must return no results.
    
    select wins, losses
    from zzz_win_loss_records
    where wins < 0 or wins > 4
    or losses < 0 or losses > 4
    or (wins + losses) > 4
    
  15. انقر فوق حفظ باسم.

  16. بالنسبة إلى اسم الملف، أدخل tests/zzz_win_loss_records_check_records.sql، ثم انقر فوق إنشاء.

  17. تشغيل الاختبارات: في سطر الأوامر، قم بتشغيل dbt test الأمر .

الخطوة 4: التنظيف

يمكنك حذف الجداول وطرق العرض التي قمت بإنشائها لهذا المثال عن طريق تشغيل التعليمات البرمجية SQL التالية.

إذا كنت تتصل بمجموعة، يمكنك تشغيل رمز SQL هذا من دفتر ملاحظات مرفق بالمجموعة، مع تحديد SQL كلغة افتراضية لدفتر الملاحظات. إذا كنت تتصل بمستودع SQL، يمكنك تشغيل رمز SQL هذا من استعلام.

DROP TABLE zzz_game_opponents;
DROP TABLE zzz_game_scores;
DROP TABLE zzz_games;
DROP TABLE zzz_teams;
DROP TABLE zzz_game_details;
DROP VIEW zzz_win_loss_records;

DROP TABLE diamonds;
DROP TABLE diamonds_four_cs;
DROP VIEW diamonds_list_colors;
DROP VIEW diamonds_prices;

الخطوات التالية

  • تعرف على المزيد حول نماذج dbt.
  • تعرف على كيفية اختبار مشاريع dbt الخاصة بك.
  • تعرف على كيفية استخدام Jinja، وهي لغة قولبة، لبرمجة SQL في مشاريع dbt الخاصة بك.
  • تعرف على أفضل ممارسات dbt.

الموارد الإضافية