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.
Önemli
Unity Kataloğu yönetilen Delta tablolarına yazan işlemler Genel Önizleme aşamasındadır.
Unity Kataloğu tarafından yönetilen Iceberg tablolarına yazılan işlemler Özel Önizleme aşamasındadır. Bu önizlemeye katılmak için yönetilen Iceberg tabloları önizleme kayıt formunu gönderin.
İşlemler, işlemleri birden çok SQL deyimi ve tablosu arasında koordine olmanıza olanak sağlar. Tüm değişiklikler birlikte başarılı olur veya birlikte geri alınır, böylece işlemleriniz ve tablolarınız arasında veri tutarlılığı sağlanır. İşlemler ACID garantileri sağlar: atomiklik, tutarlılık, yalıtım ve dayanıklılık. Bkz. Azure Databricks'te ACID garantileri nelerdir?. Görev açısından kritik olan depolama iş yüklerini oluşturmak için işlemler saklı yordamlar ve SQL Scripting ile kullanılabilir.
Aşağıdaki örnekte bir işlem gösterilmektedir:
BEGIN ATOMIC
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
INSERT INTO audit_log VALUES (1, 2, 100, current_timestamp());
END;
Üç deyimi de birlikte işler. Herhangi bir ifade başarısız olursa, tüm değişiklikler geri alınır ve Databricks transaksiyonu yan etkiler olmadan sonlandırır.
İşlemlerle ilgili uygulamalı alıştırma için bkz . Öğretici: Tablolar arasında işlemleri koordine edin.
Gereksinimler
Birden çok deyime veya birden çok tabloya yayılan işlemleri çalıştırmak için:
- Yazılan tüm tabloların olmalıdır:
- Unity Kataloğu tarafından yönetilen tablolar (Delta veya Iceberg) olun
- Katalog tarafından yönetilen işlemelerin etkinleştirilmesi
- Desteklenen hesaplamayı kullanın:
- Etkileşimli olmayan işlemler için Databricks Runtime 18.0 ve üzerini çalıştıran herhangi bir SQL ambarı, sunucusuz işlem veya küme kullanın.
- Etkileşimli işlemler için herhangi bir SQL ambarı kullanın.
- Delta Sharing paylaşılan varlıklarındaki işlemler için Databricks Runtime 18.1 ve üzerini kullanın.
İşlem modları
Azure Databricks iki işlem modunu destekler:
| Modu | Sözdizimi | Taahhüt etmek | Geri döndürme | En iyi kullanım alanı: |
|---|---|---|---|---|
| Etkileşimli olmayan | ATOMIC bileşik deyimi | Başarılı olduğunda otomatik | Hatada otomatik | Sabit diziler, zamanlanmış işler |
| Etkileşimli | BEGIN TRANSACTION; İŞLEME; | Kılavuz | Kılavuz | Koşullu mantık, doğrulama ve hata ayıklama, JDBC, ODBC, PyDBC |
Her iki mod için ayrıntılı söz dizimi, örnekler ve kullanım desenleri için bkz. İşlem modları.
Desteklenen işlemler
İşlemler içinde aşağıdaki işlemleri kullanabilirsiniz:
| Operation | Açıklama |
|---|---|
| SELECT | Verileri sorgulama ve sonuçları doğrulama |
| VALUES cümle | Test verileri veya sabit değerler oluşturma |
| INSERT (tüm varyantlar dahil) | Yeni satır ekleme |
| UPDATE | Varolan satırları değiştirme |
COPY INTO |
Bir dosyadan Delta tablosuna veri yükleme |
| DELETE FROM | Satırları kaldırma |
| MERGE INTO | Ekleme, güncelleştirme ve silmeyi birleştiren Upsert desenleri |
İşlemlerdeki kaynakları okuma
İşlemler Unity Kataloğu tablolarından (Delta ve Iceberg), akış tablolarından, görünümlerden ve malzemeleştirilmiş görünümlerden okunabilir. İşlem dışı kaynaklardan okumak için ipucunu allow_nontransactional_reads kullanın.
** İşlemsel olmayan kaynaklardan okuma
JDBC kullanarak Parquet dosyaları, Avro dosyaları ve federasyon tabloları gibi işlem dışı kaynaklardan okumak için aşağıdaki örnekte gösterildiği gibi ipucunu allow_nontransactional_reads kullanın:
BEGIN TRANSACTION;
-- Read from a non-transactional Parquet source
INSERT INTO transactional_table
SELECT col1, col2
FROM parquet.`/path/to/data`
WITH (allow_nontransactional_reads = true);
-- Read from a managed Delta table (no hint needed)
INSERT INTO another_table
SELECT * FROM managed_delta_table;
COMMIT;
Uyarı
İşlem dışı okumalar yinelenemez. İşlem sırasında kaynak verilerde yapılan eşzamanlı değişiklikler tutarsız okumalara neden olabilir.
İşlem yalıtımı
İşlemler, tüm ifadelerde yinelenebilir okuma özelliği sağlar. Bir işlemdeki bir tabloya eriştiğinizde Azure Databricks, ilk erişimde bu tablonun tutarlı bir anlık görüntüsünü yakalar. Bu tablonun sonraki tüm okumaları bu anlık görüntüyü kullanır, böylece diğer kullanıcılar aynı tabloları eşzamanlı olarak değiştirse bile okumalarınız tutarlı kalır.
Örnek:
BEGIN TRANSACTION;
-- First access to products table captures snapshot
SELECT * FROM products WHERE product_id = 1001;
-- Another user updates product 1001
-- Still reads the same snapshot (repeatable read)
SELECT * FROM products WHERE product_id = 1001;
COMMIT;
Çakışma algılama ve eşzamanlılık
Azure Databricks iyimser eşzamanlılık denetimi kullanır. İşlemler kilitlenmeden devam eder ve taahhüt zamanında çakışmalar algılanır. İşleme yaptığınızda Azure Databricks, işleminiz başladıktan sonra diğer işlemlerin aynı verileri değiştirip değiştirmediğini denetler. Çakışmalar varsa, işleminiz başarısız olur. Etkileşimli olmayan işlemler için geri alma işlemi de otomatik olarak gerçekleşir. Etkileşimli işlemler için, yeni bir işleme başlamadan önce işlem durumunu temizlemek için açıkça çalıştırmanız ROLLBACK gerekir.
Etkileşimli olmayan işlemler satır düzeyi eşzamanlılığı destekler. Hedef tablolarda Satır düzeyi eşzamanlılık etkinleştirildiğinde iki işlem aynı veri dosyasındaki farklı satırları çakışmadan değiştirebilir.
Etkileşimli işlemler tablo düzeyinde eşzamanlılığı destekler.
Çakışma senaryoları
| Scenario | Açıklama |
|---|---|
| Yazma-yazma çakışmaları | İki işlem aynı satırları güncelleştirir veya siler. |
| Yazma-okuma çakışmaları | Başka bir işlem, sizin işleminizin okuduğu satırları değiştirdi. Yalnızca Seri hale getirilebilir yalıtım için geçerlidir. |
| Hayalet okuma çakışmaları | Başka bir işlem, işleminizin okuma koşuluyla eşleşen yeni satırlar ekledi. Hem WriteSerializable hem de Serializable yalıtımı için geçerlidir. |
| Meta veri çakışmaları | Başka bir işlem tablo şemasını veya özelliklerini değiştirdi. |
yalıtım düzeyleri ve işlemler için çakışma çözümü hakkında daha fazla bilgi için bkz. İşlem modları. Azure Databricks'te Delta Lake tabloları için yalıtım düzeyleri ve yazma çakışması davranışı hakkında bilgi için bkz. Azure Databricks'te iyileştirme önerileri.
İşlemlerin Delta günlüğünde nasıl göründüğü
Başarılı her işlem, işlem içinde kaç ayrı deyimin çalıştırıldığına bakılmaksızın tablonun Delta günlüğünde tek bir kayıt olarak görünür. Bu, temiz bir denetim izi sağlar ve geri alma işlemlerini basitleştirir.
İşlem içindeki tek tek işlemler, işlemin Delta günlük girişinde JSON meta verileri olarak kullanılabilir.
Hata işleme ve geri alma
Aşağıdaki tabloda her iki işlem türü için de hata geri alma işlemlerinin nasıl gerçekleştiği açıklanmaktadır:
| Scenario | Etkileşimli olmayan işlemler için davranış | Etkileşimli işlemler için davranış |
|---|---|---|
| İfade hatası | Hata oluşturan tüm deyimler anında otomatik geri alma işlemine neden olur. | Oturum hala etkinse, değişiklikleri atmak amacıyla ROLLBACK komutunu açıkça çalıştırmalısınız. |
| Başarısız doğrulama mantığı veya iş kuralları | Bir hata ayıklaması başlatmak ve otomatik geri almayı tetiklemek için SIGNAL kullanın. |
Değişiklikleri atmak için ROLLBACK komutunu çalıştırın. |
| Oturumun bağlantısını kesme | İşlem otomatik olarak geri alınır. | İşlem otomatik olarak geri alınır. |
| Zaman Aşımı | Toplam süre 48 saat sonra otomatik olarak geri alınır. | 10 dakika etkinlik dışı veya 48 saatlik toplam sürenin sonunda otomatik olarak geri alınır (bkz . Sınırlamalar). İşlem yan etkiler olmadan sonlandırılır, ancak oturum hala açıkken işlem durumunu temizlemek için ROLLBACK'i belirtmeniz gerekir. |
Etkileşimli işlemler için ROLLBACK deyimini kullanarak açıkça geri alabilirsiniz. Bu, doğrulama mantığına veya iş kurallarına göre değişiklikleri geri almak istediğinizde ya da oturum etkin kaldığında bir sorgu hatasından sonra yararlıdır.
En iyi uygulamalar
Çakışmaları azaltmak ve işlem performansını iyileştirmek için bu uygulamaları izleyin.
Çakışmaları önleme
- İşlemleri kısa tutun: Uzun süre çalışan işlemler çakışma olasılığını artırır ve kaynakları daha uzun süre tutar.
- Erken doğrula: Hızla başarısızlıktan kaçınmak için işlemin başındaki önkoşulları denetleyin.
- Databricks, çoğu kullanım örneği için etkileşimli olmayan işlemler önerir: Etkileşimli olmayan işlemler satır düzeyi eşzamanlılık kullanır. Bkz. Etkileşimli olmayan işlemler.
- Çakışmaları yeniden deneyin: Çakışmalar oluştuğunda işlemi yeni verilerle yeniden deneyin.
Farklı istemcilerden gelen işlemleri kullanma
İşlemler çeşitli istemci arabirimlerinde çalışır:
-
SQL Düzenleyicisi ve not defteri: SQL hücrelerinde doğrudan
BEGIN ATOMIC ... END;veyaBEGIN TRANSACTION; ... COMMIT;söz dizimini kullanın veya Python/Scala not defterlerindespark.sql()kullanın. Bkz. İşlem modları. -
JDBC uygulamaları:
setAutoCommit(false)sürümü 3.0.5 ve üzeri ile JDBC API yöntemlerini (commit(),rollback(), ) kullanın. Bkz. Örnek: İşlemleri kullanma. İşlemler içindeki desteklenmeyen JDBC işlemlerinin listesi için bkz. Desteklenmeyen JDBC işlemleri. - ODBC uygulamaları: Databricks ODBC Sürücüsü sürüm 2.10.0 ve üzerini kullanın. İşlemler içindeki desteklenmeyen ODBC işlemlerinin listesi için bkz. Desteklenmeyen ODBC işlemleri.
-
Python uygulamaları: ile
autocommit=FalseDatabricks SQL Bağlayıcısı'nı kullanın. Bkz. Python için Databricks SQL Bağlayıcısı. İşlemler içindeki desteklenmeyen Python bağlayıcısı işlemlerinin listesi için bkz. Desteklenmeyen Python bağlayıcısı işlemleri. - Deyim Yürütme API'si: API çağrıları aracılığıyla SQL söz dizimlerini kullanarak işlemleri çalıştırın. Bkz. Deyim Yürütme API'siyle kullanma.
Sınırlamalar
Aşağıdaki sınırlamalar, birden çok tabloya yayılan işlemler için geçerlidir:
| Sınırlama | Açıklama |
|---|---|
| Etkileşimli işlem çakışmaları | Etkileşimli işlemler (BEGIN TRANSACTION; ... TAMAMLA;) etkileşimli olmayan işlemlerden daha muhafazakar bir çakışma algılaması kullanır ve hedef tablodan okumayan INSERT işlemler dışında tablo düzeyinde çakışabilir. Satır seviyesinde çakışma algılaması önemli olduğunda etkileşimli olmayan işlemleri (ATOMIC bileşik deyimi) kullanın. Bkz. Etkileşimli olmayan işlemler. |
| Hedefleri yazma | Yalnızca tablo özelliğinin etkinleştirildiği Unity Kataloğu tarafından yönetilen Delta veya Iceberg tablolarına catalogManaged yazabilirsiniz. Bkz. Katalog tarafından yönetilen işlemeler. |
| Yalnızca DML işlemleri | İşlemler SELECT, INSERT, UPDATE, DELETE, COPY INTO ve MERGE desteklemektedir. İşlemlerin dışında CREATE TABLE, ALTER TABLE veya DROP TABLE gibi DDL işlemlerini çalıştırın. |
| Meta veri işlemleri desteklenmiyor | Meta veri işlemleri, protokolden bağımsız olarak işlemlerin içinde çalışmaz. Buna Thrift RPC tabanlı meta veri çağrıları (JDBC DatabaseMetaData yöntemleri ve ODBC katalog işlevleri gibi), SQL tabanlı komutlar (SHOW TABLES, SHOW DATABASES, DESCRIBE TABLE) ve SELECT tablolara veya sistem tablolarına yönelik information_schema sorgular dahildir. meta veri işlemlerini işlemlerin dışında çalıştırın. |
COPY INTO Eşzamanlılık |
Bir COPY INTO komutunu çalıştıran işlem, başka bir COPY INTO komutu aynı tabloya yazmak için aynı anda çalıştırılır ve önce tamamlanırsa başarısız olur. |
| Akış yazmaları desteklenmiyor | Akış tablolarına işlemsel yazma işlemleri desteklenmez. |
| RLS ve CLM tabloları desteklenmiyor | Satır filtreleri ve sütun maskeleri olan tablolar işlemlere katılamaz. |
| Tablo ve görünüm sınırları | Bir işlem, toplamda en fazla 100 tablodan okuyabilir veya yazabilir ve en fazla 100 görünümden okuyabilir. Her tablo, bir işlem içinde en fazla 100 ara taahhüt içerebilir. |
| Zaman yolculuğu desteklenmiyor | Bir işlem içinde zaman yolculuğu kullanamazsınız. |
| Boş durma zaman aşımı | Etkileşimli işlemler 10 dakika etkinlik dışı kalma süresinden sonra geri alınır. İşlem yan etkiler olmadan sonlandırılır, ancak oturum hala açıkken işlem durumunu temizlemek için ROLLBACK'i belirtmeniz gerekir. |
| Maksimum süre | Toplam süre 48 saat olduğunda tüm işlemler otomatik olarak geri alınır. Etkileşimli işlemler için işlem yan etkiler olmadan sonlandırılır, ancak oturum hala etkinse işlem durumunu temizlemek için ROLLBACK'i açıkça çalıştırmanız gerekir. |
| Delta Sharing paylaşılan tablo gereksinimi | Delta Sharing sağlayıcılarının, alıcıların üzerinde işlem çalıştırmasına izin vermek için tabloyu WITH HISTORYpaylaşması gerekir. Alıcılar herhangi bir işlem türünü kullanarak işlemleri çalıştırabilir. |
| Delta Sharing alıcı işlem kısıtlamaları | Azure Databricks alıcıları yalnızca paylaşılan görünümler, gerçekleştirilmiş görünümler, akış tabloları ve Iceberg dışındaki yabancı tablolarda işlem çalıştırabilir. Sağlayıcılarıyla aynı Azure Databricks hesabındaki alıcıların paylaşılan veya sunucusuz işlem kullanması gerekir. Farklı bir hesaptaki alıcıların sunucusuz işlem kullanması gerekir. |
| Delta Paylaşımı kaynak tablosu çakışması | Delta Sharing alıcıları, aynı kaynak tabloya başvuran paylaşılan bir görünüme ve paylaşılan bir tabloya tek bir işlem içinde başvuramaz. |
Sonraki Adımlar
- İşlem modları
- Öğretici: Tablolar arasında işlemleri koordine edin
- Katalog tarafından yönetilen taahhütler
- Yalıtım düzeyleri ve yazma çakışmaları