استخدام التجميع السائل لجداول دلتا

يحل تكوين أنظمة المجموعات السائلة في Delta Lake محل تقسيم الجدول وتبسيط ZORDER قرارات تخطيط البيانات وتحسين أداء الاستعلام. يوفر تكوين أنظمة المجموعات السائلة مرونة لإعادة تعريف مفاتيح التجميع دون إعادة كتابة البيانات الموجودة، ما يسمح بتطور تخطيط البيانات جنبا إلى جنب مع الاحتياجات التحليلية بمرور الوقت.

هام

توصي Databricks باستخدام Databricks Runtime 15.2 وما فوق لجميع الجداول مع تمكين التجميع السائل. يتوفر دعم المعاينة العامة مع القيود في Databricks Runtime 13.3 LTS وما فوق.

إشعار

تدعم الجداول مع تمكين تكوين أنظمة المجموعات السائلة التزامن على مستوى الصف في Databricks Runtime 13.3 LTS وما فوق. يتوفر التزامن على مستوى الصف بشكل عام في Databricks Runtime 14.2 وما فوق لجميع الجداول مع تمكين متجهات الحذف. راجع مستويات العزل وتعارضات الكتابة على Azure Databricks.

ما المقصود بالتكتل السائل المستخدم؟

توصي Databricks بالتجمع السائل لجميع جداول Delta الجديدة. فيما يلي أمثلة على السيناريوهات التي تستفيد من التجميع:

  • غالبا ما تتم تصفية الجداول حسب أعمدة العلاقة الأساسية العالية.
  • جداول ذات انحراف كبير في توزيع البيانات.
  • الجداول التي تنمو بسرعة وتتطلب جهدا في الصيانة والضبط.
  • الجداول ذات متطلبات الكتابة المتزامنة.
  • الجداول ذات أنماط الوصول التي تتغير بمرور الوقت.
  • الجداول حيث يمكن أن يترك مفتاح القسم النموذجي الجدول مع أقسام كثيرة جدا أو قليلة جدا.

تمكين تكوين أنظمة المجموعات السائلة

يمكنك تمكين التجميع السائل على جدول موجود أو أثناء إنشاء الجدول. لا يتوافق التجميع مع التقسيم أو ZORDER، ويتطلب استخدام Azure Databricks لإدارة جميع عمليات التخطيط والتحسين للبيانات الموجودة في الجدول. بعد تمكين تكوين أنظمة المجموعات السائلة، قم بتشغيل OPTIMIZE المهام كالمعتاد إلى بيانات نظام المجموعة بشكل متزايد. راجع كيفية تشغيل التجميع.

لتمكين تكوين أنظمة المجموعات السائلة، أضف العبارة CLUSTER BY إلى عبارة إنشاء جدول، كما في الأمثلة أدناه:

إشعار

في Databricks Runtime 14.2 وما فوق، يمكنك استخدام واجهات برمجة تطبيقات DataFrame وDataTable API في Python أو Scala لتمكين التجميع السائل.

SQL

-- Create an empty table
CREATE TABLE table1(col0 int, col1 string) USING DELTA CLUSTER BY (col0);

-- Using a CTAS statement
CREATE EXTERNAL TABLE table2 CLUSTER BY (col0)  -- specify clustering after table name, not in subquery
LOCATION 'table_location'
AS SELECT * FROM table1;

-- Using a LIKE statement to copy configurations
CREATE TABLE table3 LIKE table1;

Python

# Create an empty table
(DeltaTable.create()
  .tableName("table1")
  .addColumn("col0", dataType = "INT")
  .addColumn("col1", dataType = "STRING")
  .clusterBy("col0")
  .execute())

# Using a CTAS statement
df = spark.read.table("table1")
df.write.format("delta").clusterBy("col0").saveAsTable("table2")

# CTAS using DataFrameWriterV2
df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()

Scala

