استخدام Databricks SQL في مهمة Azure Databricks

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

توفر هذه المقالة مثالا لسير العمل الذي ينشئ لوحة معلومات قديمة تعرض مقاييس لمساهمات GitHub. في هذا المثال، سوف:

  • استيعاب بيانات GitHub باستخدام برنامج نصي Python وواجهة برمجة تطبيقات GitHub REST.
  • تحويل بيانات GitHub باستخدام مسار Delta Live Tables.
  • تشغيل استعلامات Databricks SQL التي تقوم بإجراء تحليل على البيانات المعدة.
  • عرض التحليل في لوحة معلومات قديمة.

لوحة معلومات تحليل GitHub

قبل البدء

تحتاج إلى ما يلي لإكمال هذه المعاينة:

الخطوة 1: تخزين رمز GitHub المميز في سر

بدلا من ترميز بيانات الاعتماد مثل رمز الوصول الشخصي GitHub في وظيفة، توصي Databricks باستخدام نطاق سري لتخزين البيانات السرية وإدارتها بأمان. تعد أوامر Databricks CLI التالية مثالا على إنشاء نطاق سري وتخزين رمز GitHub المميز في سر في هذا النطاق:

databricks secrets create-scope <scope-name>
databricks secrets put-secret <scope-name> <token-key> --string-value <token>
  • استبدل <scope-name باسم نطاق البيانات السرية Azure Databricks لتخزين الرمز المميز.
  • استبدل <token-key> باسم مفتاح لتعيينه إلى الرمز المميز.
  • استبدل <token> بقيمة الرمز المميز للوصول الشخصي GitHub.

الخطوة 2: إنشاء برنامج نصي لجلب بيانات GitHub

يستخدم البرنامج النصي Python التالي واجهة برمجة تطبيقات GitHub REST لجلب البيانات على الالتزامات والمساهمات من مستودع GitHub. تحدد وسيطات الإدخال مستودع GitHub. يتم حفظ السجلات في موقع في DBFS محدد بواسطة وسيطة إدخال أخرى.

يستخدم هذا المثال DBFS لتخزين البرنامج النصي Python، ولكن يمكنك أيضا استخدام مجلدات Databricks Git أو ملفات مساحة العمل لتخزين البرنامج النصي وإدارته.

  • احفظ هذا البرنامج النصي في موقع على القرص المحلي:

    import json
    import requests
    import sys
    
    api_url = "https://api.github.com"
    
    def get_commits(owner, repo, token, path):
      page = 1
      request_url =  f"{api_url}/repos/{owner}/{repo}/commits"
      more = True
    
      get_response(request_url, f"{path}/commits", token)
    
    def get_contributors(owner, repo, token, path):
      page = 1
      request_url =  f"{api_url}/repos/{owner}/{repo}/contributors"
      more = True
    
      get_response(request_url, f"{path}/contributors", token)
    
    def get_response(request_url, path, token):
      page = 1
      more = True
    
      while more:
        response = requests.get(request_url, params={'page': page}, headers={'Authorization': "token " + token})
        if response.text != "[]":
          write(path + "/records-" + str(page) + ".json", response.text)
          page += 1
        else:
          more = False
    
    def write(filename, contents):
      dbutils.fs.put(filename, contents)
    
    def main():
      args = sys.argv[1:]
      if len(args) < 6:
        print("Usage: github-api.py owner repo request output-dir secret-scope secret-key")
        sys.exit(1)
    
      owner = sys.argv[1]
      repo = sys.argv[2]
      request = sys.argv[3]
      output_path = sys.argv[4]
      secret_scope = sys.argv[5]
      secret_key = sys.argv[6]
    
      token = dbutils.secrets.get(scope=secret_scope, key=secret_key)
    
      if (request == "commits"):
        get_commits(owner, repo, token, output_path)
      elif (request == "contributors"):
        get_contributors(owner, repo, token, output_path)
    
    if __name__ == "__main__":
        main()
    
  • تحميل البرنامج النصي إلى DBFS:

    1. انتقل إلى الصفحة المقصودة ل Azure Databricks وانقر فوق أيقونة الكتالوج كتالوج في الشريط الجانبي.
    2. انقر فوق Browse DBFS.
    3. في مستعرض ملفات DBFS، انقر فوق تحميل. يظهر مربع الحوار تحميل البيانات إلى DBFS.
    4. أدخل مسارا في DBFS لتخزين البرنامج النصي، وانقر فوق إسقاط الملفات لتحميلها، أو انقر للاستعراض، وحدد البرنامج النصي Python.
    5. انقر فوق تم .

