تحسين تخطيط ملف البيانات

يعمل 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 المرفقة.