تكوين Delta Lake للتحكم في حجم ملف البيانات
إشعار
لا تنطبق التوصيات الواردة في هذه المقالة على الجداول المدارة في كتالوج Unity. توصي Databricks باستخدام الجداول المدارة في كتالوج Unity مع الإعدادات الافتراضية لجميع جداول Delta الجديدة.
في Databricks Runtime 13.3 والإصدارات الأحدث، توصي Databricks باستخدام التجميع لتخطيط جدول Delta. راجع استخدام التجميع السائل لجداول Delta.
توصي Databricks باستخدام التحسين التنبؤي للتشغيل OPTIMIZE
التلقائي وجداول VACUUM
Delta. راجع التحسين التنبؤي للجداول المدارة لكتالوج Unity.
في Databricks Runtime 10.4 LTS وما فوق، يتم تمكين الضغط التلقائي والكتابة المحسنة دائما للعمليات MERGE
UPDATE
و وDELETE
. لا يمكنك تعطيل هذه الوظيفة.
يوفر Delta Lake خيارات لتكوين حجم الملف الهدف يدويا أو تلقائيا لعمليات الكتابة والعمليات OPTIMIZE
. يقوم Azure Databricks تلقائيا بضبط العديد من هذه الإعدادات، وتمكين الميزات التي تحسن أداء الجدول تلقائيا من خلال السعي إلى الملفات ذات الحجم الصحيح.
بالنسبة للجداول المدارة لكتالوج Unity، يقوم Databricks بضبط معظم هذه التكوينات تلقائيا إذا كنت تستخدم مستودع SQL أو Databricks Runtime 11.3 LTS أو أعلى.
إذا كنت تقوم بترقية حمل عمل من Databricks Runtime 10.4 LTS أو أدناه، فشاهد الترقية إلى الضغط التلقائي في الخلفية.
متى يتم التشغيل OPTIMIZE
يؤدي الضغط التلقائي والكتابة المحسنة إلى تقليل مشاكل الملفات الصغيرة، ولكنها ليست بديلا كاملا ل OPTIMIZE
. خاصة بالنسبة للجداول الأكبر من 1 تيرابايت، توصي 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
أو MERGE
UPDATE
أو أو بشكل 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 TBL 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 TBL 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.