استخدام Databricks SQL في مهمة Azure Databricks
يمكنك استخدام نوع مهمة SQL في مهمة Azure Databricks، ما يسمح لك بإنشاء مهام سير العمل التي تتضمن كائنات Databricks SQL وجدولتها وتشغيلها ومراقبتها مثل الاستعلامات ولوحات المعلومات القديمة والتنبيهات. على سبيل المثال، يمكن لسير العمل استيعاب البيانات وإعداد البيانات وإجراء التحليل باستخدام استعلامات Databricks SQL ثم عرض النتائج في لوحة معلومات قديمة.
توفر هذه المقالة مثالا لسير العمل الذي ينشئ لوحة معلومات قديمة تعرض مقاييس لمساهمات GitHub. في هذا المثال، سوف:
- استيعاب بيانات GitHub باستخدام برنامج نصي Python وواجهة برمجة تطبيقات GitHub REST.
- تحويل بيانات GitHub باستخدام مسار Delta Live Tables.
- تشغيل استعلامات Databricks SQL التي تقوم بإجراء تحليل على البيانات المعدة.
- عرض التحليل في لوحة معلومات قديمة.
قبل البدء
تحتاج إلى ما يلي لإكمال هذه المعاينة:
- رمز مميز للوصول الشخصي GitHub. يجب أن يكون لهذا الرمز المميز إذن المستودع .
- مستودع SQL بلا خادم أو مستودع SQL pro. راجع أنواع مستودعات SQL.
- نطاق البيانات السرية Databricks. يتم استخدام النطاق السري لتخزين رمز GitHub المميز بشكل آمن. راجع الخطوة 1: تخزين رمز 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:
- انتقل إلى الصفحة المقصودة ل Azure Databricks وانقر فوق كتالوج في الشريط الجانبي.
- انقر فوق Browse DBFS.
- في مستعرض ملفات DBFS، انقر فوق تحميل. يظهر مربع الحوار تحميل البيانات إلى DBFS.
- أدخل مسارا في DBFS لتخزين البرنامج النصي، وانقر فوق إسقاط الملفات لتحميلها، أو انقر للاستعراض، وحدد البرنامج النصي Python.
- انقر فوق تم .
الخطوة 3: إنشاء مسار Delta Live Tables لمعالجة بيانات GitHub
في هذا القسم، يمكنك إنشاء مسار Delta Live Tables لتحويل بيانات GitHub الأولية إلى جداول يمكن تحليلها بواسطة استعلامات Databricks SQL. لإنشاء البنية الأساسية لبرنامج ربط العمليات التجارية، قم بتنفيذ الخطوات التالية:
في الشريط الجانبي، انقر فوق جديد وحدد دفتر الملاحظات من القائمة. يظهر مربع الحوار إنشاء دفتر ملاحظات.
في اللغة الافتراضية، أدخل اسما وحدد Python. يمكنك ترك المجموعة معينة إلى القيمة الافتراضية. يقوم وقت تشغيل Delta Live Tables بإنشاء نظام مجموعة قبل تشغيله للبنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك.
انقر فوق Create.
انسخ مثال تعليمة 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")) )
في الشريط الجانبي، انقر فوق مهام سير العمل، وانقر فوق علامة التبويب Delta Live Tables ، ثم انقر فوق Create Pipeline.
امنح المسار اسما، على سبيل المثال،
Transform GitHub data
.في الحقل مكتبات دفتر الملاحظات ، أدخل المسار إلى دفتر الملاحظات أو انقر لتحديد دفتر الملاحظات.
انقر فوق إضافة تكوين. في
Key
مربع النص، أدخلcommits-path
. فيValue
مربع النص، أدخل مسار DBFS حيث ستتم كتابة سجلات GitHub. يمكن أن يكون هذا أي مسار تختاره وهو نفس المسار الذي ستستخدمه عند تكوين مهمة Python الأولى عند إنشاء سير العمل.انقر فوق إضافة تكوين مرة أخرى. في
Key
مربع النص، أدخلcontribs-path
. فيValue
مربع النص، أدخل مسار DBFS حيث ستتم كتابة سجلات GitHub. يمكن أن يكون هذا أي مسار تختاره وهو نفس المسار الذي ستستخدمه عند تكوين مهمة Python الثانية عند إنشاء سير العمل.في الحقل Target ، أدخل قاعدة بيانات هدف، على سبيل المثال،
github_tables
. يؤدي تعيين قاعدة بيانات مستهدفة إلى نشر بيانات الإخراج إلى metastore وهو مطلوب لاستعلامات انتقال البيانات من الخادم التي تقوم بتحليل البيانات التي ينتجها المسار.انقر فوق حفظ.
الخطوة 4: إنشاء سير عمل لاستيعاب بيانات GitHub وتحويلها
قبل تحليل بيانات GitHub وتصورها باستخدام Databricks SQL، تحتاج إلى استيعاب البيانات وإعدادها. لإنشاء سير عمل لإكمال هذه المهام، قم بتنفيذ الخطوات التالية:
إنشاء مهمة Azure Databricks وإضافة المهمة الأولى
انتقل إلى الصفحة المقصودة ل Azure Databricks وقم بأحد الإجراءات التالية:
- في الشريط الجانبي، انقر فوق مهام سير العمل وانقر فوق .
- في الشريط الجانبي، انقر فوق جديد وحدد مهمة من القائمة.
في مربع حوار المهمة الذي يظهر في علامة التبويب المهام ، استبدل إضافة اسم لمهمتك... باسم وظيفتك، على سبيل المثال،
GitHub analysis workflow
.في اسم المهمة، أدخل اسما للمهمة، على سبيل المثال،
get_commits
.في النوع، حدد برنامج Python النصي.
في المصدر، حدد DBFS / S3.
في المسار، أدخل المسار إلى البرنامج النصي في DBFS.
في المعلمات، أدخل الوسيطات التالية للبرنامج النصي 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 المميز.
- استبدل
انقر فوق حفظ المهمة.
إضافة مهمة أخرى
انقر أسفل المهمة التي أنشأتها للتو.
في اسم المهمة، أدخل اسما للمهمة، على سبيل المثال،
get_contributors
.في النوع، حدد نوع مهمة البرنامج النصي Python.
في المصدر، حدد DBFS / S3.
في المسار، أدخل المسار إلى البرنامج النصي في DBFS.
في المعلمات، أدخل الوسيطات التالية للبرنامج النصي 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 المميز.
- استبدل
انقر فوق حفظ المهمة.
إضافة مهمة لتحويل البيانات
- انقر أسفل المهمة التي أنشأتها للتو.
- في اسم المهمة، أدخل اسما للمهمة، على سبيل المثال،
transform_github_data
. - في النوع، حدد Delta Live Tables pipeline وأدخل اسما للمهمة.
- في Pipeline، حدد البنية الأساسية لبرنامج ربط العمليات التجارية التي تم إنشاؤها في الخطوة 3: إنشاء مسار Delta Live Tables لمعالجة بيانات GitHub.
- انقر فوق Create.
الخطوة 5: تشغيل سير عمل تحويل البيانات
انقر لتشغيل سير العمل. لعرض تفاصيل التشغيل، انقر فوق الارتباط في عمود وقت البدء للتشغيل في طريقة عرض تشغيل المهمة. انقر فوق كل مهمة لعرض تفاصيل تشغيل المهمة.
الخطوة 6: (اختياري) لعرض بيانات الإخراج بعد اكتمال تشغيل سير العمل، قم بتنفيذ الخطوات التالية:
- في طريقة عرض تفاصيل التشغيل، انقر فوق مهمة Delta Live Tables.
- في لوحة تفاصيل تشغيل المهمة، انقر فوق اسم المسار ضمن Pipeline. يتم عرض صفحة تفاصيل المسار.
commits_by_author
حدد الجدول في DAG للبنية الأساسية لبرنامج ربط العمليات التجارية.- انقر فوق اسم الجدول بجوار Metastore في لوحة commits_by_author . يتم فتح صفحة مستكشف الكتالوج.
في مستكشف الكتالوج، يمكنك عرض مخطط الجدول وعينة البيانات وتفاصيل أخرى للبيانات. اتبع نفس الخطوات لعرض بيانات github_contributors_raw
الجدول.
الخطوة 7: إزالة بيانات GitHub
في تطبيق العالم الحقيقي، قد تكون استيعاب البيانات ومعالجتها باستمرار. نظرا لأن هذا المثال يقوم بتنزيل مجموعة البيانات بأكملها ومعالجتها، يجب إزالة بيانات GitHub التي تم تنزيلها بالفعل لمنع حدوث خطأ عند إعادة تشغيل سير العمل. لإزالة البيانات التي تم تنزيلها، قم بتنفيذ الخطوات التالية:
أنشئ دفتر ملاحظات جديدا وأدخل الأوامر التالية في الخلية الأولى:
dbutils.fs.rm("<commits-path", True) dbutils.fs.rm("<contributors-path", True)
استبدل
<commits-path>
و<contributors-path>
بمسارات DBFS التي قمت بتكوينها عند إنشاء مهام Python.انقر فوق Run Cell وحددها.
يمكنك أيضا إضافة دفتر الملاحظات هذا كمهمة في سير العمل.
الخطوة 8: إنشاء استعلامات Databricks SQL
بعد تشغيل سير العمل وإنشاء الجداول المطلوبة، قم بإنشاء استعلامات لتحليل البيانات المعدة. لإنشاء أمثلة الاستعلامات والمرئيات، قم بتنفيذ الخطوات التالية:
عرض أفضل 10 مساهمين حسب الشهر
انقر فوق الأيقونة أسفل شعار Databricks في الشريط الجانبي وحدد SQL.
انقر فوق إنشاء استعلام لفتح محرر استعلام Databricks SQL.
تأكد من تعيين الكتالوج إلى hive_metastore. انقر فوق default بجوار hive_metastore وقم بتعيين قاعدة البيانات إلى القيمة Target التي قمت بتعيينها في مسار Delta Live Tables.
في علامة التبويب استعلام جديد، أدخل الاستعلام التالي:
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
انقر فوق علامة التبويب استعلام جديد وأعد تسمية الاستعلام، على سبيل المثال،
Commits by month top 10 contributors
.بشكل افتراضي، يتم عرض النتائج على شكل جدول. لتغيير كيفية تصور البيانات، على سبيل المثال، باستخدام مخطط شريطي، في لوحة النتائج، انقر فوق تحرير.
في Visualization type، حدد Bar.
في العمود X، حدد month.
في أعمدة Y، حدد count(1).
في Group by، حدد name.
انقر فوق حفظ.
عرض أفضل 20 مساهما
انقر فوق + > إنشاء استعلام جديد وتأكد من تعيين الكتالوج إلى hive_metastore. انقر فوق default بجوار hive_metastore وقم بتعيين قاعدة البيانات إلى القيمة Target التي قمت بتعيينها في مسار Delta Live Tables.
أدخل الاستعلام التالي:
SELECT login, cast(contributions AS INTEGER) FROM github_contributors_raw ORDER BY contributions DESC LIMIT 20
انقر فوق علامة التبويب استعلام جديد وأعد تسمية الاستعلام، على سبيل المثال،
Top 20 contributors
.لتغيير المرئيات من الجدول الافتراضي، في لوحة النتائج، انقر فوق تحرير وانقر فوقه.
في Visualization type، حدد Bar.
في العمود X، حدد login.
في أعمدة Y، حدد المساهمات.
انقر فوق حفظ.
عرض إجمالي التثبيتات حسب الكاتب
انقر فوق + > إنشاء استعلام جديد وتأكد من تعيين الكتالوج إلى hive_metastore. انقر فوق default بجوار hive_metastore وقم بتعيين قاعدة البيانات إلى القيمة Target التي قمت بتعيينها في مسار Delta Live Tables.
أدخل الاستعلام التالي:
SELECT name, count(1) commits FROM commits_by_author GROUP BY name ORDER BY commits DESC LIMIT 10
انقر فوق علامة التبويب استعلام جديد وأعد تسمية الاستعلام، على سبيل المثال،
Total commits by author
.لتغيير المرئيات من الجدول الافتراضي، في لوحة النتائج، انقر فوق تحرير وانقر فوقه.
في Visualization type، حدد Bar.
في العمود X، حدد name.
في أعمدة Y، حدد commits.
انقر فوق حفظ.
الخطوة 9: إنشاء لوحة معلومات
- في الشريط الجانبي، انقر فوق لوحات المعلومات
- انقر فوق إنشاء لوحة معلومات.
- أدخل اسما للوحة المعلومات، على سبيل المثال،
GitHub analysis
. - لكل استعلام وتصور تم إنشاؤه في الخطوة 8: إنشاء استعلامات Databricks SQL، انقر فوق إضافة > مرئيات وحدد كل مرئيات.
الخطوة 10: إضافة مهام SQL إلى سير العمل
لإضافة مهام الاستعلام الجديدة إلى سير العمل الذي أنشأته في إنشاء مهمة Azure Databricks وإضافة المهمة الأولى، لكل استعلام قمت بإنشائه في الخطوة 8: إنشاء استعلامات Databricks SQL:
- انقر فوق مهام سير العمل في الشريط الجانبي.
- في العمود الاسم ، انقر فوق اسم المهمة.
- انقر فوق علامة التبويب المهام.
- انقر أسفل المهمة الأخيرة.
- أدخل اسما للمهمة، وفي النوع حدد SQL، وفي مهمة SQL حدد استعلام.
- حدد الاستعلام في استعلام SQL.
- في مستودع SQL، حدد مستودع SQL بلا خادم أو مستودع SQL pro لتشغيل المهمة.
- انقر فوق Create.
الخطوة 11: إضافة مهمة لوحة معلومات
- انقر أسفل المهمة الأخيرة.
- أدخل اسما للمهمة، في النوع، حدد SQL، وفي مهمة SQL حدد لوحة المعلومات القديمة.
- حدد لوحة المعلومات التي تم إنشاؤها في الخطوة 9: إنشاء لوحة معلومات.
- في مستودع SQL، حدد مستودع SQL بلا خادم أو مستودع SQL pro لتشغيل المهمة.
- انقر فوق Create.
الخطوة 12: تشغيل سير العمل الكامل
لتشغيل سير العمل، انقر فوق . لعرض تفاصيل التشغيل، انقر فوق الارتباط في عمود وقت البدء للتشغيل في طريقة عرض تشغيل المهمة.
الخطوة 13: عرض النتائج
لعرض النتائج عند اكتمال التشغيل، انقر فوق مهمة لوحة المعلومات النهائية وانقر فوق اسم لوحة المعلومات ضمن لوحة معلومات SQL في اللوحة اليمنى.