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

هام

يتوفر تكوين أنظمة المجموعات السائلة Delta Lake في المعاينة العامة في Databricks Runtime 13.3 وما فوق. يوجد بعض الدعم للمجموعات السائلة في Databricks Runtime 12.2 LTS وما فوق. راجع التوافق للجداول ذات التجميع السائل.

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

تحذير

Databricks Runtime 13.3 LTS وما فوق مطلوب لإنشاء جداول أو كتابتها أو OPTIMIZE Delta مع تمكين التجميع السائل.

إشعار

تدعم الجداول مع تمكين تكوين أنظمة المجموعات السائلة التزامن على مستوى الصف في 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؟.

في Databricks Runtime 13.3 LTS وما فوق، يمكنك تمكين التجميع السائل على جدول 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 باختيار مفاتيح التجميع استنادا إلى عوامل تصفية الاستعلام شائعة الاستخدام. يمكن تعريف مفاتيح التجميع بأي ترتيب. إذا كان هناك عمودان مرتبطان، فستحتاج فقط إلى إضافة أحدهما كمفتاح تجميع.

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

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

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

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

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

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

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

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

إشعار

التجميع عند الكتابة هو تطبيق أفضل جهد، ولا يتم تطبيقه في الحالات التالية:

  • إذا تجاوزت عملية الكتابة 512 غيغابايت من البيانات.
  • SELECT إذا كان الاستعلام الفرعي يحتوي على تحويل أو تصفية أو صلة.
  • إذا لم تكن الأعمدة المتوقعة مماثلة للجدول المصدر.

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

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

لتشغيل التجميع، يجب استخدام 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 باستخدام Databricks Runtime 13.3 LTS أو أعلى لجميع أحمال العمل التي تقرأ أو تكتب من الجداول مع تمكين التجميع السائل.

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

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

القيود

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

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