تكوين Delta Lake للتحكم في حجم ملف البيانات

يوفر Delta Lake خيارات لتكوين حجم الملف الهدف يدويا أو تلقائيا لعمليات الكتابة والعمليات OPTIMIZE . يقوم Azure Databricks تلقائيا بضبط العديد من هذه الإعدادات، وتمكين الميزات التي تحسن أداء الجدول تلقائيا من خلال السعي إلى الملفات ذات الحجم الصحيح.

إشعار

في Databricks Runtime 13.3 والإصدارات الأحدث، توصي Databricks باستخدام التجميع لتخطيط جدول Delta. راجع استخدام التجميع السائل لجداول Delta.

توصي Databricks باستخدام التحسين التنبؤي للتشغيل OPTIMIZE التلقائي وجداول VACUUM Delta. راجع التحسين التنبؤي ل Delta Lake.

في Databricks Runtime 10.4 LTS وما فوق، يتم تمكين الضغط التلقائي والكتابة المحسنة دائما للعمليات MERGEUPDATEو وDELETE. لا يمكنك تعطيل هذه الوظيفة.

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

بالنسبة للجداول المدارة لكتالوج Unity، يقوم Databricks بضبط معظم هذه التكوينات تلقائيا إذا كنت تستخدم مستودع SQL أو Databricks Runtime 11.3 LTS أو أعلى.

إذا كنت تقوم بترقية حمل عمل من Databricks Runtime 10.4 LTS أو أدناه، فشاهد الترقية إلى الضغط التلقائي في الخلفية.

متى يتم التشغيل OPTIMIZE

يؤدي الضغط التلقائي والكتابة المحسنة إلى تقليل مشاكل الملفات الصغيرة، ولكنها ليست بديلا كاملا ل OPTIMIZE. خاصة بالنسبة للجداول الأكبر من ТБ واحد، توصي Databricks بتشغيل OPTIMIZE جدول زمني لدمج الملفات بشكل أكبر. لا يتم تشغيل ZORDER Azure Databricks تلقائيا على الجداول، لذلك يجب تشغيل OPTIMIZE مع ZORDER لتمكين تخطي البيانات المحسنة. راجع تخطي البيانات ل Delta Lake.

ما هو التحسين التلقائي على Azure Databricks؟

يستخدم مصطلح التحسين التلقائي أحيانا لوصف الوظائف التي تتحكم فيها الإعدادات delta.autoOptimize.autoCompact و delta.autoOptimize.optimizeWrite. تم إيقاف هذا المصطلح لصالح وصف كل إعداد على حدة. راجع الضغط التلقائي ل Delta Lake على Azure Databricks والكتابة المحسنة ل Delta Lake على Azure Databricks.

الضغط التلقائي ل Delta Lake على Azure Databricks

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

يمكنك التحكم في حجم ملف الإخراج عن طريق تعيين تكوينspark.databricks.delta.autoCompact.maxFileSize Spark. توصي Databricks باستخدام التشنج التلقائي استنادا إلى حمل العمل أو حجم الجدول. راجع حجم ملف Autotune استنادا إلى حمل العمل وحجم ملف Autotune استنادا إلى حجم الجدول.

يتم تشغيل الضغط التلقائي فقط للأقسام أو الجداول التي تحتوي على عدد معين من الملفات الصغيرة على الأقل. يمكنك اختياريا تغيير الحد الأدنى لعدد الملفات المطلوبة لتشغيل الضغط التلقائي عن طريق تعيين spark.databricks.delta.autoCompact.minNumFiles.

يمكن تمكين الضغط التلقائي على مستوى الجدول أو جلسة العمل باستخدام الإعدادات التالية:

  • خاصية الجدول: delta.autoOptimize.autoCompact
  • إعداد SparkSession: spark.databricks.delta.autoCompact.enabled

تقبل هذه الإعدادات الخيارات التالية:

الخيارات سلوك
auto (مستحسن) Tunes target file size مع احترام وظائف autotuning الأخرى. يتطلب Databricks Runtime 10.4 LTS أو أعلى.
legacy الاسم المستعار ل true. يتطلب Databricks Runtime 10.4 LTS أو أعلى.
true استخدم 128 ميغابايت كحجم الملف الهدف. لا يوجد تغيير حجم ديناميكي.
false إيقاف تشغيل الضغط التلقائي. يمكن تعيينه على مستوى جلسة العمل لتجاوز الضغط التلقائي لكافة جداول Delta المعدلة في حمل العمل.