// Create an empty table
DeltaTable.create()
  .tableName("table1")
  .addColumn("col0", dataType = "INT")
  .addColumn("col1", dataType = "STRING")
  .clusterBy("col0")
  .execute()

// Using a CTAS statement
val df = spark.read.table("table1")
df.write.format("delta").clusterBy("col0").saveAsTable("table2")

// CTAS using DataFrameWriterV2
val df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()

تحذير

تحتوي الجداول التي تم إنشاؤها مع تمكين تكوين أنظمة المجموعات السائلة على العديد من ميزات جدول Delta الممكنة عند الإنشاء واستخدام الإصدار 7 من كاتب دلتا والإصدار 3 من القارئ. يمكنك تجاوز تمكين بعض هذه الميزات. راجع تجاوز تمكين الميزة الافتراضية (اختياري) .

لا يمكن تخفيض إصدارات بروتوكول الجدول، والجداول التي تم تمكين تكوين أنظمة المجموعات بها غير قابلة للقراءة من قبل عملاء Delta Lake الذين لا يدعمون جميع ميزات جدول بروتوكول قارئ دلتا الممكنة. راجع كيف تدير Azure Databricks توافق ميزة Delta Lake؟.

يمكنك تمكين التجميع السائل على جدول Delta غير تقسيم موجود باستخدام بناء الجملة التالي:

ALTER TABLE <table_name>
CLUSTER BY (<clustering_columns>)

تجاوز تمكين الميزة الافتراضية (اختياري)

يمكنك تجاوز السلوك الافتراضي الذي يمكن ميزات جدول Delta أثناء تمكين تكوين أنظمة المجموعات السائلة. يمنع هذا بروتوكولات القارئ والكاتب المقترنة بميزات الجدول هذه من الترقية. يجب أن يكون لديك جدول موجود لإكمال الخطوات التالية:

  1. استخدم ALTER TABLE لتعيين خاصية الجدول التي تعطل ميزة واحدة أو أكثر. على سبيل المثال، لتعطيل متجهات الحذف، قم بتشغيل ما يلي:

    ALTER TABLE table_name SET TBLPROPERTIES ('delta.enableDeletionVectors' = false);
    
  2. تمكين التجميع السائل على الجدول عن طريق تشغيل ما يلي:

    ALTER TABLE <table_name>
    CLUSTER BY (<clustering_columns>)
    

يوفر الجدول التالي معلومات حول ميزات Delta التي يمكنك تجاوزها وكيفية تأثير التمكين على التوافق مع إصدارات Databricks Runtime.

ميزة دلتا توافق وقت التشغيل خاصية لتجاوز التمكين تأثير التعطيل على تكوين أنظمة المجموعات السائلة
متجهات الحذف تتطلب عمليات القراءة والكتابة Databricks Runtime 12.2 lTS وما فوق. 'delta.enableDeletionVectors' = false يتم تعطيل التزامن على مستوى الصف، مما يجعل العمليات وعمليات التجميع أكثر عرضة للتعارض. راجع تعارضات الكتابة مع التزامن على مستوى الصف.

DELETEMERGEقد تعمل الأوامر و و UPDATE بشكل أبطأ.
تعقب الصفوف تتطلب عمليات الكتابة Databricks Runtime 13.3 LTS وما فوق. يمكن قراءته من أي إصدار Databricks Runtime. 'delta.enableRowTracking' = false يتم تعطيل التزامن على مستوى الصف، مما يجعل العمليات وعمليات التجميع أكثر عرضة للتعارض. راجع تعارضات الكتابة مع التزامن على مستوى الصف.
نقاط التحقق V2 تتطلب عمليات القراءة والكتابة Databricks Runtime 13.3 LTS وما فوق. 'delta.checkpointPolicy' = 'classic' لا تأثير على سلوك تكوين أنظمة المجموعات السائلة.

اختيار مفاتيح التجميع