الخطوة 3: إنشاء مسار Delta Live Tables لمعالجة بيانات GitHub

في هذا القسم، يمكنك إنشاء مسار Delta Live Tables لتحويل بيانات GitHub الأولية إلى جداول يمكن تحليلها بواسطة استعلامات Databricks SQL. لإنشاء البنية الأساسية لبرنامج ربط العمليات التجارية، قم بتنفيذ الخطوات التالية:

  1. في الشريط الجانبي، انقر فوق أيقونة جديدة جديد وحدد دفتر الملاحظات من القائمة. يظهر مربع الحوار إنشاء دفتر ملاحظات.

  2. في اللغة الافتراضية، أدخل اسما وحدد Python. يمكنك ترك المجموعة معينة إلى القيمة الافتراضية. يقوم وقت تشغيل Delta Live Tables بإنشاء نظام مجموعة قبل تشغيله للبنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك.

  3. انقر فوق Create.

  4. انسخ مثال تعليمة Python البرمجية والصقه في دفتر الملاحظات الجديد. يمكنك إضافة مثال التعليمات البرمجية إلى خلية واحدة من دفتر الملاحظات أو خلايا متعددة.

    import dlt
    from pyspark.sql.functions import *
    
    def parse(df):
       return (df
         .withColumn("author_date", to_timestamp(col("commit.author.date")))
         .withColumn("author_email", col("commit.author.email"))
         .withColumn("author_name", col("commit.author.name"))
         .withColumn("comment_count", col("commit.comment_count"))
         .withColumn("committer_date", to_timestamp(col("commit.committer.date")))
         .withColumn("committer_email", col("commit.committer.email"))
         .withColumn("committer_name", col("commit.committer.name"))
         .withColumn("message", col("commit.message"))
         .withColumn("sha", col("commit.tree.sha"))
         .withColumn("tree_url", col("commit.tree.url"))
         .withColumn("url", col("commit.url"))
         .withColumn("verification_payload", col("commit.verification.payload"))
         .withColumn("verification_reason", col("commit.verification.reason"))
         .withColumn("verification_signature", col("commit.verification.signature"))
         .withColumn("verification_verified", col("commit.verification.signature").cast("string"))
         .drop("commit")
       )
    
    @dlt.table(
       comment="Raw GitHub commits"
    )
    def github_commits_raw():
      df = spark.read.json(spark.conf.get("commits-path"))
      return parse(df.select("commit"))
    
    @dlt.table(
      comment="Info on the author of a commit"
    )
    def commits_by_author():
      return (
        dlt.read("github_commits_raw")
          .withColumnRenamed("author_date", "date")
          .withColumnRenamed("author_email", "email")
          .withColumnRenamed("author_name", "name")
          .select("sha", "date", "email", "name")
      )
    
    @dlt.table(
      comment="GitHub repository contributors"
    )
    def github_contributors_raw():
      return(
        spark.readStream.format("cloudFiles")
          .option("cloudFiles.format", "json")
          .load(spark.conf.get("contribs-path"))
      )
    
  5. في الشريط الجانبي، انقر فوق أيقونة مهام سير العمل مهام سير العمل، وانقر فوق علامة التبويب Delta Live Tables ، ثم انقر فوق Create Pipeline.

  6. امنح المسار اسما، على سبيل المثال، Transform GitHub data.

  7. في الحقل مكتبات دفتر الملاحظات ، أدخل المسار إلى دفتر الملاحظات أو انقر لتحديد أيقونة أداة انتقاء الملفات دفتر الملاحظات.

  8. انقر فوق إضافة تكوين. في Key مربع النص، أدخل commits-path. في Value مربع النص، أدخل مسار DBFS حيث ستتم كتابة سجلات GitHub. يمكن أن يكون هذا أي مسار تختاره وهو نفس المسار الذي ستستخدمه عند تكوين مهمة Python الأولى عند إنشاء سير العمل.

  9. انقر فوق إضافة تكوين مرة أخرى. في Key مربع النص، أدخل contribs-path. في Value مربع النص، أدخل مسار DBFS حيث ستتم كتابة سجلات GitHub. يمكن أن يكون هذا أي مسار تختاره وهو نفس المسار الذي ستستخدمه عند تكوين مهمة Python الثانية عند إنشاء سير العمل.

  10. في الحقل Target ، أدخل قاعدة بيانات هدف، على سبيل المثال، github_tables. يؤدي تعيين قاعدة بيانات مستهدفة إلى نشر بيانات الإخراج إلى metastore وهو مطلوب لاستعلامات انتقال البيانات من الخادم التي تقوم بتحليل البيانات التي ينتجها المسار.

  11. انقر فوق حفظ.