هام

في Databricks Runtime 9.1 LTS، عندما يقوم كتاب آخرون بتنفيذ عمليات مثل DELETEأو MERGEUPDATEأو أو بشكل OPTIMIZE متزامن، يمكن أن يتسبب الضغط التلقائي في فشل هذه المهام الأخرى مع تعارض المعاملة. هذه ليست مشكلة في Databricks Runtime 10.4 LTS وما فوق.

عمليات الكتابة المحسنة ل Delta Lake على Azure Databricks

تعمل عمليات الكتابة المحسنة على تحسين حجم الملف عند كتابة البيانات والاستفادة من القراءات اللاحقة على الجدول.

تعد عمليات الكتابة المحسنة أكثر فعالية للجداول المقسمة، لأنها تقلل من عدد الملفات الصغيرة المكتوبة في كل قسم. كتابة عدد أقل من الملفات الكبيرة أكثر كفاءة من كتابة العديد من الملفات الصغيرة، ولكن قد لا تزال ترى زيادة في زمن انتقال الكتابة لأنه يتم تبديل البيانات قبل كتابتها.

توضح الصورة التالية كيفية عمل عمليات الكتابة المحسنة:

عمليات الكتابة المحسنة

إشعار

قد يكون لديك تعليمات برمجية يتم تشغيلها coalesce(n) أو repartition(n) قبل كتابة بياناتك للتحكم في عدد الملفات المكتوبة. الكتابات المحسنة تلغي الحاجة إلى استخدام هذا النمط.

يتم تمكين عمليات الكتابة المحسنة بشكل افتراضي للعمليات التالية في Databricks Runtime 9.1 LTS وما فوق:

  • MERGE
  • UPDATE مع الاستعلامات الفرعية
  • DELETE مع الاستعلامات الفرعية

يتم أيضا تمكين عمليات الكتابة المحسنة للبيانات CTAS والعمليات INSERT عند استخدام مستودعات SQL. في Databricks Runtime 13.3 LTS وما فوق، قامت جميع جداول Delta المسجلة في كتالوج Unity بتحسين عمليات الكتابة الممكنة للبيانات CTAS والعمليات INSERT للجداول المقسمة.

يمكن تمكين عمليات الكتابة المحسنة على مستوى الجدول أو جلسة العمل باستخدام الإعدادات التالية:

  • إعداد الجدول: delta.autoOptimize.optimizeWrite
  • إعداد SparkSession: spark.databricks.delta.optimizeWrite.enabled

تقبل هذه الإعدادات الخيارات التالية:

الخيارات سلوك
true استخدم 128 ميغابايت كحجم الملف الهدف.
false إيقاف تشغيل عمليات الكتابة المحسنة. يمكن تعيينه على مستوى جلسة العمل لتجاوز الضغط التلقائي لكافة جداول Delta المعدلة في حمل العمل.

تعيين حجم ملف هدف

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

إشعار

عند استخدام الجداول المدارة في كتالوج Unity ومستودعات SQL أو Databricks Runtime 11.3 LTS وما فوق، تحترم targetFileSize الأوامر فقط OPTIMIZE الإعداد.

خاصية الجدول
delta.targetFileSize

النوع: الحجم بالبايت أو الوحدات الأعلى.

حجم الملف الهدف. على سبيل المثال، 104857600 (وحدات البايت) أو 100mb.

القيمة الافتراضية: بلا

بالنسبة للجداول الموجودة، يمكنك تعيين الخصائص وإلغاء تعيينها باستخدام أمر SQL ALTER TABLE SET ТБ L PROPERTIES. يمكنك أيضا تعيين هذه الخصائص تلقائيا عند إنشاء جداول جديدة باستخدام تكوينات جلسة Spark. راجع مرجع خصائص جدول Delta للحصول على التفاصيل.

حجم ملف Autotune استنادا إلى حمل العمل

توصي Databricks بتعيين خاصية delta.tuneFileSizesForRewrites الجدول إلى true لكافة الجداول التي تستهدفها العديد من MERGE عمليات DML أو، بغض النظر عن وقت تشغيل Databricks أو كتالوج Unity أو تحسينات أخرى. عند التعيين إلى true، يتم تعيين حجم الملف الهدف للجدول إلى حد أقل بكثير، مما يؤدي إلى تسريع العمليات كثيفة الكتابة.

