دمج في
ينطبق على: Databricks SQL Databricks Runtime
دمج مجموعة من التحديثات والإدراجات والحذف استنادا إلى جدول مصدر في جدول دلتا الهدف.
يتم اعتماد هذه العبارة فقط لجداول Delta Lake.
تحتوي هذه الصفحة على تفاصيل لاستخدام بناء الجملة الصحيح مع MERGE
الأمر . راجع Upsert في جدول Delta Lake باستخدام الدمج للحصول على مزيد من الإرشادات حول كيفية استخدام MERGE
العمليات لإدارة بياناتك.
بناء الجملة
MERGE [ WITH SCHEMA EVOLUTION ] 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 } } [, ...] }
المعلمات
WITH SCHEMA EVOLUTION
ينطبق على: Databricks Runtime 15.2 وما فوق
تمكين تطور المخطط التلقائي لهذه
MERGE
العملية. عند التمكين، يتم تحديث مخطط جدول Delta الهدف تلقائيا لمطابقة مخطط الجدول المصدر.-
اسم جدول يحدد الجدول الذي يتم تعديله. يجب أن يكون الجدول المشار إليه جدول Delta.
يجب ألا يكون الجدول جدولا خارجيا.
-
اسم مستعار للجدول الهدف. يجب ألا يتضمن الاسم المستعار قائمة أعمدة.
-
اسم جدول يحدد الجدول المصدر المراد دمجه في الجدول الهدف.
-
اسم مستعار للجدول المصدر. يجب ألا يتضمن الاسم المستعار قائمة أعمدة.
تشغيل 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 للحصول على التفاصيل.
ينطبق على: Databricks SQL Databricks Runtime 11.3 LTS وما فوق
يمكنك تحديد
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
.ينطبق على: Databricks SQL Databricks Runtime 12.2 LTS وما فوق
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
إذا لم يكن هناك أي عمود موجود.ينطبق على: Databricks SQL Databricks Runtime 11.3 LTS وما فوق
يمكنك تحديد
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]
ينطبق على: Databricks SQL Databricks Runtime 12.2 LTS وما فوق
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
قد يشير فقط إلى الأعمدة من الجدول الهدف، وإلا سيطرح الاستعلام خطأ تحليل.ينطبق على: Databricks SQL Databricks Runtime 11.3 LTS وما فوق
يمكنك تحديد
DEFAULT
كexpr
لتحديث العمود بشكل صريح إلى قيمته الافتراضية.
هام
يمكن أن تؤدي إضافة عبارة
WHEN NOT MATCHED BY SOURCE
لتحديث الصفوف الهدف أو حذفها عندmerge_condition
تقييم إلى خطأ إلى تعديل عدد كبير من الصفوف الهدف. للحصول على أفضل أداء، قم بتطبيقnot_matched_by_source_condition
s للحد من عدد الصفوف المستهدفة التي تم تحديثها أو حذفها.إذا كان هناك عدة
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 إذا تطابق أكثر من صف واحد في الجدول المصدر مع الصف نفسه في الجدول الهدف استنادا إلى الشروط المحددة في ON
العبارتين و WHEN MATCHED
. وفقا لدلالات SQL للدمج، هذا النوع من عملية التحديث غامض لأنه من غير الواضح صف المصدر الذي يجب استخدامه لتحديث صف الهدف المطابق. يمكنك معالجة الجدول المصدر مسبقا لإزالة إمكانية وجود تطابقات متعددة. راجع مثال التقاط بيانات التغيير. يقوم هذا المثال بالمعالجة المسبقة لمجموعة بيانات التغيير (مجموعة بيانات المصدر) للاحتفاظ فقط بأحدث تغيير لكل مفتاح قبل تطبيق هذا التغيير في جدول Delta الهدف. في Databricks Runtime 15.4 LTS وما دونه، MERGE
ضع في اعتبارك الشروط الواردة في العبارة ON
فقط قبل تقييم تطابقات متعددة.
الأمثلة
يمكنك استخدام 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
WITH SCHEMA EVOLUTION
-- Multiple MATCHED and NOT MATCHED clauses with schema evolution enabled.
> MERGE WITH SCHEMA EVOLUTION INTO target USING source
ON source.key = target.key
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *
WHEN NOT MATCHED BY SOURCE THEN DELETE