ضغط ملفات البيانات مع التحسين على Delta Lake
راجع تحسين.
يمكن ل Delta Lake على Azure Databricks تحسين سرعة قراءة الاستعلامات من جدول. إحدى الطرق لتحسين هذه السرعة هي دمج الملفات الصغيرة في ملفات أكبر.
إشعار
في Databricks Runtime 13.3 والإصدارات الأحدث، توصي Databricks باستخدام التجميع لتخطيط جدول Delta. راجع استخدام التجميع السائل لجداول Delta.
توصي Databricks باستخدام التحسين التنبؤي للتشغيل OPTIMIZE
تلقائيا لجداول Delta. راجع التحسين التنبؤي ل Delta Lake.
أمثلة على بناء الجملة
يمكنك تشغيل الضغط عن طريق تشغيل OPTIMIZE
الأمر :
SQL
OPTIMIZE delta.`/data/events`
Python
from delta.tables import *
deltaTable = DeltaTable.forPath(spark, "/data/events")
deltaTable.optimize().executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forPath(spark, "/data/events")
deltaTable.optimize().executeCompaction()
أو، بالتناوب:
SQL
OPTIMIZE events
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().executeCompaction()
إذا كان لديك كمية كبيرة من البيانات وتريد فقط تحسين مجموعة فرعية منها، يمكنك تحديد دالة تقييم قسم اختيارية باستخدام WHERE
:
SQL
OPTIMIZE events WHERE date >= '2022-11-18'
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "events")
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
؟
عند اختيار عدد مرات التشغيل OPTIMIZE
، هناك مفاضلة بين الأداء والتكلفة. لتحسين أداء استعلام المستخدم النهائي، قم بالتشغيل OPTIMIZE
في كثير من الأحيان. سيؤدي ذلك إلى تكبد تكلفة أعلى بسبب زيادة استخدام الموارد. لتحسين التكلفة، قم بتشغيلها بشكل أقل.
توصي Databricks بأن تبدأ بالتشغيل OPTIMIZE
على أساس يومي، ثم ضبط التردد لموازنة مفاضلات التكلفة والأداء.
ما هو أفضل نوع مثيل لتشغيله OPTIMIZE
(حزمة الحاوية وZ-Ordering)؟
كلتا العمليتين هي عمليات مكثفة لوحدة المعالجة المركزية تقوم بكميات كبيرة من فك ترميز باركيه وترميزه.
توصي Databricks بحساب أنواع المثيلات المحسنة . OPTIMIZE
يستفيد أيضا من أقراص SSD المرفقة.