اقرأ باللغة الإنجليزية

مشاركة عبر


بيانات الاستعلام

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

يمكنك الاستعلام عن البيانات بشكل تفاعلي باستخدام:

  • دفاتر الملاحظات
  • محرر SQL
  • محرر الملفات
  • لوحات المعلومات

يمكنك أيضا تشغيل الاستعلامات كجزء من مسارات أو مهام Delta Live Tables.

للحصول على نظرة عامة على استعلامات الدفق على Azure Databricks، راجع الاستعلام عن تدفق البيانات.

ما هي البيانات التي يمكنك الاستعلام عنها باستخدام Azure Databricks؟

يدعم Azure Databricks الاستعلام عن البيانات بتنسيقات وأنظمة مؤسسة متعددة. تندرج البيانات التي تستعلم بها باستخدام Azure Databricks في إحدى فئتين واسعتين: البيانات في مستودع Databricks والبيانات الخارجية.

ما هي البيانات الموجودة في مستودع Databricks؟

يخزن Databricks Data Intelligence Platform جميع بياناتك في مستودع Databricks بشكل افتراضي.

وهذا يعني أنه عند تشغيل عبارة أساسية CREATE TABLE لإنشاء جدول جديد، قمت بإنشاء جدول lakehouse. تحتوي بيانات Lakehouse على الخصائص التالية:

  • مخزن بتنسيق Delta Lake.
  • مخزن في تخزين كائن السحابة.
  • يحكمه كتالوج Unity.

يتم تسجيل معظم بيانات lakehouse على Azure Databricks في كتالوج Unity كجداول مدارة. توفر الجداول المدارة أسهل بناء جملة وتتصرف مثل الجداول الأخرى في معظم أنظمة إدارة قواعد البيانات الارتباطية. يوصى بالجداول المدارة لمعظم حالات الاستخدام وهي مناسبة لجميع المستخدمين الذين لا يرغبون في القلق بشأن تفاصيل تنفيذ تخزين البيانات.

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

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

ملاحظة

قد لا يكون مسؤول مساحة العمل قد قام بترقية إدارة البيانات لاستخدام كتالوج Unity. لا يزال بإمكانك الحصول على العديد من فوائد Databricks lakehouse بدون كتالوج Unity، ولكن لا يتم دعم جميع الوظائف المدرجة في هذه المقالة أو في وثائق Azure Databricks.

ما هي البيانات التي تعتبر خارجية؟

يمكن اعتبار أي بيانات غير موجودة في مستودع Databricks بيانات خارجية. تتضمن بعض الأمثلة على البيانات الخارجية ما يلي:

  • الجداول الأجنبية المسجلة مع اتحاد Lakehouse.
  • الجداول في Hive metastore المدعومة من Parquet.
  • الجداول الخارجية في كتالوج Unity مدعومة من JSON.
  • بيانات CSV المخزنة في تخزين كائن السحابة.
  • قراءة البيانات المتدفقة من Kafka.

يدعم Azure Databricks تكوين الاتصالات بالعديد من مصادر البيانات. راجع الاتصال بمصادر البيانات.

بينما يمكنك استخدام كتالوج Unity للتحكم في الوصول إلى الجداول وتحديدها مقابل البيانات المخزنة في تنسيقات متعددة وأنظمة خارجية، فإن Delta Lake هو أحد متطلبات البيانات التي يجب مراعاتها في مستودع البيانات.

يوفر Delta Lake جميع ضمانات المعاملات في Azure Databricks، والتي تعتبر حاسمة للحفاظ على تكامل البيانات واتساقها. إذا كنت ترغب في معرفة المزيد حول ضمانات المعاملات على بيانات Azure Databricks وسبب أهميتها، فشاهد ما هي ضمانات ACID على Azure Databricks؟.

يقوم معظم مستخدمي Azure Databricks بالاستعلام عن مجموعة من بيانات مستودع البيانات والبيانات الخارجية. يعد الاتصال بالبيانات الخارجية دائما الخطوة الأولى لاستيعاب البيانات وخطوط أنابيب ETL التي تجلب البيانات إلى مستودع البيانات. للحصول على معلومات حول استيعاب البيانات، راجع استيعاب البيانات في مستودع Databricks.

الاستعلام عن الجداول حسب الاسم

بالنسبة لجميع البيانات المسجلة كجدول، توصي Databricks بالاستعلام باستخدام اسم الجدول.

إذا كنت تستخدم كتالوج Unity، فإن الجداول تستخدم مساحة اسم من ثلاثة مستويات بالتنسيق التالي: <catalog-name>.<schema-name>.<table-name>.

بدون كتالوج Unity، تستخدم معرفات الجدول التنسيق <schema-name>.<table-name>.