الخطوة 4: إنشاء سير عمل لاستيعاب بيانات GitHub وتحويلها

قبل تحليل بيانات GitHub وتصورها باستخدام Databricks SQL، تحتاج إلى استيعاب البيانات وإعدادها. لإنشاء سير عمل لإكمال هذه المهام، قم بتنفيذ الخطوات التالية:

إنشاء مهمة Azure Databricks وإضافة المهمة الأولى

  1. انتقل إلى الصفحة المقصودة ل Azure Databricks وقم بأحد الإجراءات التالية:

    • في الشريط الجانبي، انقر فوق أيقونة مهام سير العمل مهام سير العمل وانقر فوق الزر .
    • في الشريط الجانبي، انقر فوق أيقونة جديدة جديد وحدد مهمة من القائمة.
  2. في مربع حوار المهمة الذي يظهر في علامة التبويب المهام ، استبدل إضافة اسم لمهمتك... باسم وظيفتك، على سبيل المثال، GitHub analysis workflow.

  3. في اسم المهمة، أدخل اسما للمهمة، على سبيل المثال، get_commits.

  4. في النوع، حدد برنامج Python النصي.

  5. في المصدر، حدد DBFS / S3.

  6. في المسار، أدخل المسار إلى البرنامج النصي في DBFS.

  7. في المعلمات، أدخل الوسيطات التالية للبرنامج النصي Python:

    ["<owner>","<repo>","commits","<DBFS-output-dir>","<scope-name>","<github-token-key>"]

    • استبدل <owner> باسم مالك المستودع. على سبيل المثال، لجلب السجلات من github.com/databrickslabs/overwatch المستودع، أدخل databrickslabs.
    • استبدل <repo> باسم المستودع، على سبيل المثال، overwatch.
    • استبدل <DBFS-output-dir> بمسار في DBFS لتخزين السجلات التي تم جلبها من GitHub.
    • استبدل <scope-name> باسم النطاق السري الذي أنشأته لتخزين رمز GitHub المميز.
    • استبدل <github-token-key> باسم المفتاح الذي قمت بتعيينه إلى رمز GitHub المميز.
  8. انقر فوق حفظ المهمة.

إضافة مهمة أخرى

  1. انقر الزر أسفل المهمة التي أنشأتها للتو.

  2. في اسم المهمة، أدخل اسما للمهمة، على سبيل المثال، get_contributors.

  3. في النوع، حدد نوع مهمة البرنامج النصي Python.

  4. في المصدر، حدد DBFS / S3.

  5. في المسار، أدخل المسار إلى البرنامج النصي في DBFS.

  6. في المعلمات، أدخل الوسيطات التالية للبرنامج النصي Python:

    ["<owner>","<repo>","contributors","<DBFS-output-dir>","<scope-name>","<github-token-key>"]

    • استبدل <owner> باسم مالك المستودع. على سبيل المثال، لجلب السجلات من github.com/databrickslabs/overwatch المستودع، أدخل databrickslabs.
    • استبدل <repo> باسم المستودع، على سبيل المثال، overwatch.
    • استبدل <DBFS-output-dir> بمسار في DBFS لتخزين السجلات التي تم جلبها من GitHub.
    • استبدل <scope-name> باسم النطاق السري الذي أنشأته لتخزين رمز GitHub المميز.
    • استبدل <github-token-key> باسم المفتاح الذي قمت بتعيينه إلى رمز GitHub المميز.
  7. انقر فوق حفظ المهمة.

إضافة مهمة لتحويل البيانات

  1. انقر الزر أسفل المهمة التي أنشأتها للتو.
  2. في اسم المهمة، أدخل اسما للمهمة، على سبيل المثال، transform_github_data.
  3. في النوع، حدد Delta Live Tables pipeline وأدخل اسما للمهمة.
  4. في Pipeline، حدد البنية الأساسية لبرنامج ربط العمليات التجارية التي تم إنشاؤها في الخطوة 3: إنشاء مسار Delta Live Tables لمعالجة بيانات GitHub.
  5. انقر فوق Create.

