دمج في

ينطبق على:check marked yes Databricks SQL check marked yes Databricks Runtime

دمج مجموعة من التحديثات والإدراجات والحذف استنادا إلى جدول مصدر في جدول دلتا الهدف.

يتم اعتماد هذه العبارة فقط لجداول Delta Lake.

تحتوي هذه الصفحة على تفاصيل لاستخدام بناء الجملة الصحيح مع MERGE الأمر . راجع Upsert في جدول Delta Lake باستخدام الدمج للحصول على مزيد من الإرشادات حول كيفية استخدام MERGE العمليات لإدارة بياناتك.

بناء الجملة

MERGE INTO target_table_name [target_alias]
   USING source_table_reference [source_alias]
   ON merge_condition
   { WHEN MATCHED [ AND matched_condition ] THEN matched_action |
     WHEN NOT MATCHED [BY TARGET] [ AND not_matched_condition ] THEN not_matched_action |
     WHEN NOT MATCHED BY SOURCE [ AND not_matched_by_source_condition ] THEN not_matched_by_source_action } [...]

matched_action
 { DELETE |
   UPDATE SET * |
   UPDATE SET { column = { expr | DEFAULT } } [, ...] }

not_matched_action
 { INSERT * |
   INSERT (column1 [, ...] ) VALUES ( expr | DEFAULT ] [, ...] )

not_matched_by_source_action
 { DELETE |
   UPDATE SET { column = { expr | DEFAULT } } [, ...] }