إذا لم يتم تعيينه بشكل صريح، فإن Azure Databricks يكتشف تلقائيا ما إذا كانت 9 عمليات من أصل آخر 10 عمليات سابقة على جدول Delta عبارة MERGE عن عمليات وتعيين خاصية الجدول هذه إلى true. يجب تعيين هذه الخاصية false بشكل صريح لتجنب هذا السلوك.

خاصية الجدول
delta.tuneFileSizesForRewrites

النوع: Boolean

ما إذا كنت تريد ضبط أحجام الملفات لتحسين تخطيط البيانات.

القيمة الافتراضية: بلا

بالنسبة للجداول الموجودة، يمكنك تعيين الخصائص وإلغاء تعيينها باستخدام أمر SQL ALTER TABLE SET ТБ L PROPERTIES. يمكنك أيضا تعيين هذه الخصائص تلقائيا عند إنشاء جداول جديدة باستخدام تكوينات جلسة Spark. راجع مرجع خصائص جدول Delta للحصول على التفاصيل.

حجم ملف Autotune استنادا إلى حجم الجدول

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

يعتمد حجم الملف الهدف على الحجم الحالي لجدول Delta. بالنسبة للجداول الأصغر من 2.56 ТБ، يبلغ حجم الملف الهدف التلقائي 256 ميغابايت. بالنسبة للجداول التي يتراوح حجمها بين 2.56 ТБ و10 ТБ، سيزداد الحجم المستهدف خطيا من 256 ميغابايت إلى 1 غيغابايت. بالنسبة للجداول الأكبر من 10 ТБ، يكون حجم الملف الهدف 1 غيغابايت.

إشعار

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

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

حجم الجدول حجم الملف الهدف العدد التقريبي للملفات في الجدول
10 غيغابايت 256 ميغابايت 40
1 تيرابايت 256 ميغابايت 4096
2.56 ТБ 256 ميغابايت 10240
3 تيرابايت 307 ميغابايت 12108
5 تيرابايت 512 ميغابايت 17339
7 ТБ 716 ميغابايت 20784
10 تيرابايت 1 جيجابايت 24437
20 تيرابايت 1 جيجابايت 34437
50 تيرابايت 1 جيجابايت 64437
100 تيرابايت 1 جيجابايت 114437

تقييد الصفوف المكتوبة في ملف بيانات

في بعض الأحيان، قد تواجه الجداول التي تحتوي على بيانات ضيقة خطأ حيث يتجاوز عدد الصفوف في ملف بيانات معين حدود دعم تنسيق Parquet. لتجنب هذا الخطأ، يمكنك استخدام تكوين spark.sql.files.maxRecordsPerFile جلسة عمل SQL لتحديد الحد الأقصى لعدد السجلات للكتابة إلى ملف واحد لجدول Delta Lake. لا يمثل تحديد قيمة صفرية أو قيمة سالبة أي حد.

في Databricks Runtime 11.3 LTS وما فوق، يمكنك أيضا استخدام خيار maxRecordsPerFile DataFrameWriter عند استخدام واجهات برمجة تطبيقات DataFrame للكتابة إلى جدول Delta Lake. عند maxRecordsPerFile تحديد، يتم تجاهل قيمة تكوين spark.sql.files.maxRecordsPerFile جلسة SQL.

إشعار

لا توصي Databricks باستخدام هذا الخيار ما لم يكن من الضروري تجنب الخطأ المذكور أعلاه. قد يظل هذا الإعداد ضروريا لبعض الجداول المدارة في كتالوج Unity مع بيانات ضيقة جدا.

الترقية إلى الضغط التلقائي في الخلفية

يتوفر الضغط التلقائي في الخلفية للجداول المدارة في كتالوج Unity في Databricks Runtime 11.3 LTS وما فوق. عند ترحيل حمل عمل أو جدول قديم، قم بما يلي:

  • قم بإزالة تكوين spark.databricks.delta.autoCompact.enabled Spark من إعدادات تكوين نظام المجموعة أو دفتر الملاحظات.
  • لكل جدول، قم بتشغيل ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact) لإزالة أي إعدادات ضغط تلقائي قديمة.

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