تحسين تخطيط ملف البيانات
يعمل OPTIMIZE
التحسين التنبؤي تلقائيا على الجداول المدارة في كتالوج Unity. توصي Databricks بتمكين التحسين التنبؤي لجميع الجداول المدارة في كتالوج Unity لتبسيط صيانة البيانات وتقليل تكاليف التخزين. راجع التحسين التنبؤي للجداول المدارة لكتالوج Unity.
يعيد OPTIMIZE
الأمر كتابة ملفات البيانات لتحسين تخطيط البيانات لجداول Delta. بالنسبة للجداول التي تم تمكين تكوين أنظمة المجموعات السائلة فيها، OPTIMIZE
يعيد كتابة ملفات البيانات لتجميع البيانات بواسطة مفاتيح التجميع السائلة. بالنسبة للجداول ذات الأقسام المعرفة، يتم تنفيذ ضغط الملفات وتخطيط البيانات داخل الأقسام.
يمكن أن تتضمن الجداول التي لا تحتوي على تكوين أنظمة مجموعات سائلة ZORDER BY
جملة اختياريا لتحسين تجميع البيانات عند إعادة الكتابة. توصي Databricks باستخدام التجميع السائل بدلا من الأقسام أو ZORDER
أو نهج تخطيط البيانات الأخرى.
راجع تحسين.
أمثلة على بناء الجملة
يمكنك تشغيل الضغط عن طريق تشغيل OPTIMIZE
الأمر :
SQL
OPTIMIZE table_name
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
إذا كان لديك كمية كبيرة من البيانات وتريد فقط تحسين مجموعة فرعية منها، يمكنك تحديد دالة تقييم قسم اختيارية باستخدام WHERE
:
SQL
OPTIMIZE table_name WHERE date >= '2022-11-18'
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
إشعار
- يعد تحسين حزم الخانات غير فعال، ما يعني أنه إذا تم تشغيله مرتين على نفس مجموعة البيانات، فلن يكون للتشغيل الثاني أي تأثير.
- تهدف حزمة الخانات إلى إنتاج ملفات بيانات متوازنة بالتساوي فيما يتعلق بحجمها على القرص، ولكن ليس بالضرورة عدد المجموعات لكل ملف. ومع ذلك، غالبا ما يرتبط المقياسان ببعضهما البعض.
- تتوفر واجهات برمجة تطبيقات Python وSc scala لتنفيذ
OPTIMIZE
العملية من Databricks Runtime 11.3 LTS وما فوق.
يستخدم قراء جداول Delta عزل اللقطة، ما يعني أنه لا تتم مقاطعتها عند OPTIMIZE
إزالة الملفات غير الضرورية من سجل المعاملات. OPTIMIZE
لا يقوم بإجراء تغييرات متعلقة بالبيانات على الجدول، لذا فإن القراءة قبل وبعد OPTIMIZE
لها نفس النتائج. OPTIMIZE
لا يؤثر التنفيذ على جدول مصدر دفق على أي تدفقات حالية أو مستقبلية تتعامل مع هذا الجدول كمصدر. OPTIMIZE
ترجع إحصائيات الملفات (الحد الأدنى والحد الأقصى والإجمالي وما إلى ذلك) للملفات التي تمت إزالتها والملفات المضافة بواسطة العملية. يحتوي تحسين الإحصائيات أيضا على إحصائيات Z-Ordering وعدد الدفعات والأقسام المحسنة.
يمكنك أيضا ضغط الملفات الصغيرة تلقائيا باستخدام الضغط التلقائي. راجع الضغط التلقائي ل Delta Lake على Azure Databricks.
كم مرة يجب تشغيل OPTIMIZE
؟
تمكين التحسين التنبؤي للجداول المدارة في كتالوج Unity للتأكد من أن OPTIMIZE
يتم تشغيله تلقائيا عندما يكون فعالا من حيث التكلفة.
عند اختيار عدد مرات التشغيل OPTIMIZE
، هناك مفاضلة بين الأداء والتكلفة. لتحسين أداء استعلام المستخدم النهائي، قم بالتشغيل OPTIMIZE
في كثير من الأحيان. سيؤدي ذلك إلى تكبد تكلفة أعلى بسبب زيادة استخدام الموارد. لتحسين التكلفة، قم بتشغيلها بشكل أقل.
توصي Databricks بأن تبدأ بالتشغيل OPTIMIZE
على أساس يومي، ثم ضبط التردد لموازنة مفاضلات التكلفة والأداء.
ما هو أفضل نوع مثيل لتشغيله OPTIMIZE
(حزمة الحاوية وZ-Ordering)؟
كلتا العمليتين هي عمليات مكثفة لوحدة المعالجة المركزية تقوم بكميات كبيرة من فك ترميز باركيه وترميزه.
توصي Databricks بحساب أنواع المثيلات المحسنة . OPTIMIZE
يستفيد أيضا من أقراص SSD المرفقة.