دمج في
ينطبق على: Databricks SQL 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 } } [, ...] }
المعلمات
-
اسم جدول يحدد الجدول الذي يتم تعديله. يجب أن يكون الجدول المشار إليه جدول 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 SQL warehouse الإصدار 2022.35 أو أعلى 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
.ينطبق على: Databricks SQL 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
إذا لم يكن هناك أي عمود موجود.ينطبق على: Databricks SQL SQL warehouse الإصدار 2022.35 أو أعلى 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]
ينطبق على: Databricks SQL 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
قد يشير فقط إلى الأعمدة من الجدول الهدف، وإلا سيطرح الاستعلام خطأ تحليل.ينطبق على: Databricks SQL SQL warehouse الإصدار 2022.35 أو أعلى Databricks Runtime 11.2 وما فوق
يمكنك تحديد
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 إذا تطابقت صفوف متعددة من مجموعة البيانات المصدر وحاولت تحديث نفس صفوف جدول 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