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, birden çok SQL deyimi ve tablosu arasında işlemleri koordine etmenizi 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 özelliklerini içerir: bölünmezlik, tutarlılık, yalıtım ve dayanıklılık. bkz. Azure Databricks'da 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:
Etkileşimli olmayan
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;
Etkileşimli
BEGIN TRANSACTION;
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());
COMMIT;
Üç 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 Catalog tarafından yönetilen tablolar olun (Delta Lake veya Iceberg)
- Katalog işlemelerini etkinleştir
- 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.
- OpenSharing 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, PyODBC |
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 (alt seçim) |
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 |
Desteklenen okuma kaynakları ve yazma havuzları
İşlemler, Unity Catalog tablolarından (Delta Lake ve Iceberg), akış tablolarından, görünümlerden ve somutlaştırılmış görünümlerden veri okumanıza olanak tanır.
ACID garantileri nedeniyle Delta Lake ve Iceberg gibi açık tablo biçimleri hem okuma kaynakları hem de yazma havuzları olarak işlemlerde desteklenir. İşlem dışı kaynaklardan okumak için ipucunu allow_nontransactional_read kullanın. Bkz. İşlem dışı kaynaklardan okuma ve Örnek: işlem dışı okuma.
** İşlemsel olmayan kaynaklardan okuma
Uyarı
İşlem dışı okumalar yinelenemez. İşlem sırasında kaynak verilerde yapılan eşzamanlı değişiklikler tutarsız okumalara neden olabilir.
İşlemler, işlem dışı kaynaklardan okumanıza olanak sağlar. İşlem dışı kaynaklar Parquet, Avro, CSV ve JSON dosya biçimlerini kullanan dış tabloları ve JDBC kullanan federasyon tablolarını içerir. İşlem dışı kaynakları okumak için kaynağa adıyla başvurun ve allow_nontransactional_read ipucunu kullanın.
Yol tabanlı erişim desteklenmez. Bunun yerine doğrudan yoluyla bir dosyaya başvurursanız, örneğin FROM parquet.`/path/to/data`, işlem bir PATH_BASED_ACCESS hatayla başarısız olur.
Aşağıdaki kod örneği, JSON kullanarak bir dış tabloda ipucunun nasıl kullanılacağını gösterir:
BEGIN TRANSACTION;
-- Non-transactional source, hint required
INSERT INTO transactional_table
SELECT col1, col2
FROM external_json_table
WITH (allow_nontransactional_read = true);
COMMIT;
Örnek: işlem dışı okuma
Aşağıdaki örnekte Parquet kullanan bir dış tablodan işlemsel olmayan bir okuma gösterilmektedir. Bu örnek için, okuma ve yazma erişimine sahip mevcut bir harici konumunuzun olması gerekir.
Bkz: Azure Data Lake Storage 2. Nesil (ADLS Gen2) harici konumuna bağlanma.
Parquet kaynağını adlandırılmış dış tablo olarak kaydetmek için aşağıdakileri çalıştırın:
CREATE TABLE main.default.external_parquet_table
USING PARQUET
LOCATION 'abfss://my-container@my-storage-account.dfs.core.windows.net/path/to/data'; -- existing external location
İşlem dışı bir Parquet kaynağını ve işlemde Delta Lake kullanarak yönetilen bir tabloyu okumak için aşağıdakileri çalıştırın:
BEGIN ATOMIC
-- Non-transactional source, hint required
INSERT INTO transactional_table
SELECT col1, col2
FROM external_parquet_table
WITH (allow_nontransactional_read = true);
-- Managed table source, no hint is required
INSERT INTO another_table
SELECT * FROM managed_delta_table;
END;
İşlem yalıtımı
İşlemler, tüm ifadelerde tekrarlanabilir okumalara izin verir. bir işlemdeki bir tabloya eriştiğinizde, Azure Databricks ilk erişimde 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.
Aşağıdaki örnekte, işlem içindeki products’ya yönelik ilk sorgu tutarlı bir anlık görüntü yakalar:
Etkileşimli olmayan
BEGIN ATOMIC
SELECT * FROM products WHERE product_id = 1001;
SELECT * FROM products WHERE product_id = 1001;
END;
Etkileşimli
BEGIN TRANSACTION;
SELECT * FROM products WHERE product_id = 1001;
SELECT * FROM products WHERE product_id = 1001;
COMMIT;
Ardından, ikinci sorgu başlamadan önce başka bir kullanıcının satırı product_id = 1001 eşzamanlı olarak güncelleştirmiş olduğunu varsayalım:
UPDATE products SET price = 29.99 WHERE product_id = 1001;
Anlık görüntü ilk erişimde alındığı için, products öğesine yapılan ikinci sorgu güncellenmiş satırı değil, orijinal satırı döndürür.
Ç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'teki Delta Lake tabloları için yalıtım düzeyleri ve yazma çakışması davranışı hakkında bilgi için bkz. Azure Databricks üzerinde Optimizasyon ö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 kaydına olanak tanır 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 dayanarak ya da oturum etkin kalmaya devam ederken bir ifadenin başarısız olmasının ardından değişiklikleri geri almanızı sağlar.
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 defterleri: doğrudan SQL hücrelerinde
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 applications: Databricks SQL Bağlayıcısı'nı
autocommit=Falseile kullanın. Python için bkz.Databricks SQL Bağlayıcısı. İşlemler içinde desteklenmeyen Python bağlayıcı işlemlerinin listesi için bkz. Desteklenmeyen Python bağlayıcı 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
İşlemler için aşağıdaki sınırlamalar 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. Bakınız Katalog taahhütleri. |
| 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. |
| Köken | İşlemler, her okuma ve yazma işlemi gerçekleşirken köken yayar. İşlem geri alınsa bile köken olayları kalıcı olur. |
| 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. |
| OpenSharing paylaşılan tablolar gereksinimi | OpenSharing 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. |
| OpenSharing 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ışı 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. |
| OpenSharing kaynak tablo çakışması | OpenSharing alıcıları, tek bir işlem içinde aynı kaynak tabloya başvuran paylaşılan görünüme ve paylaşılan bir tabloya başvuramaz. |