الخطوة 5: تشغيل سير عمل تحويل البيانات

انقر الزر لتشغيل سير العمل. لعرض تفاصيل التشغيل، انقر فوق الارتباط في عمود وقت البدء للتشغيل في طريقة عرض تشغيل المهمة. انقر فوق كل مهمة لعرض تفاصيل تشغيل المهمة.

الخطوة 6: (اختياري) لعرض بيانات الإخراج بعد اكتمال تشغيل سير العمل، قم بتنفيذ الخطوات التالية:

  1. في طريقة عرض تفاصيل التشغيل، انقر فوق مهمة Delta Live Tables.
  2. في لوحة تفاصيل تشغيل المهمة، انقر فوق اسم المسار ضمن Pipeline. يتم عرض صفحة تفاصيل المسار.
  3. commits_by_author حدد الجدول في DAG للبنية الأساسية لبرنامج ربط العمليات التجارية.
  4. انقر فوق اسم الجدول بجوار Metastore في لوحة commits_by_author . يتم فتح صفحة مستكشف الكتالوج.

في مستكشف الكتالوج، يمكنك عرض مخطط الجدول وعينة البيانات وتفاصيل أخرى للبيانات. اتبع نفس الخطوات لعرض بيانات github_contributors_raw الجدول.

الخطوة 7: إزالة بيانات GitHub

في تطبيق العالم الحقيقي، قد تكون استيعاب البيانات ومعالجتها باستمرار. نظرا لأن هذا المثال يقوم بتنزيل مجموعة البيانات بأكملها ومعالجتها، يجب إزالة بيانات GitHub التي تم تنزيلها بالفعل لمنع حدوث خطأ عند إعادة تشغيل سير العمل. لإزالة البيانات التي تم تنزيلها، قم بتنفيذ الخطوات التالية:

  1. أنشئ دفتر ملاحظات جديدا وأدخل الأوامر التالية في الخلية الأولى:

    dbutils.fs.rm("<commits-path", True)
    dbutils.fs.rm("<contributors-path", True)
    

    استبدل <commits-path> و <contributors-path> بمسارات DBFS التي قمت بتكوينها عند إنشاء مهام Python.

  2. انقر فوق قائمة التشغيل Run Cell وحددها.

يمكنك أيضا إضافة دفتر الملاحظات هذا كمهمة في سير العمل.

الخطوة 8: إنشاء استعلامات Databricks SQL

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

عرض أفضل 10 مساهمين حسب الشهر

  1. انقر فوق الأيقونة أسفل شعار شعار Databricks Databricks في الشريط الجانبي وحدد SQL.

  2. انقر فوق إنشاء استعلام لفتح محرر استعلام Databricks SQL.

  3. تأكد من تعيين الكتالوج إلى hive_metastore. انقر فوق default بجوار hive_metastore وقم بتعيين قاعدة البيانات إلى القيمة Target التي قمت بتعيينها في مسار Delta Live Tables.

  4. في علامة التبويب استعلام جديد، أدخل الاستعلام التالي:

    SELECT
      date_part('YEAR', date) AS year,
      date_part('MONTH', date) AS month,
      name,
      count(1)
    FROM
      commits_by_author
    WHERE
      name IN (
        SELECT
          name
        FROM
          commits_by_author
        GROUP BY
          name
        ORDER BY
          count(name) DESC
        LIMIT 10
      )
      AND
        date_part('YEAR', date) >= 2022
    GROUP BY
      name, year, month
    ORDER BY
      year, month, name
    
  5. انقر فوق علامة التبويب استعلام جديد وأعد تسمية الاستعلام، على سبيل المثال، Commits by month top 10 contributors.

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

  7. في Visualization type، حدد Bar.

  8. في العمود X، حدد month.

  9. في أعمدة Y، حدد count(1).

  10. في Group by، حدد name.

  11. انقر فوق حفظ.

