Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:
Databricks SQL
Databricks Runtime
Kaynak tabloyu temel alan bir dizi güncelleştirme, ekleme ve silmeyi hedef Delta tablosuyla birleştirir.
Bu deyim yalnızca Delta Lake tabloları için desteklenir.
Bu sayfa, MERGE komutuyla doğru sözdizimini kullanma ayrıntılarını içerir. Daha fazla bilgi için, Delta Lake tablosuna birleştirme kullanarak upsert yapma rehberine bakın ve verilerinizi yönetmek için MERGE işlemlerinden nasıl yararlanacağınızı öğrenin.
Sözdizimi
[ common_table_expression ]
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 * [ EXCEPT ( column [, ...] ) ] |
UPDATE SET { column = { expr | DEFAULT } } [, ...] }
not_matched_action
{ INSERT * [ EXCEPT ( column [, ...] ) ] |
INSERT (column1 [, ...] ) VALUES ( expr | DEFAULT ] [, ...] )
not_matched_by_source_action
{ DELETE |
UPDATE SET { column = { expr | DEFAULT } } [, ...] }
Parametreler
-
Yaygın tablo ifadeleri (CTE), yinelenen hesaplamaları önlemek veya karmaşık, iç içe sorguların okunabilirliğini geliştirmek için ana sorgu bloğu içinde birden çok kez yeniden kullanılabilen bir veya daha fazla adlandırılmış sorgudur.
WITH SCHEMA EVOLUTIONŞunun için geçerlidir:
Databricks Runtime 15.2 veya üzerini denetleyinBu işlemi için
MERGEetkinleştirir. Etkinleştirildiğinde hedef Delta tablosunun şeması, kaynak tablonun şemasıyla eşleşecek şekilde otomatik olarak güncelleştirilir.-
Değiştirilen tabloyu tanımlayan Tablo adı. Başvurabileceğiniz tablo bir Delta tablosu olmalıdır.
Ad bir seçenek belirtimi içermemelidir.
Tablonun yabancı bir tablo olmaması gerekir.
-
Hedef tablo için tablonun diğer adı . Diğer ad bir sütun listesi içermemelidir.
-
Tablo adı, hedef tabloyla birleştirilecek olan kaynak tabloyu tanımlar.
-
Kaynak tablo için adlı bir tablo takma adı. Diğer ad bir sütun listesi içermemelidir.
-
Bir ilişkideki satırların başka bir ilişkinin satırlarıyla nasıl birleştirildiği. Boole dönüş türüne sahip bir ifade.
WHEN MATCHED [ ANDeşleşen_koşul]WHEN MATCHEDyan tümceleri, kaynak satır,merge_conditionve isteğe bağlımatch_conditiontemelinde bir hedef tablo satırıyla eşleştiğinde yürütülür.eşleşmiş_eylem
DELETEEşleşen hedef tablo satırını siler.
Databricks, eşleşmeler koşulsuz olarak silindiğinde birden çok eşleşmeye izin verir. Birden çok eşleşme olsa bile koşulsuz silme işlemi belirsiz değildir.
UPDATEEşleşen hedef tablo satırını güncelleştirir.
Hedef Delta tablosunun tüm sütunlarını kaynak veri kümesinin ilgili sütunlarıyla güncelleştirmek için
UPDATE SET *kullanın. Bu, hedef Delta tablosunun tüm sütunları içinUPDATE SET col1 = source.col1 [, col2 = source.col2 ...]eşdeğerdir. Bu nedenle, bu eylem kaynak tablonun hedef tablodakilerle aynı sütunlara sahip olduğunu varsayar; aksi takdirde sorgu bir analiz hatası oluşturur.Şunun için geçerlidir:
Databricks SQL
Databricks Runtime 12.2 LTS veya üzeriBelirli sütunları öğesinin dışında
UPDATE SET *tutmak için yan tümcesiniEXCEPTkullanın. Dışlanan hedef sütunlar olaraknullayarlanır. Şema evrimi etkinleştirildiğinde,EXCEPTsütunlar kaynak sütunlara başvurur ve şema evriminin dışında tutulur. Ayrıntılar için bkz. Birleştirme ile sütunları dışlama .Not
Otomatik şema evrimi etkinleştirildiğinde bu davranış değişir. Ayrıntılar için bkz. Birleştirme için otomatik şema evrimi .
Şunun için geçerlidir:
Databricks SQL
Databricks Runtime 11.3 LTS veya üzeriSütunu varsayılan değerine açıkça güncelleştirmek için
DEFAULTexprolarak belirtebilirsiniz.
Birden çok
WHEN MATCHEDyan tümce varsa, bunlar belirtildikleri sırayla değerlendirilir. Son yan tümcesi dışında herWHEN MATCHEDyan tümcenin birmatched_conditionolması gerekir. Aksi takdirde, sorgu bir NON_LAST_MATCHED_CLAUSE_OMIT_CONDITION hatası döndürür.Eğer hiçbir
WHEN MATCHEDkoşulumerge_conditioneşleşen kaynak ve hedef satır çiftleri için doğru olarak değerlendirilmezse, hedef satır değişmeden bırakılır.WHEN NOT MATCHED [BY TARGET] [ ANDeşleşmeyen_koşul]WHEN NOT MATCHEDyan tümceleri, kaynak satırmerge_conditionve isteğe bağlınot_matched_conditiontemelinde herhangi bir hedef satırla eşleşmediğinde, bir satır ekler.Şunun için geçerlidir:
Databricks SQL
Databricks Runtime 12.2 LTS veya üzeriWHEN NOT MATCHED BY TARGETiçinWHEN NOT MATCHEDdiğer ad olarak kullanılabilir.not_matched_conditionbir Boole ifadesi olmalıdır.INSERT *Hedef Delta tablosunun tüm sütunlarını kaynak veri kümesinin ilgili sütunlarıyla ekler. Bu, hedef Delta tablosunun tüm sütunları için
INSERT (col1 [, col2 ...]) VALUES (source.col1 [, source.col2 ...])eşdeğerdir. Bu eylem, kaynak tablonun hedef tablodaki sütunlarla aynı sütunlara sahip olmasını gerektirir.Şunun için geçerlidir:
Databricks SQL
Databricks Runtime 12.2 LTS veya üzeriBelirli sütunları öğesinin dışında
INSERT *tutmak için yan tümcesiniEXCEPTkullanın. Dışlanan hedef sütunlar olaraknullayarlanır. Şema evrimi etkinleştirildiğinde,EXCEPTsütunlar kaynak sütunlara başvurur ve şema evriminin dışında tutulur. Ayrıntılar için bkz. Birleştirme ile sütunları dışlama .Not
Otomatik şema evrimi etkinleştirildiğinde bu davranış değişir. Ayrıntılar için bkz. Birleştirme için otomatik şema evrimi .
INSERT ( ... ) VALUES ( ... )Databricks, belirtilen sütunu ve karşılık gelen ifadeleri temel alarak yeni satırı oluşturur. Hedef tablodaki tüm sütunları belirtmeniz gerekmez. Belirtilmemiş hedef sütunlar için varsayılan sütun değeri eklenir veya yoksa
NULLeklenir.Şunun için geçerlidir:
Databricks SQL
Databricks Runtime 11.3 LTS veya üzerihedef sütun için varsayılan sütunu açıkça eklemek için
DEFAULTifade olarak belirtebilirsiniz.
Birden çok
WHEN NOT MATCHEDyan tümce varsa, bunlar belirtildikleri sırayla değerlendirilir. Sonuncu yan tümce dışında tümWHEN NOT MATCHEDyan tümcelernot_matched_conditioniçermelidir. Aksi takdirde, sorgu bir NON_LAST_NOT_MATCHED_CLAUSE_OMIT_CONDITION hatası döndürür.WHEN NOT MATCHED BY SOURCE [ ANDkaynak_koşulu_tarafından_uyuşmayan]Şunun için geçerlidir:
Databricks SQL
Databricks Runtime 12.2 LTS veya üzeriWHEN NOT MATCHED BY SOURCEyan tümceleri, hedef satırınmerge_conditiontemelinde kaynak tablodaki hiçbir satırla eşleşmemesi ve isteğe bağlınot_match_by_source_condition'nin doğru (true) olarak değerlendirilmesi durumunda yürütülür.not_matched_by_source_conditionyalnızca hedef tablodaki sütunlara başvuran bir Boole ifadesi olmalıdır.kaynak_eylemiyle_eşleşmedi
DELETEHedef tablo satırını siler.
UPDATEHedef tablo satırını güncelleştirir.
expryalnızca hedef tablodaki sütunlara başvurabilir, aksi takdirde sorgu bir çözümleme hatası oluşturur.Şunun için geçerlidir:
Databricks SQL
Databricks Runtime 11.3 LTS veya üzeriSütunu varsayılan değerine açıkça güncelleştirmek için
DEFAULTexprolarak belirtebilirsiniz.
Önemli
WHEN NOT MATCHED BY SOURCEfalse olarak değerlendirildiğinde hedef satırları güncelleştirmek veya silmek için birmerge_conditionyan tümcesi eklemek, çok sayıda hedef satırın değiştirilmesine neden olabilir. En iyi performans için güncelleştirilen veya silinen hedef satır sayısını sınırlamak içinnot_matched_by_source_conditionuygulayın.Birden çok
WHEN NOT MATCHED BY SOURCE clausesvarsa, bunlar belirtildikleri sırayla değerlendirilir. Son yan tümcesi dışında herWHEN NOT MATCHED BY SOURCEyan tümcenin birnot_matched_by_source_conditionolması gerekir. Aksi takdirde, sorgu bir NON_LAST_NOT_MATCHED_BY_SOURCE_CLAUSE_OMIT_CONDITION hatası döndürür.Hedef satır, kaynak tablodaki satırlardan herhangi biriyle
WHEN NOT MATCHED BY SOURCEeşleşmezse vemerge_conditionkoşullarının hiçbiri doğru olarak değerlendirilmezse, bu hedef satır değiştirilmeden bırakılır.
Önemli
kaynak tablodaki birden fazla satır, MERGE ve yan tümcelerinde belirtilen koşullara göre hedef tablodaki aynı satırla eşleşiyorsa ON işlemleri WHEN MATCHED hatasıyla başarısız olur. Birleştirmenin SQL semantiğine göre, eşleşen hedef satırı güncelleştirmek için hangi kaynak satırın kullanılacağı belirsiz olduğundan bu tür güncelleştirme işlemi belirsizdir. Birden çok eşleşme olasılığını ortadan kaldırmak için kaynak tabloyu önceden işleyebilirsiniz.
Veri yakalamayı değiştirme örneğine bakın. Bu örnek, değişiklik veri kümesini (kaynak veri kümesi) önceden işleyerek bu değişikliği hedef Delta tablosuna uygulamadan önce her anahtar için yalnızca en son değişikliği korur. Databricks Runtime 15.4 LTS ve altında, MERGE birden çok eşleşmeyi değerlendirmeden önce yalnızca yan tümcesindeki ON koşulları dikkate alır.
Örnekler
Karmaşık işlemler için, örneğin verileri yinelenenleri kaldırma, değişiklik verilerini güncelleme ve ekleme, SCD Tür 2 işlemlerini uygulama gibi,
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)
-- Insert all columns from the source except `last_updated`, which is set to null in the target.
> MERGE INTO target USING source
ON target.key = source.key
WHEN NOT MATCHED THEN INSERT * EXCEPT (last_updated)
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