المعلمات

  • target_table_name

    اسم جدول يحدد الجدول الذي يتم تعديله. يجب أن يكون الجدول المشار إليه جدول Delta.

    يجب ألا يكون الجدول جدولا خارجيا.

  • target_alias

    اسم مستعارللجدول الهدف. يجب ألا يتضمن الاسم المستعار قائمة أعمدة.

  • source_table_reference

    اسم جدول يحدد الجدول المصدر المراد دمجه في الجدول الهدف.

  • source_alias

    اسم مستعار للجدول المصدر. يجب ألا يتضمن الاسم المستعار قائمة أعمدة.

  • تشغيل merge_condition

    كيفية دمج الصفوف من علاقة مع صفوف علاقة أخرى. تعبير بنوع إرجاع منطقي.

  • WHEN MATCHED [ AND matched_condition]

    WHEN MATCHED يتم تنفيذ العبارات عندما يتطابق صف مصدر مع صف جدول هدف استنادا merge_condition إلى و اختياري match_condition.

  • matched_action

    • DELETE

      حذف صف الجدول الهدف المطابق.

      يسمح بمطابقات متعددة عند حذف التطابقات دون شروط. الحذف غير المشروط ليس غامضا، حتى إذا كانت هناك تطابقات متعددة.

    • UPDATE

      التحديثات صف الجدول الهدف المطابق.

      لتحديث جميع أعمدة جدول Delta الهدف بالأعمدة المقابلة لمجموعة البيانات المصدر، استخدم UPDATE SET *. وهذا يعادل UPDATE SET col1 = source.col1 [, col2 = source.col2 ...] لكافة أعمدة جدول Delta الهدف. لذلك، يفترض هذا الإجراء أن الجدول المصدر يحتوي على نفس الأعمدة الموجودة في الجدول الهدف، وإلا سيطرح الاستعلام خطأ تحليل.

      إشعار

      يتغير هذا السلوك عند تمكين ترحيل المخطط التلقائي. راجع تطور المخطط التلقائي لدمج Delta Lake للحصول على التفاصيل.

      ينطبق على:check marked yes Databricks SQL SQL warehouse الإصدار 2022.35 أو أعلى check marked yes Databricks Runtime 11.2 وما فوق

      يمكنك تحديد DEFAULT ك expr لتحديث العمود بشكل صريح إلى قيمته الافتراضية.

    إذا كانت هناك عبارات متعددة WHEN MATCHED ، فسيتم تقييمها بالترتيب المحدد. يجب أن تحتوي كل WHEN MATCHED عبارة، باستثناء العبارة الأخيرة، على matched_condition. وإلا، يقوم الاستعلام بإرجاع خطأ NON_LAST_MATCHED_CLAUSE_OMIT_CONDITION .

    إذا لم يتم تقييم أي من WHEN MATCHED الشروط إلى true لزوج صف المصدر والهدف الذي يطابق merge_condition، يتم ترك الصف الهدف دون تغيير.

  • WHEN NOT MATCHED [BY TARGET] [ AND not_matched_condition]

    WHEN NOT MATCHED تقوم العبارات بإدراج صف عندما لا يتطابق صف المصدر مع أي صف هدف استنادا merge_condition إلى و اختياري not_matched_condition.

    ينطبق على:check marked yes Databricks SQL check marked yes Databricks Runtime 12.1 وما فوق

    WHEN NOT MATCHED BY TARGET يمكن استخدامها ك اسم مستعار ل WHEN NOT MATCHED.

    not_matched_condition يجب أن يكون تعبيرا منطقيا.

    • INSERT *

      إدراج كافة أعمدة جدول Delta الهدف مع الأعمدة المقابلة لمجموعة البيانات المصدر. وهذا يعادل INSERT (col1 [, col2 ...]) VALUES (source.col1 [, source.col2 ...]) لكافة أعمدة جدول Delta الهدف. يتطلب هذا الإجراء أن يحتوي الجدول المصدر على نفس الأعمدة الموجودة في الجدول الهدف.

      إشعار

      يتغير هذا السلوك عند تمكين ترحيل المخطط التلقائي. راجع تطور المخطط التلقائي لدمج Delta Lake للحصول على التفاصيل.

    • INSERT ( ... ) VALUES ( ... )

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

      ينطبق على:check marked yes Databricks SQL SQL warehouse الإصدار 2022.35 أو أعلى check marked yes Databricks Runtime 11.2 وما فوق

      يمكنك تحديد DEFAULT كتعبير لإدراج العمود الافتراضي للعمود الهدف بشكل صريح.

    إذا كانت هناك عبارات متعددة WHEN NOT MATCHED ، فسيتم تقييمها بالترتيب المحدد. يجب أن تحتوي not_matched_conditionجميع WHEN NOT MATCHED العبارات، باستثناء العبارة الأخيرة، على s. وإلا، يقوم الاستعلام بإرجاع خطأ NON_LAST_NOT_MATCHED_CLAUSE_OMIT_CONDITION .

  • WHEN NOT MATCHED BY SOURCE [ AND not_matched_by_source_condition]

    ينطبق على:check marked yes Databricks SQL check marked yes Databricks Runtime 12.1 وما فوق

    WHEN NOT MATCHED BY SOURCE يتم تنفيذ العبارات عندما لا يتطابق الصف الهدف مع أي صفوف في الجدول المصدر استنادا merge_condition إلى ويتم تقييم الاختياري not_match_by_source_condition إلى صحيح.

    not_matched_by_source_condition يجب أن يكون تعبيرا منطقيا يشير فقط إلى الأعمدة من الجدول الهدف.

  • not_matched_by_source_action

    • DELETE

      حذف صف الجدول الهدف.

    • UPDATE

      التحديثات صف الجدول الهدف. expr قد يشير فقط إلى الأعمدة من الجدول الهدف، وإلا سيطرح الاستعلام خطأ تحليل.

      ينطبق على:check marked yes Databricks SQL SQL warehouse الإصدار 2022.35 أو أعلى check marked yes Databricks Runtime 11.2 وما فوق

      يمكنك تحديد DEFAULT ك expr لتحديث العمود بشكل صريح إلى قيمته الافتراضية.

    هام

    يمكن أن تؤدي إضافة عبارة WHEN NOT MATCHED BY SOURCE لتحديث الصفوف الهدف أو حذفها عند merge_condition تقييم إلى خطأ إلى تعديل عدد كبير من الصفوف الهدف. للحصول على أفضل أداء، قم بتطبيق not_matched_by_source_conditions للحد من عدد الصفوف المستهدفة التي تم تحديثها أو حذفها.

    إذا كان هناك عدة WHEN NOT MATCHED BY SOURCE clauses، فسيتم تقييمها بالترتيب المحدد. يجب أن تحتوي كل WHEN NOT MATCHED BY SOURCE عبارة، باستثناء العبارة الأخيرة، على not_matched_by_source_condition. وإلا، يقوم الاستعلام بإرجاع خطأ NON_LAST_NOT_MATCHED_BY_SOURCE_CLAUSE_OMIT_CONDITION .

    إذا لم يتم تقييم أي من WHEN NOT MATCHED BY SOURCE الشروط إلى true لصف هدف لا يتطابق مع أي صفوف في الجدول المصدر استنادا merge_conditionإلى ، يتم ترك الصف الهدف دون تغيير.