ملاحظة

يرث Azure Databricks الكثير من بناء جملة SQL الخاص به من Apache Spark، والذي لا يميز بين SCHEMA و DATABASE.

الاستعلام حسب اسم الجدول مدعوم في جميع سياقات تنفيذ Azure Databricks واللغات المدعومة.

SQL

SELECT * FROM catalog_name.schema_name.table_name

Python

spark.read.table("catalog_name.schema_name.table_name")

الاستعلام عن البيانات حسب المسار

يمكنك الاستعلام عن البيانات المنظمة وشبه المنظمة وغير المنظمة باستخدام مسارات الملفات. يتم دعم معظم الملفات على Azure Databricks بواسطة تخزين كائن السحابة. راجع العمل مع الملفات على Azure Databricks.

توصي Databricks بتكوين جميع الوصول إلى تخزين الكائنات السحابية باستخدام كتالوج Unity وتحديد وحدات التخزين لمواقع تخزين الكائنات التي يتم الاستعلام عنها مباشرة. توفر وحدات التخزين أسماء مستعارة يمكن للبشر قراءتها للمواقع والملفات في تخزين الكائنات السحابية باستخدام أسماء الكتالوجات والمخطط لمسار الملف. راجع الاتصال بمساحة تخزين الكائنات السحابية والخدمات باستخدام كتالوج Unity.

توضح الأمثلة التالية كيفية استخدام مسارات وحدة تخزين كتالوج Unity لقراءة بيانات JSON:

SQL

SELECT * FROM json.`/Volumes/catalog_name/schema_name/volume_name/path/to/data`

Python

spark.read.format("json").load("/Volumes/catalog_name/schema_name/volume_name/path/to/data")

بالنسبة للمواقع السحابية التي لم يتم تكوينها كوحدات تخزين لكتالوج Unity، يمكنك الاستعلام عن البيانات مباشرة باستخدام URIs. يجب تكوين الوصول إلى تخزين كائن السحابة للاستعلام عن البيانات باستخدام URIs. راجع تكوين الوصول إلى تخزين كائن السحابة ل Azure Databricks.

توضح الأمثلة التالية كيفية استخدام URIs للاستعلام عن بيانات JSON في Azure Data Lake Storage Gen2 وGCS وS3:

SQL

SELECT * FROM json.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/data`;

SELECT * FROM json.`gs://bucket_name/path/to/data`;

SELECT * FROM json.`s3://bucket_name/path/to/data`;

Python

spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/data")

spark.read.format("json").load("gs://bucket_name/path/to/data")

spark.read.format("json").load("s3://bucket_name/path/to/data")

الاستعلام عن البيانات باستخدام مستودعات SQL

يستخدم Azure Databricks مستودعات SQL للحوسبة في الواجهات التالية:

  • محرر SQL
  • استعلامات Databricks SQL
  • لوحات المعلومات
  • لوحات المعلومات القديمة
  • تنبيهات SQL

يمكنك اختياريا استخدام مستودعات SQL مع المنتجات التالية:

  • دفاتر ملاحظات Databricks
  • محرر ملفات Databricks
  • وظائف Databricks

عند الاستعلام عن البيانات باستخدام مستودعات SQL، يمكنك استخدام بناء جملة SQL فقط. لغات البرمجة وواجهات برمجة التطبيقات الأخرى غير مدعومة.

بالنسبة لمساحات العمل التي تم تمكينها ل Unity Catalog، تستخدم مستودعات SQL دائما كتالوج Unity لإدارة الوصول إلى مصادر البيانات.

تستهدف معظم الاستعلامات التي يتم تشغيلها على مستودعات SQL الجداول المستهدفة. يجب أن تستفيد الاستعلامات التي تستهدف ملفات البيانات من وحدات تخزين كتالوج Unity لإدارة الوصول إلى مواقع التخزين.

يمكن أن يؤدي استخدام عناوين URL مباشرة في الاستعلامات التي يتم تشغيلها على مستودعات SQL إلى أخطاء غير متوقعة.

الاستعلام عن البيانات باستخدام حساب جميع الأغراض أو حساب الوظائف

تعمل معظم الاستعلامات التي تقوم بتشغيلها من دفاتر ملاحظات Databricks ومهام سير العمل ومحرر الملفات مقابل مجموعات الحوسبة التي تم تكوينها باستخدام Databricks Runtime. يمكنك تكوين هذه المجموعات لتشغيلها بشكل تفاعلي أو نشرها كوظائف حوسبة تعمل على تشغيل مهام سير العمل. توصي Databricks باستخدام حساب الوظائف دائما لأحمال العمل غير التفاعلية.

أحمال العمل التفاعلية مقابل أحمال العمل غير التفاعلية

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

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

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

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