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.
Satır düzeyi eşzamanlılık, satır düzeyindeki değişiklikleri algılayarak ve eşzamanlı yazma işlemleri aynı veri dosyasındaki farklı satırları güncelleştirdiğinde veya sildiğinde oluşan çakışmaları otomatik olarak çözerek eşzamanlı yazma işlemleri arasındaki çakışmaları azaltır.
Satır düzeyi eşzamanlılık gereksinimleri
Tablolar tanımlı bölümlere sahipse veya silme vektörleri etkin değilse satır düzeyi eşzamanlılığı desteklemez. Satır düzeyi eşzamanlılık için Databricks Runtime 14.2 ve üzeri gerekir.
Bölümlere sahip tablolar satır düzeyi eşzamanlılığı desteklemez, ancak silme vektörleri etkinleştirildiğinde,
14.2 öncesi Databricks Runtime sürümleri için bkz. Satır düzeyi eşzamanlılık önizleme davranışı (eski).
Uyarı
MERGE INTO satır düzeyi eşzamanlılık desteği için Databricks Runtime 14.2'de Photon gerekir. Databricks Runtime 14.3 LTS ve üzerinde Photon gerekli değildir.
Satır düzeyi eşzamanlılık ile çakışma matrisi
Aşağıdaki tabloda, satır düzeyi eşzamanlılık etkinken her yalıtım düzeyinde hangi yazma işlemi çiftlerinin çakışabileceği gösterilmektedir:
| INSERT (1) | UPDATE, SİL, MERGE INTO | OPTIMIZE | |
|---|---|---|---|
| INSERT | Çakışamaz | ||
| UPDATE, SİL, MERGE INTO | WriteSerializable içinde çatışma meydana gelemez. Aynı satırın değiştirilmesi durumunda Serializable içinde çakışma olabilir. | Aynı satır üzerinde değişiklik yapıldığında çakışmalar olabilir. | |
| OPTIMIZE | Çakışamaz | Bu, ZORDER BY kullanıldığında çakışabilir. Aksi takdirde çakışamaz. |
Bu, ZORDER BY kullanıldığında çakışabilir. Aksi takdirde çakışamaz. |
(1) Bu tablodaki tüm INSERT işlemler, işlemeden önce aynı tablodan hiçbir veri okumayan ekleme işlemlerini açıklar. Aynı tabloyu okuyan alt sorgular içeren INSERT işlemleri, MERGEile aynı eşzamanlılığı destekler.
Uyarı
- Kimlik sütunları olan tablolar eşzamanlı işlemleri desteklemez. Bkz . Delta Lake'te kimlik sütunlarını kullanma.
-
REORGişlemleri, veri dosyaları yeniden yazılırkenOPTIMIZE'e ait olan yalıtım semantiğiyle aynıdır. Yükseltme uygulamak içinREORGkullandığınızda, devam eden tüm işlemlerle çakişen tablo protokolleri değişir.
Satır düzeyi eşzamanlılık olmadan oluşan yazma çakışmaları
Tablolar tanımlı bölümlere sahipse veya silme vektörleri etkin değilse satır düzeyi eşzamanlılığı desteklemez. Satır düzeyi eşzamanlılık için Databricks Runtime 14.2 veya üzeri gereklidir.
Satır düzeyi eşzamanlılığı olmayan çakışma matrisi
Aşağıdaki tabloda, her yalıtım düzeyinde hangi yazma işlemi çiftlerinin çakışabileceği gösterilmektedir:
| INSERT (1) | UPDATE, SİL, MERGE INTO | OPTIMIZE | |
|---|---|---|---|
| INSERT | Çakışamaz | ||
| UPDATE, SİL, MERGE INTO | WriteSerializable içinde çatışma meydana gelemez. Serializable'da çakışma olabilir. Bkz . Bölümleme kullanarak çakışmaları önleme. | Serializable ve WriteSerializable ile çakışabilir. Bkz . Bölümleme kullanarak çakışmaları önleme. | |
| OPTIMIZE | Çakışamaz | Kullanılmadığı sürece ZORDER BY silme vektörleri etkin tablolarda çakışma olamaz. Aksi takdirde çelişebilir. |
ZORDER BY kullanılmadığında silme vektörleri etkin tablolarda çakışma olamaz. Aksi takdirde çelişebilir. |
(1) Bu tablodaki tüm INSERT işlemler, işlemeden önce aynı tablodan hiçbir veri okumayan ekleme işlemlerini açıklar. Aynı tabloyu okuyan alt sorgular içeren INSERT işlemleri, MERGEile aynı eşzamanlılığı destekler.
Uyarı
- Kimlik sütunları olan tablolar eşzamanlı işlemleri desteklemez. Bkz . Delta Lake'te kimlik sütunlarını kullanma.
-
REORGişlemleri, veri dosyaları yeniden yazılırkenOPTIMIZEile aynı yalıtım anlamına sahiptir. Yükseltme uygulamak içinREORGkullandığınızda, devam eden tüm işlemlerle çakişen tablo protokolleri değişir.
Satır düzeyi eşzamanlılık sınırlamaları
Satır düzeyi eşzamanlılık için sınırlamalar geçerlidir. Aşağıdaki işlemler için çakışma çözümlemesi, yazma çakışmaları için normal eşzamanlılığı izler. Bkz Satır düzeyi eşzamanlılık olmadan yazma çakışmaları.
| Sınırlama | Açıklama |
|---|---|
| Karmaşık koşul ifadeleri | Karmaşık veri türleri (yapılar, diziler, haritalar), belirlenemeyen ifadeler, alt sorgular ve bağıntılı alt sorgular ile ilgili koşullar |
MERGE ön koşul gereksinimi |
Databricks Runtime 14.2'de komutlar, MERGE kaynak tabloyla eşleşen satırları filtrelemek için hedef tabloda açık bir koşul kullanmalıdır |
| Performans değiş tokuşu | Satır düzeyi çakışma algılama, toplam yürütme süresini artırabilir. Birçok eşzamanlı işlemde yazıcı, çakışma çözümüne göre gecikme süresini önceliklendirir |
Silme vektörleri için tüm sınırlamalar da geçerlidir. Bkz. Sınırlamalar.
Bölümleme kullanarak çakışmaları önleme
Çakışma matrislerinde "çakışabilir" olarak işaretlenen tüm durumlarda, çakışma yalnızca iki işlem aynı dosya kümesini etkilerse oluşur. İki dosya kümesinin kopuk olmasını sağlamak için tabloyu işlem koşullarında kullanılan sütunlarla bölümleyin.
Example:
Komutlar UPDATE table WHERE date > '2010-01-01' ... ve DELETE table WHERE date < '2010-01-01', eğer tablo tarihe göre bölümlenmemişse çakışır, çünkü her ikisi de aynı dosyaları değiştirmeye çalışabilir. Tabloyu date bölümleyerek çakışmayı önler.
Uyarı
Tabloyu yüksek kardinaliteye sahip bir sütuna göre bölümleme, çok sayıda alt dizin nedeniyle performans sorunlarına yol açabilir.
Örnek: Açık bölüm filtreleri ile çakışmaları önleme
Bu özel durum genellikle farklı bölümleri güncelleştirirken bile aynı bölümü okuyabilen eşzamanlı DELETE, UPDATEveya MERGE işlemleri sırasında oluşturulur. Ayırmayı işlem koşulunda açık hale getirin:
// Problem: Condition can scan the entire table
deltaTable.as("t").merge(
source.as("s"),
"s.user_id = t.user_id AND s.date = t.date AND s.country = t.country")
.whenMatched().updateAll()
.whenNotMatched().insertAll()
.execute()
// Solution: Add explicit partition filters
deltaTable.as("t").merge(
source.as("s"),
"s.user_id = t.user_id AND s.date = t.date AND s.country = t.country AND t.date = '" + date + "' AND t.country = '" + country + "'")
.whenMatched().updateAll()
.whenNotMatched().insertAll()
.execute()
Çakışma istisnaları
Bir işlem çakışması oluştuğunda aşağıdaki özel durumlardan birini gözlemlersiniz:
EşzamanlıEkEklemeİstisnası
Bu özel durum, eşzamanlı bir işlem işleminizin okuduğu aynı bölüme (veya bölümlenmemiş bir tabloda herhangi bir yere) dosya eklediğinde oluşur. Dosya eklemeleri, INSERT, DELETE, UPDATE veya MERGE işlemlerinden kaynaklanabilir.
Varsayılan WriteSerializable yalıtım düzeyiyle, kör INSERT işlemler tarafından eklenen dosyalar (veri okumadan veri ekleyen işlemler) hiçbir işlemle çakışmaz. Yalıtım düzeyi Serileştirilebilirse, kör eklemeler çakışabilir.
Önemli
Birden çok eşzamanlı DELETE, UPDATEveya MERGE işlemi kör eklemeler tarafından eklenen değerlere başvuruda bulunuyorsa, kör eklemeler WriteSerializable modunda çakışabilir. Bunu önlemek için:
- Eş zamanlı
DELETE,UPDATEveyaMERGEişlemlerinin eklenen verileri okumadığından emin olun - Eklenen verileri okuyabilen en fazla bir
DELETE,UPDATEveyaMERGEişlemine sahip olma
ConcurrentDeleteReadException
Bu özel durum, eşzamanlı bir işlem işleminizin okuduğu bir dosyayı sildiğinde oluşur. Yaygın nedenler, DELETE, UPDATE veya MERGE işlemlerinin dosyaları yeniden yazmasıdır.
ConcurrentDeleteDeleteException
Bu özel durum, eşzamanlı bir işlem işleminizin de sileceği bir dosyayı sildiğinde oluşur. Bunun nedeni iki eşzamanlı sıkıştırma işleminin aynı dosyaları yeniden yazması olabilir.
MetadataDeğişikliğiHatası
Bu özel durum, eşzamanlı bir işlem delta tablosunun meta verilerini güncelleştirdiğinde oluşur. Yaygın nedenler, tablo şemasını güncelleştiren işlemler veya yazma işlemleridir ALTER TABLE .
Eşzamanlı İşlem İstisnası
Aynı denetim noktası konumunu kullanan bir akış sorgusu eşzamanlı olarak birden çok kez başlatılır ve Delta tablosuna aynı anda yazmaya çalışırsa bu özel durum oluşur. Aynı denetim noktası konumuna sahip iki akış sorgusunu hiçbir zaman eşzamanlı olarak çalıştırmayın.
ProtokolDeğiştiİstisnası
Bu özel durum şu durumlarda oluşabilir:
- Delta tablonuz yeni bir protokol sürümüne yükseltildi (Databricks Runtime'ınızı yükseltmeniz gerekebilir)
- Aynı anda birden fazla yazar bir tablo oluşturuyor veya değiştiriyor.
- Birden çok yazar aynı anda boş bir yola yazıyor
Bkz . Delta Lake özellik uyumluluğu ve protokolleri.
Satır düzeyi eşzamanlılık önizleme davranışı (eski)
Bu bölümde Databricks Runtime 14.1 ve altındaki satır düzeyi eşzamanlılık için önizleme davranışları açıklanmaktadır.
| Databricks Runtime Sürümü | Davranış |
|---|---|
| Databricks Runtime 13.3 LTS ve üzeri | Sıvı kümelemeli tablolar otomatik olarak satır düzeyi eşzamanlılığı etkinleştirir |
| Databricks Runtime 14.0 ve 14.1 | Aşağıdaki yapılandırmayı kullanarak silme vektörlerine sahip tablolar için satır düzeyi eşzamanlılığı etkinleştirin |
| Databricks Runtime 14.1 ve altı | Foton dışı hesaplama yalnızca DELETE operasyonlar için satır seviyesinde eşzamanlılığı destekler. |
Databricks Runtime 14.0 ve 14.1'de satır düzeyi eşzamanlılığı etkinleştirmek için:
spark.databricks.delta.rowLevelConcurrencyPreview = true
Satır düzeyi eşzamanlılık her zaman silme vektörleri gerektirir.