ضغط ملفات البيانات مع التحسين على 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 المرفقة.