عرض أفضل 20 مساهما

  1. انقر فوق + > إنشاء استعلام جديد وتأكد من تعيين الكتالوج إلى hive_metastore. انقر فوق default بجوار hive_metastore وقم بتعيين قاعدة البيانات إلى القيمة Target التي قمت بتعيينها في مسار Delta Live Tables.

  2. أدخل الاستعلام التالي:

    SELECT
      login,
      cast(contributions AS INTEGER)
    FROM
      github_contributors_raw
    ORDER BY
      contributions DESC
    LIMIT 20
    
  3. انقر فوق علامة التبويب استعلام جديد وأعد تسمية الاستعلام، على سبيل المثال، Top 20 contributors.

  4. لتغيير المرئيات من الجدول الافتراضي، في لوحة النتائج، انقر فوق قائمة كباب تحرير وانقر فوقه.

  5. في Visualization type، حدد Bar.

  6. في العمود X، حدد login.

  7. في أعمدة Y، حدد المساهمات.

  8. انقر فوق حفظ.

عرض إجمالي التثبيتات حسب الكاتب

  1. انقر فوق + > إنشاء استعلام جديد وتأكد من تعيين الكتالوج إلى hive_metastore. انقر فوق default بجوار hive_metastore وقم بتعيين قاعدة البيانات إلى القيمة Target التي قمت بتعيينها في مسار Delta Live Tables.

  2. أدخل الاستعلام التالي:

    SELECT
      name,
      count(1) commits
    FROM
      commits_by_author
    GROUP BY
      name
    ORDER BY
      commits DESC
    LIMIT 10
    
  3. انقر فوق علامة التبويب استعلام جديد وأعد تسمية الاستعلام، على سبيل المثال، Total commits by author.

  4. لتغيير المرئيات من الجدول الافتراضي، في لوحة النتائج، انقر فوق قائمة كباب تحرير وانقر فوقه.

  5. في Visualization type، حدد Bar.

  6. في العمود X، حدد name.

  7. في أعمدة Y، حدد commits.

  8. انقر فوق حفظ.

الخطوة 9: إنشاء لوحة معلومات

  1. في الشريط الجانبي، انقر فوق أيقونة لوحات المعلومات لوحات المعلومات
  2. انقر فوق إنشاء لوحة معلومات.
  3. أدخل اسما للوحة المعلومات، على سبيل المثال، GitHub analysis.
  4. لكل استعلام وتصور تم إنشاؤه في الخطوة 8: إنشاء استعلامات Databricks SQL، انقر فوق إضافة > مرئيات وحدد كل مرئيات.

الخطوة 10: إضافة مهام SQL إلى سير العمل

لإضافة مهام الاستعلام الجديدة إلى سير العمل الذي أنشأته في إنشاء مهمة Azure Databricks وإضافة المهمة الأولى، لكل استعلام قمت بإنشائه في الخطوة 8: إنشاء استعلامات Databricks SQL:

  1. انقر فوق أيقونة مهام سير العمل مهام سير العمل في الشريط الجانبي.
  2. في العمود الاسم ، انقر فوق اسم المهمة.
  3. انقر فوق علامة التبويب المهام.
  4. انقر الزر أسفل المهمة الأخيرة.
  5. أدخل اسما للمهمة، وفي النوع حدد SQL، وفي مهمة SQL حدد استعلام.
  6. حدد الاستعلام في استعلام SQL.
  7. في مستودع SQL، حدد مستودع SQL بلا خادم أو مستودع SQL pro لتشغيل المهمة.
  8. انقر فوق Create.

الخطوة 11: إضافة مهمة لوحة معلومات

  1. انقر الزر أسفل المهمة الأخيرة.
  2. أدخل اسما للمهمة، في النوع، حدد SQL، وفي مهمة SQL حدد لوحة المعلومات القديمة.
  3. حدد لوحة المعلومات التي تم إنشاؤها في الخطوة 9: إنشاء لوحة معلومات.
  4. في مستودع SQL، حدد مستودع SQL بلا خادم أو مستودع SQL pro لتشغيل المهمة.
  5. انقر فوق Create.

الخطوة 12: تشغيل سير العمل الكامل

لتشغيل سير العمل، انقر فوق الزر . لعرض تفاصيل التشغيل، انقر فوق الارتباط في عمود وقت البدء للتشغيل في طريقة عرض تشغيل المهمة.

الخطوة 13: عرض النتائج

لعرض النتائج عند اكتمال التشغيل، انقر فوق مهمة لوحة المعلومات النهائية وانقر فوق اسم لوحة المعلومات ضمن لوحة معلومات SQL في اللوحة اليمنى.