اكتشاف القسم للجداول الخارجية
توضح هذه المقالة استراتيجية اكتشاف القسم الافتراضية لجداول Unity الخارجية وإعداد اختياري لتمكين سجل بيانات تعريف القسم الذي يجعل اكتشاف القسم متسقا مع Hive metastore.
توصي Databricks بتمكين تسجيل بيانات تعريف القسم لتحسين سرعات القراءة وأداء الاستعلام لجداول Unity الخارجية مع الأقسام.
ما هي استراتيجية اكتشاف القسم الافتراضية لكتالوج Unity؟
بشكل افتراضي، يسرد كتالوج Unity بشكل متكرر جميع الدلائل في موقع الجدول لاكتشاف الأقسام تلقائيا. بالنسبة للجداول الكبيرة التي تحتوي على العديد من دلائل الأقسام، يمكن أن يزيد هذا من زمن الانتقال للعديد من عمليات الجدول.
استخدام تسجيل بيانات تعريف القسم
في Databricks Runtime 13.3 LTS وما فوق، يمكنك تمكين تسجيل بيانات تعريف القسم اختياريا، وهي استراتيجية اكتشاف قسم للجداول الخارجية المسجلة في كتالوج Unity. يتوافق هذا السلوك مع استراتيجية اكتشاف القسم المستخدمة في Hive metastore. يؤثر هذا السلوك فقط على جداول Unity الخارجية التي تحتوي على أقسام وتستخدم Parquet أو ORC أو CSV أو JSON. توصي Databricks بتمكين السلوك الجديد لتحسين سرعات القراءة وأداء الاستعلام لهذه الجداول.
هام
توضح الجداول التي تم تمكين تسجيل بيانات تعريف القسم بها تغييرا سلوكيا لاكتشاف القسم. بدلا من فحص موقع الجدول تلقائيا للأقسام، يحترم كتالوج Unity فقط الأقسام المسجلة في بيانات تعريف القسم. راجع إضافة بيانات تعريف القسم أو إسقاطها أو إصلاحها يدويا.
سيصبح هذا السلوك الافتراضي في إصدار وقت تشغيل Databricks المستقبلي. يمكن قراءة الجداول التي تم تمكين هذه الميزة عليها أو كتابتها فقط باستخدام Databricks Runtime 13.3 LTS وما فوق.
إشعار
يجب محاولة الاستعلام عن جدول باستخدام Databricks Runtime 12.2 LTS أو أدناه للتأكد من أنه لا يستخدم سلوك سجل القسم الجديد.
تمكين تسجيل بيانات تعريف القسم
لتمكين تسجيل بيانات تعريف القسم على جدول، يجب تمكين تكوين Spark ل SparkSession الحالي ثم إنشاء جدول خارجي. هذا الإعداد مطلوب فقط في SparkSession الذي ينشئ الجدول. بمجرد إنشاء جدول مع تمكين تسجيل بيانات تعريف القسم، فإنه يستمر في هذا الإعداد كجزء من بيانات تعريف الجدول ويستخدم الميزة في جميع أحمال العمل اللاحقة.
يوضح بناء الجملة التالي استخدام SQL لتعيين تكوين Spark في دفتر ملاحظات. يمكنك أيضا تعيين تكوينات Spark عند تكوين الحساب.
SET spark.databricks.nonDelta.partitionLog.enabled = true;
هام
يمكنك فقط قراءة وكتابة الجداول مع تمكين تسجيل بيانات تعريف القسم في Databricks Runtime 13.3 LTS وما فوق. إذا كان لديك أحمال عمل تعمل على Databricks Runtime 12.2 LTS أو أقل يجب أن تتفاعل مع الجداول، فلا تستخدم هذا الإعداد.
لا تحذف الجداول الخارجية ملفات البيانات الأساسية عند إسقاطها. توصي Databricks باستخدام CREATE OR REPLACE
بناء الجملة لترقية الجداول لاستخدام تسجيل بيانات تعريف القسم، كما في المثال التالي:
CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 'abfss://<bucket-path>/<table-directory>';
يفرض كتالوج Unity القواعد على تداخلات المسار للجداول ووحدات التخزين. لا يمكنك تسجيل جدول كتالوج Unity جديد على مجموعة من ملفات البيانات إذا كان هناك جدول موجود بالفعل في هذا الموقع.
العمل مع الجداول مع بيانات تعريف القسم
توصي Databricks باستخدام أسماء الجداول في جميع القراءات والكتابة مقابل جميع الجداول المسجلة في كتالوج Unity. بالنسبة للجداول التي تحتوي على بيانات تعريف القسم، يضمن هذا إضافة أقسام جديدة إلى سجل جدول إلى كتالوج Unity وأن الاستعلامات مقابل الجدول تقرأ جميع الأقسام المسجلة.
يمكن أن يؤدي استخدام الأنماط المستندة إلى المسار للقراءات أو الكتابة إلى تجاهل الأقسام أو عدم تسجيلها في metastore كتالوج Unity. راجع القيود.
سرد الأقسام
استخدم الأمر التالي لإظهار جميع الأقسام المسجلة في كتالوج Unity كبيانات تعريف للقسم:
SHOW PARTITIONS <table-name>
للتحقق مما إذا كان قسم واحد مسجلا في كتالوج Unity، استخدم الأمر التالي:
SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)
إضافة بيانات تعريف القسم أو إسقاطها أو إصلاحها يدويا
يتطلب كتالوج Unity تضمين جميع أقسام الجداول الخارجية داخل الدليل المسجل باستخدام LOCATION
عبارة أثناء تسجيل الجدول.
مع تمكين بيانات تعريف القسم، يتم تعطيل الاكتشاف التلقائي للأقسام في موقع الجدول. إذا كانت الأنظمة الخارجية تكتب البيانات إلى موقع الجدول أو إذا كنت تستخدم عمليات الكتابة المستندة إلى المسار لإضافة سجلات أو الكتابة فوقها في الجدول، فيجب إصلاح بيانات تعريف القسم يدويا.
يستخدم Azure Databricks التقسيم على نمط Hive لتخزين الجداول المدعومة من Parquet وORC وCSV وJSON. تحتوي أقسام نمط الخلية على أزواج قيم المفاتيح المتصلة بعلامة المساواة في دليل القسم، على سبيل المثال year=2021/month=01/
.
إذا كان الجدول يستخدم التقسيم على نمط Hive، يمكنك استخدام MSCK REPAIR
لمزامنة بيانات تعريف القسم في كتالوج Unity مع الأقسام الموجودة في موقع الجدول. توضح أمثلة بناء الجملة التالية العمليات الشائعة:
-- Add and remove parition metadata to match directories in table location
MSCK REPAIR TABLE <table_name> SYNC PARTITIONS;
-- Add partitions in the table location that are not registered as partition metadata
MSCK REPAIR TABLE <table_name> ADD PARTITIONS;
-- Drop partitions registered as partition metadata that are not in the table location
MSCK REPAIR TABLE <table_name> DROP PARTITIONS;
راجع جدول الإصلاح.
تحديد مسارات أنواع الأقسام الأخرى يدويا
إذا كان الجدول لا يستخدم التقسيم على نمط Hive، فيجب عليك تحديد مواقع الأقسام يدويا عند إضافة أقسام. يمكن أن يؤدي تحديد الأقسام يدويا أيضا إلى MSCK REPAIR
تقليل زمن الانتقال مقارنة ببناء الجملة، خاصة بالنسبة للجداول التي تحتوي على عدد كبير من الأقسام. يوضح مثال بناء الجملة التالي إضافة قسم:
ALTER TABLE <table-name>
ADD PARTITION (<partition-column-name> = <partition-column-value>)
LOCATION 'abfss://<bucket-path>/<table-directory>/<partition-directory>';
يمكنك أيضا استخدام ALTER TABLE
بناء الجملة لإسقاط مواقع الأقسام وإعادة تسميتها واستردادها وتعيينها. راجع ALTER TABLE ... القسم.
تعطيل بيانات تعريف القسم الجديدة
يتم تعطيل تكوين Spark الذي يتحكم في ما إذا كانت الجداول الجديدة تستخدم بيانات تعريف القسم بشكل افتراضي. يمكنك أيضا تعطيل هذا السلوك بشكل صريح. يستخدم بناء الجملة التالي SQL لتعطيل تكوين Spark:
SET spark.databricks.nonDelta.partitionLog.enabled = false;
يتحكم هذا فقط في ما إذا كانت الجداول التي تم إنشاؤها في SparkSession تستخدم بيانات تعريف القسم أم لا. لتعطيل بيانات تعريف القسم على جدول يستخدم السلوك، يجب إسقاط الجدول وإعادة إنشائه في SparkSession الذي لم يتم تمكين تكوين Spark فيه.
إشعار
بينما لا يمكنك القراءة أو الكتابة إلى الجداول مع تمكين بيانات تعريف القسم في Databricks Runtime 12.2 LTS أو أدناه، يمكنك تشغيل DROP
أو CREATE OR REPLACE TABLE
عبارات مقابل هذه الجداول إذا كان لديك امتيازات كافية في كتالوج Unity.
القيود
توجد القيود التالية:
- لا يمكنك القراءة أو الكتابة إلى الجداول مع تمكين بيانات تعريف القسم باستخدام Databricks Runtime 12.2 LTS أو أدناه.
- تؤدي قراءة جدول باستخدام مسار الدليل إلى إرجاع كافة الأقسام بما في ذلك أي أقسام تمت إضافتها أو إسقاطها يدويا.
- إذا قمت بإدراج سجلات أو الكتابة فوقها في جدول باستخدام مسار بدلا من اسم جدول، فلن يتم تسجيل بيانات تعريف القسم.
- تنسيق ملف Avro غير معتمد.