الاتصال ب 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، قم بما يلي:
بعد الاتصال ب 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 للعمل معها والوصول للقراءة فقط إلى هذه الجداول.
انقر فوق
كتالوج في الشريط الجانبي.
حدد مستودع SQL (DBT_CLOUD_ENDPOINT) في القائمة المنسدلة في أعلى اليمين.
- ضمن مستكشف الكتالوج، حدد الكتالوج الذي يحتوي على قاعدة البيانات للجدول.
- حدد قاعدة البيانات التي تحتوي على الجدول.
- تحديد جدولك.
تلميح
إذا لم تتمكن من رؤية الكتالوج أو قاعدة البيانات أو الجدول مدرجا، أدخل أي جزء من الاسم في المربعات تحديد كتالوج أو تحديد قاعدة بيانات أو تصفية الجداول، على التوالي، لتضييق نطاق القائمة.
انقر فوق أذونات.
انقر فوق منح.
بالنسبة إلى النوع لإضافة مستخدمين أو مجموعات متعددة، حدد DBT_CLOUD_USER. هذا هو كيان خدمة Azure Databricks الذي أنشأه Partner Connect لك في القسم السابق.
تلميح
إذا لم تتمكن من رؤية DBT_CLOUD_USER، فابدأ الكتابة
DBT_CLOUD_USER
في المربع النوع لإضافة عدة مستخدمين أو مجموعات حتى يظهر في القائمة، ثم حدده.امنح حق الوصول للقراءة فقط عن طريق تحديد
SELECT
وREAD METADATA
.وانقر فوق موافق.
كرر الخطوات من 4 إلى 9 لكل جدول إضافي تريد منح dbt Cloud حق الوصول للقراءة إليه.
استكشاف أخطاء اتصال dbt Cloud وإصلاحها
إذا قام شخص ما بحذف المشروع في dbt Cloud لهذا الحساب، وقمت بالنقر فوق لوحة dbt ، فستظهر رسالة خطأ تفيد بأنه لا يمكن العثور على المشروع. لإصلاح ذلك، انقر فوق حذف الاتصال، ثم ابدأ من بداية هذا الإجراء لإنشاء الاتصال مرة أخرى.
الاتصال ب dbt Cloud يدويا
يصف هذا القسم كيفية توصيل مجموعة Azure Databricks أو مستودع Databricks SQL في مساحة عمل Azure Databricks إلى dbt Cloud.
هام
توصي Databricks بالاتصال بمستودع SQL. إذا لم يكن لديك استحقاق الوصول إلى Databricks SQL، أو إذا كنت ترغب في تشغيل نماذج Python، يمكنك الاتصال بمجموعة بدلا من ذلك.
المتطلبات
مجموعة أو مستودع SQL في مساحة عمل Azure Databricks.
- مرجع تكوين الحساب.
- إنشاء مستودع SQL.
تفاصيل الاتصال لنظام المجموعة أو مستودع SQL، وتحديدا قيم Server Hostname وPort وHTTP Path.
- احصل على تفاصيل الاتصال لمورد حساب Azure Databricks.
رمز مميز للوصول الشخصي إلى Azure Databricks أو رمز مميز لمعرف Microsoft Entra (المعروف سابقا ب Azure Active Directory). لإنشاء رمز مميز للوصول الشخصي، اتبع الخطوات الواردة في رموز الوصول الشخصي Azure Databricks لمستخدمي مساحة العمل.
إشعار
كأفضل ممارسة أمان، عند المصادقة باستخدام الأدوات والأنظمة والبرامج النصية والتطبيقات التلقائية، توصي Databricks باستخدام رموز الوصول الشخصية التي تنتمي إلى كيانات الخدمة بدلا من مستخدمي مساحة العمل. لإنشاء رموز مميزة لكيانات الخدمة، راجع إدارة الرموز المميزة لكيان الخدمة.
لتوصيل dbt Cloud بالبيانات التي يديرها كتالوج Unity، إصدار dbt 1.1 أو أعلى.
تنشئ الخطوات الواردة في هذه المقالة بيئة جديدة تستخدم أحدث إصدار من dbt. للحصول على معلومات حول ترقية إصدار dbt لبيئة موجودة، راجع الترقية إلى أحدث إصدار من dbt في Cloud في وثائق dbt.
الخطوة 1: التسجيل في dbt Cloud
انتقل إلى dbt Cloud - Signup وأدخل بريدك الإلكتروني واسمك ومعلومات شركتك. أنشئ كلمة مرور وانقر فوق إنشاء حسابي.
الخطوة 2: إنشاء مشروع dbt
في هذه الخطوة، يمكنك إنشاء مشروع dbt، والذي يحتوي على اتصال بمجموعة Azure Databricks أو مستودع SQL، ومستودع يحتوي على التعليمات البرمجية المصدر الخاصة بك، وبيئة واحدة أو أكثر (مثل بيئات الاختبار والإنتاج).
انقر فوق أيقونة الإعدادات، ثم انقر فوق إعدادات الحساب.
انقر فوق مشروع جديد.
بالنسبة إلى الاسم، أدخل اسما فريدا لمشروعك، ثم انقر فوق متابعة.
لاختيار اتصال، انقر فوق Databricks، ثم انقر فوق التالي.
بالنسبة إلى الاسم، أدخل اسما فريدا لهذا الاتصال.
لتحديد محول، انقر فوق Databricks (dbt-databricks).
إشعار
توصي Databricks باستخدام
dbt-databricks
، والذي يدعم كتالوج Unity، بدلا منdbt-spark
. بشكل افتراضي، تستخدمdbt-databricks
المشاريع الجديدة . لترحيل مشروع موجود إلىdbt-databricks
، راجع الترحيل من dbt-spark إلى dbt-databricks في وثائق dbt.ضمن Settings، ل Server Hostname، أدخل قيمة اسم مضيف الخادم من المتطلبات.
بالنسبة لمسار HTTP، أدخل قيمة مسار HTTP من المتطلبات.
إذا كانت مساحة العمل الخاصة بك ممكنة كتالوج Unity، ضمن الإعدادات الاختيارية، أدخل اسم الكتالوج لاستخدام dbt Cloud.
ضمن بيانات اعتماد التطوير، للرمز المميز، أدخل رمز الوصول الشخصي أو الرمز المميز لمعرف Microsoft Entra من المتطلبات.
بالنسبة للمخطط، أدخل اسم المخطط حيث تريد أن يقوم dbt Cloud بإنشاء الجداول وطرق العرض (على سبيل المثال،
default
).انقر فوق اختبار الاتصال.
إذا نجح الاختبار، فانقر فوق التالي.
لمزيد من المعلومات، راجع الاتصال ب 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
العمل الخاصة بك.
مع فتح المشروع، انقر فوق تطوير في أعلى واجهة المستخدم.
انقر فوق تهيئة مشروع dbt.
انقر فوق Commit and sync، وأدخل رسالة تثبيت، ثم انقر فوق Commit.
انقر فوق إنشاء فرع، وأدخل اسما لفرعك، ثم انقر فوق إرسال.
إنشاء النموذج الأول: انقر فوق إنشاء ملف جديد.
في محرر النص، أدخل عبارة SQL التالية. تحدد هذه العبارة تفاصيل قيراط والقص واللون والوضوح فقط لكل معين من
diamonds
الجدول. ترشدconfig
الكتلة dbt لإنشاء جدول في قاعدة البيانات استنادا إلى هذه العبارة.{{ config( materialized='table', file_format='delta' ) }}
select carat, cut, color, clarity from diamonds
تلميح
للحصول على خيارات إضافية
config
مثل الاستراتيجيةmerge
التزايدية، راجع تكوينات Databricks في وثائق dbt.انقر فوق حفظ باسم.
بالنسبة إلى اسم الملف، أدخل
models/diamonds_four_cs.sql
ثم انقر فوق إنشاء.إنشاء نموذج ثان: انقر فوق
(إنشاء ملف جديد) في الزاوية العلوية اليسرى.
في محرر النص، أدخل عبارة SQL التالية. تحدد هذه العبارة قيما فريدة من
colors
العمود فيdiamonds_four_cs
الجدول، مع فرز النتائج بترتيب أبجدي أولا إلى آخر. نظرا لعدم وجودconfig
كتلة، يوجه هذا النموذج dbt لإنشاء طريقة عرض في قاعدة البيانات استنادا إلى هذه العبارة.select distinct color from diamonds_four_cs sort by color asc
انقر فوق حفظ باسم.
بالنسبة إلى اسم الملف، أدخل
models/diamonds_list_colors.sql
، ثم انقر فوق إنشاء.إنشاء نموذج ثالث: انقر فوق
(إنشاء ملف جديد) في الزاوية العلوية اليسرى.
في محرر النص، أدخل عبارة SQL التالية. هذا البيان متوسط أسعار الماس حسب اللون، وفرز النتائج حسب متوسط السعر من الأعلى إلى الأدنى. يرشد هذا النموذج dbt لإنشاء طريقة عرض في قاعدة البيانات استنادا إلى هذه العبارة.
select color, avg(price) as price from diamonds group by color order by price desc
انقر فوق حفظ باسم.
بالنسبة إلى اسم الملف، أدخل
models/diamonds_prices.sql
وانقر فوق إنشاء.تشغيل النماذج: في سطر الأوامر، قم بتشغيل
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
قم بتشغيل التعليمات البرمجية 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: إنشاء نماذج أكثر تعقيدا وتشغيلها
في هذه الخطوة، يمكنك إنشاء نماذج أكثر تعقيدا لمجموعة من جداول البيانات ذات الصلة. تحتوي جداول البيانات هذه على معلومات حول دوري رياضي خيالي لثلاثة فرق تلعب موسما مكونا من ست مباريات. ينشئ هذا الإجراء جداول البيانات، وينشئ النماذج، ويشغل النماذج.
قم بتشغيل التعليمات البرمجية 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 | -- +---------+---------------+
إنشاء النموذج الأول: انقر فوق
(إنشاء ملف جديد) في الزاوية العلوية اليسرى.
في محرر النص، أدخل عبارة 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
انقر فوق حفظ باسم.
بالنسبة إلى اسم الملف، أدخل
models/zzz_game_details.sql
ثم انقر فوق إنشاء.إنشاء نموذج ثان: انقر فوق
(إنشاء ملف جديد) في الزاوية العلوية اليسرى.
في محرر النص، أدخل عبارة 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
انقر فوق حفظ باسم.
بالنسبة إلى اسم الملف، أدخل
models/zzz_win_loss_records.sql
ثم انقر فوق إنشاء.تشغيل النماذج: في سطر الأوامر، قم بتشغيل
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
قم بتشغيل التعليمات البرمجية 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، عدد السجلات التي لا تجتاز تأكيدا. عندما يكون هذا الرقم صفرا، تمر جميع السجلات، وبالتالي تنجح الاختبارات. اختبارات البيانات هي استعلامات محددة يجب أن ترجع صفر سجلات لتمريرها.
إنشاء اختبارات المخطط: انقر فوق
(إنشاء ملف جديد) في الزاوية العلوية اليسرى.
في محرر النص، أدخل المحتوى التالي. يتضمن هذا الملف اختبارات المخطط التي تحدد ما إذا كانت الأعمدة المحددة تحتوي على قيم فريدة أو ليست خالية أو تحتوي على القيم المحددة فقط أو مجموعة.
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
انقر فوق حفظ باسم.
بالنسبة إلى اسم الملف، أدخل
models/schema.yml
، ثم انقر فوق إنشاء.إنشاء اختبار البيانات الأول: انقر فوق
(إنشاء ملف جديد) في الزاوية العلوية اليسرى.
في محرر النص، أدخل عبارة 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'
انقر فوق حفظ باسم.
بالنسبة إلى اسم الملف، أدخل
tests/zzz_game_details_check_dates.sql
، ثم انقر فوق إنشاء.إنشاء اختبار بيانات ثان: انقر فوق
(إنشاء ملف جديد) في الزاوية العلوية اليسرى.
في محرر النص، أدخل عبارة 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
انقر فوق حفظ باسم.
بالنسبة إلى اسم الملف، أدخل
tests/zzz_game_details_check_scores.sql
، ثم انقر فوق إنشاء.إنشاء اختبار بيانات ثالث: انقر فوق
(إنشاء ملف جديد) في الزاوية العلوية اليسرى.
في محرر النص، أدخل عبارة 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
انقر فوق حفظ باسم.
بالنسبة إلى اسم الملف، أدخل
tests/zzz_win_loss_records_check_records.sql
، ثم انقر فوق إنشاء.تشغيل الاختبارات: في سطر الأوامر، قم بتشغيل
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.