هام

MERGE يمكن أن تفشل العملية مع خطأ DELTA_MULTIPLE_SOURCE_ROW_MATCHING_TARGET_ROW_IN_MERGE إذا تطابقت صفوف متعددة من مجموعة البيانات المصدر وحاولت تحديث نفس صفوف جدول Delta الهدف. وفقا لدلالات SQL للدمج، فإن عملية التحديث هذه غامضة لأنه من غير الواضح أي صف مصدر يجب استخدامه لتحديث الصف الهدف المطابق. يمكنك معالجة الجدول المصدر مسبقا لإزالة إمكانية وجود تطابقات متعددة. راجع مثال Change data capture - فإنه يقوم بالمعالجة المسبقة لمجموعة بيانات التغيير (أي مجموعة بيانات المصدر) للاحتفاظ فقط بأحدث تغيير لكل مفتاح قبل تطبيق هذا التغيير في جدول Delta الهدف.

الأمثلة

يمكنك استخدام MERGE INTO للعمليات المعقدة مثل إلغاء تكرار البيانات، رفع بيانات التغيير، تطبيق عمليات SCD من النوع 2، وما إلى ذلك. راجع Upsert في جدول Delta Lake باستخدام الدمج للحصول على بعض الأمثلة.

WHEN MATCHED

-- Delete all target rows that have a match in the source table.
> MERGE INTO target USING source
  ON target.key = source.key
  WHEN MATCHED THEN DELETE

-- Conditionally update target rows that have a match in the source table using the source value.
> MERGE INTO target USING source
  ON target.key = source.key
  WHEN MATCHED AND target.updated_at < source.updated_at THEN UPDATE SET *

-- Multiple MATCHED clauses conditionally deleting matched target rows and updating two columns for all other matched rows.
> MERGE INTO target USING source
  ON target.key = source.key
  WHEN MATCHED AND target.marked_for_deletion THEN DELETE
  WHEN MATCHED THEN UPDATE SET target.updated_at = source.updated_at, target.value = DEFAULT

WHEN NOT MATCHED [BY TARGET]

-- Insert all rows from the source that are not already in the target table.
> MERGE INTO target USING source
  ON target.key = source.key
  WHEN NOT MATCHED THEN INSERT *

-- Conditionally insert new rows in the target table using unmatched rows from the source table.
> MERGE INTO target USING source
  ON target.key = source.key
  WHEN NOT MATCHED BY TARGET AND source.created_at > now() - INTERVAL “1” DAY THEN INSERT (created_at, value) VALUES (source.created_at, DEFAULT)

WHEN NOT MATCHED BY SOURCE

-- Delete all target rows that have no matches in the source table.
> MERGE INTO target USING source
  ON target.key = source.key
  WHEN NOT MATCHED BY SOURCE THEN DELETE

-- Multiple NOT MATCHED BY SOURCE clauses conditionally deleting unmatched target rows and updating two columns for all other matched rows.
> MERGE INTO target USING source
  ON target.key = source.key
  WHEN NOT MATCHED BY SOURCE AND target.marked_for_deletion THEN DELETE
  WHEN NOT MATCHED BY SOURCE THEN UPDATE SET target.value = DEFAULT