توصي Databricks باختيار مفاتيح التجميع استنادا إلى عوامل تصفية الاستعلام شائعة الاستخدام. يمكن تعريف مفاتيح التجميع بأي ترتيب. إذا كان هناك عمودان مرتبطان، فستحتاج فقط إلى إضافة أحدهما كمفتاح تجميع.

يمكنك تحديد ما يصل إلى 4 أعمدة كمفاتيح تجميع. يمكنك فقط تحديد الأعمدة ذات الإحصائيات التي تم جمعها لمفاتيح التجميع. بشكل افتراضي، يحتوي أول 32 عمودا في جدول Delta على إحصائيات مجمعة. راجع تحديد أعمدة إحصائيات دلتا.

يدعم نظام المجموعة أنواع البيانات التالية لمفاتيح التجميع:

  • التاريخ
  • طابع زمني
  • TimestampNTZ (يتطلب Databricks Runtime 14.3 LTS أو أعلى)
  • السلسلة‬
  • رقم صحيح
  • طويل
  • قصير
  • Float
  • مزدوج
  • عدد عشري
  • بايت

إذا كنت تقوم بتحويل جدول موجود، ففكر في التوصيات التالية:

تقنية تحسين البيانات الحالية توصية لمفاتيح التجميع
التقسيم على نمط الخلية استخدم أعمدة الأقسام كمفاتيح تجميع.
فهرسة ترتيب Z استخدم الأعمدة ZORDER BY كمفاتيح تجميع.
التقسيم على نمط الخلية وترتيب Z استخدم كلا من أعمدة الأقسام والأعمدة ZORDER BY كمفاتيح تجميع.
الأعمدة التي تم إنشاؤها لتقليل العلاقة الأساسية (على سبيل المثال، تاريخ الطابع الزمني) استخدم العمود الأصلي كمفتاح تجميع، ولا تنشئ عمودا تم إنشاؤه.

كتابة البيانات إلى جدول متفاوت المسافات

يجب استخدام عميل كاتب دلتا الذي يدعم جميع ميزات جدول بروتوكول الكتابة دلتا المستخدمة من قبل تكوين أنظمة المجموعات السائلة. في Azure Databricks، يجب استخدام Databricks Runtime 13.3 LTS وما فوق.

تتضمن العمليات التي تقوم بالكتلة عند الكتابة ما يلي:

  • INSERT INTO العمليات
  • CTASوعبارات و RTAS
  • COPY INTO من تنسيق Parquet
  • spark.write.format("delta").mode("append")

لا تؤدي عمليات كتابة الدفق المنظم أبدا إلى تشغيل التجميع عند الكتابة. يتم تطبيق قيود إضافية. راجع القيود.

يتم تشغيل التجميع عند الكتابة فقط عندما تفي البيانات في المعاملة بحد حجم. تختلف هذه الحدود حسب عدد أعمدة التجميع وهي أقل للجداول المدارة في كتالوج Unity مقارنة بجداول Delta الأخرى.

عدد أعمدة التجميع حجم الحد للجداول المدارة في كتالوج Unity حجم الحد لجداول دلتا الأخرى
1 64 ميغابايت 256 ميغابايت
2 256 ميغابايت 1 جيجابايت
3 512 ميغابايت 2 جيجابايت
4 1 جيجابايت 4 غيغابايت

نظرا لعدم تطبيق جميع العمليات للمجموعات السائلة، توصي Databricks بالتشغيل OPTIMIZE بشكل متكرر لضمان تجميع جميع البيانات بكفاءة.

كيفية تشغيل تكوين أنظمة المجموعات

يعمل التحسين التنبؤي تلقائيا على تشغيل OPTIMIZE الأوامر للجداول الممكنة. راجع التحسين التنبؤي ل Delta Lake.

لتشغيل التجميع، يجب استخدام Databricks Runtime 13.3 LTS أو أعلى. استخدم الأمر على OPTIMIZE الجدول، كما في المثال التالي:

OPTIMIZE table_name;

يعد التجميع السائل تزايديا، ما يعني أنه لا تتم إعادة كتابة البيانات إلا حسب الضرورة لاستيعاب البيانات التي تحتاج إلى تجميع. لا تتم إعادة كتابة ملفات البيانات التي تحتوي على مفاتيح تجميع لا تتطابق مع البيانات المراد تجميعها.

للحصول على أفضل أداء، توصي Databricks بجدولة المهام العادية OPTIMIZE لبيانات المجموعة. بالنسبة للجداول التي تواجه العديد من التحديثات أو الإدراجات، توصي Databricks بجدولة OPTIMIZE مهمة كل ساعة أو ساعتين. نظرا لأن التجميع السائل تزايدي، تعمل معظم OPTIMIZE المهام للجداول المجمعة بسرعة.

قراءة البيانات من جدول متفاوت المسافات

يمكنك قراءة البيانات في جدول متفاوت المسافات باستخدام أي عميل Delta Lake يدعم قراءة متجهات الحذف. للحصول على أفضل نتائج الاستعلام، قم بتضمين مفاتيح التجميع في عوامل تصفية الاستعلام، كما في المثال التالي:

SELECT * FROM table_name WHERE cluster_key_column_name = "some_value";

تغيير مفاتيح التجميع

يمكنك تغيير مفاتيح التجميع لجدول في أي وقت عن طريق تشغيل أمر ALTER TABLE ، كما في المثال التالي:

ALTER TABLE table_name CLUSTER BY (new_column1, new_column2);

عند تغيير مفاتيح التجميع، تستخدم العمليات اللاحقة OPTIMIZE وعمليات الكتابة نهج التجميع الجديد، ولكن لا تتم إعادة كتابة البيانات الموجودة.

يمكنك أيضا إيقاف تشغيل التجميع عن طريق تعيين المفاتيح إلى NONE، كما في المثال التالي:

ALTER TABLE table_name CLUSTER BY NONE;

لا يؤدي تعيين مفاتيح نظام المجموعة إلى إلى NONE إعادة كتابة البيانات التي تم تجميعها بالفعل، ولكنه يمنع العمليات المستقبلية OPTIMIZE من استخدام مفاتيح التجميع.

تعرف على كيفية تجميع الجدول

يمكنك استخدام DESCRIBE الأوامر لمشاهدة مفاتيح التجميع لجدول، كما في الأمثلة التالية:

DESCRIBE TABLE table_name;

DESCRIBE DETAIL table_name;

توافق الجداول مع تكوين أنظمة المجموعات السائلة

تستخدم الجداول التي تم إنشاؤها باستخدام التجميع السائل في Databricks Runtime 14.1 وما فوق نقاط التحقق v2 بشكل افتراضي. يمكنك قراءة الجداول وكتابتها باستخدام نقاط التحقق v2 في Databricks Runtime 13.3 LTS وما فوق.

يمكنك تعطيل نقاط التحقق v2 وبروتوكولات الجدول الرجوع إلى إصدار أعلى لقراءة الجداول مع التجميع السائل في Databricks Runtime 12.2 LTS وما فوق. راجع ميزات جدول Drop Delta.

القيود

توجد القيود التالية:

  • في Databricks Runtime 15.1 وما دونه، لا يدعم التجميع عند الكتابة استعلامات المصدر التي تتضمن عوامل التصفية أو الصلات أو التجميعات.
  • لا تدعم أحمال عمل الدفق المنظم التجميع عند الكتابة.
  • لا يمكنك إنشاء جدول مع تمكين التجميع السائل باستخدام كتابة Structured Streaming. يمكنك استخدام Structured Streaming لكتابة البيانات إلى جدول موجود مع تمكين التجميع السائل.
  • لا تدعم "مشاركة دلتا" مشاركة الجداول مع تمكين تكوين أنظمة المجموعات السائلة.