Hatalar ve Koşullu yürütme

ŞUNLARA UYGULANIR: Azure Data Factory Azure Synapse Analytics

Tip

Microsoft Fabric'daki Data Factory, daha basit bir mimariye, yerleşik yapay zekaya ve yeni özelliklere sahip yeni nesil Azure Data Factory. Veri tümleştirmeyi yeni kullanmaya başladıysanız Fabric Data Factory ile başlayın. Mevcut ADF iş yükleri veri bilimi, gerçek zamanlı analiz ve raporlama genelinde yeni özelliklere erişmek için Fabric yükseltebilir.

Koşullu yollar

Azure Data Factory ve Synapse Pipeline düzenlemesi koşullu mantığa olanak tanır ve kullanıcının önceki etkinliğin sonuçlarına göre farklı bir yol izlemesini sağlar. Farklı yolların kullanılması, kullanıcıların sağlam işlem hatları oluşturmasına olanak tanır ve ETL/ELT mantığında hata işlemeyi birleştirir. Toplamda dört koşullu yola izin veririz.

Name Explanation
Başarılı Olduğunda (Varsayılan Geçiş) Geçerli etkinlik başarılı olursa bu yolu yürüt
Hata Durumunda Geçerli etkinlik başarısız olursa bu yolu yürüt
Tamamlandıktan Sonra Başarılı olup olmadığına bakılmaksızın geçerli etkinlik tamamlandıktan sonra bu yolu yürüt
Atlama sırasında Etkinliğin kendisi çalışmadıysa bu yolu yürüt

Etkinliğin dört dalını gösteren ekran görüntüsü.

Bir etkinliğin ardından birden çok dal ekleyebilirsiniz; tek bir özel durum vardır: Tamamlandıktan Sonra yolu , Başarılı Olduğunda veya Hata Durumunda yolu ile birlikte var olamaz. Her bir pipeline çalışması için, aktivitenin yürütme sonucuna bağlı olarak en fazla bir yol etkinleştirilir.

Hata İşleme

Yaygın hata işleme mekanizması

Catch bloğunu deneyin

Bu yaklaşımda müşteri iş mantığını tanımlar ve önceki etkinlikten gelen hataları yakalamak için yalnızca Hata Durumunda yolunu tanımlar. Bu yaklaşım, Hata Durumunda yolu başarılı olursa işlem hattını işler.

Try catch bloğunun tanımı ve sonucunu gösteren ekran görüntüsü.

If Else bloğunu uygula

Bu yaklaşımda müşteri iş mantığını tanımlar ve hem Hata Durumunda hem de Başarıda yollarını tanımlar. Bu yaklaşım, Hata Üzerine yolu başarılı olsa bile işlem hattının başarısız olmasına neden olur.

Do if else bloğunun tanımını ve sonucunu gösteren ekran görüntüsü.

Varsa Yap Atla bloğu

Bu yaklaşımda, müşteri iş mantığını tanımlar ve hem Hata Durumunda yolunu hem de Başarılı Olduğunda yolunu tanımlar ve atlanan bir etkinlik eklenmiş olarak sahte bir etkinlik içerir. Bu yaklaşım, Hata Durumunda yolu başarılı olursa işlem hattını işler.

Aksi takdirde atlarsanız yap bloğunun tanımını ve sonucunu gösteren ekran görüntüsü.

Özet tablosu

Approach Defines Etkinlik başarılı olursa genel işlem hattı görüntülenir. Etkinlik başarısız olduğunda, genel çalışma hattı belirgin hale gelir.
Try-Catch Yalnızca Hata Durumunda yol Success Success
Do-If-Else Başarısızlık Durumunda yol + Başarı Durumunda yolları Success Failure
Do-If-Skip-Else Hata Durumunda Yol ve Başarı Durumunda Yol (sonunda Atlama Kuklası ile) Success Success

İşlem hattı hataları nasıl belirlenir?

Farklı hata işleme mekanizmaları işlem hattı için farklı durumlara yol açar: bazı işlem hatları başarısız olurken, diğerleri başarılı olur. İşlem hattı başarısını ve hatalarını aşağıdaki gibi belirleriz:

  • Tüm yaprak etkinlikleri için sonucu değerlendirin. Yaprak etkinliği atlandıysa bunun yerine üst etkinliğini değerlendiririz
  • İşlem hattı sonucu, yalnızca tüm düğümlerin başarıyla değerlendirilmesi durumunda başarılıdır.

Hata Durumunda etkinliği ve Hata Durumunda Kukla etkinliğinin başarılı olduğunu varsayarsak,

  • Try-Catch yaklaşımında,

    • Önceki etkinlik başarılı olduğunda: Başarısız Olduğunda düğümü işlem dışı bırakılır ve üst düğümü başarılı olur; genel işlem hattı başarılı kabul edilir.
    • Önceki etkinlik başarısız olduğunda: Başarısızlık Durumunda düğümü devreye girer; sonuçta genel işlem hattı başarılı bir şekilde tamamlanır.
  • Do-If-Else yaklaşımında,

    • Önceki etkinlik başarılı olduğunda: Başarılı Olduğunda düğümü başarılı olur ve Başarısız Olduğunda düğümü atlanır (ve üst düğümü başarılı olur); genel işlem hattı başarılı olur.
    • Önceki etkinlik başarısız olduğunda: Başarılı Olduğunda düğümü atlanır ve ebeveyn düğümü başarısız olur; genel işlem hattı başarısız olur
  • In Do-If-Skip-Else yaklaşımında,

    • Önceki etkinlik başarılı olduğunda: Dummy Upon Skip düğümü atlanır ve üst düğümü Upon Success başarılı olur; diğer düğüm etkinliği, Upon Failure atlanır ve üst düğümü başarılı olur; genel işlem hattı başarılı olur.
    • Önceki etkinlik başarısız olduğunda: Başarısız Olduğunda düğümü başarılı olur ve Atlandığında Dummy düğümü başarılı olur; genel boru hattı başarılı olur.

Koşullu yürütme

Daha karmaşık ve dayanıklı işlem hatları geliştirirken bazen mantığımıza koşullu yürütmeler eklemek gerekir: belirli bir etkinliği yalnızca belirli koşullar karşılandığında yürütmek. Kullanım örnekleri oldukça fazladır, örneğin:

  • önceki kopyalama işleri başarılı olduysa, e-posta bildirimi gönderme gibi bir izleme etkinliği çalıştırın
  • önceki etkinliklerden herhangi biri başarısız olduysa bir hata işleme işi çalıştırın
  • etkinliğin kendisi veya ilgili hata işleme etkinliği başarılı olursa sonraki adıma geçin
  • etc.

Burada bazı yaygın mantıkları ve bunları ADF'de nasıl uygulayacağımızı açıklayacağız.

Tek etkinlik

Tek bir etkinliği izleyen bazı yaygın desenler aşağıdadır. Karmaşık iş akışları oluşturmak için bu desenleri yapı taşları olarak kullanabiliriz.

Hata yönetimi

Desen, ADF'deki en yaygın koşul mantığıdır. "Hata Durumunda" yolu için bir hata işleme etkinliği tanımlanır ve ana etkinlik başarısız olursa çağrılır. Görev açısından kritik olan ve geri dönüş alternatifleri veya günlüğe kaydetmeyi gerektiren tüm adımlar için en iyi uygulama olarak dahil edilmelidir.

Görev açısından kritik adımlar için hata işlemeyi gösteren ekran görüntüsü.

En iyi çaba adımları

Bilgi günlüğü gibi bazı adımlar daha az kritiktir ve hataları işlem hattının tamamını engellememelidir. Böyle durumlarda en iyi çaba stratejilerini benimsemeliyiz: "Tamamlandıktan Sonra" yoluna sonraki adımları ekleyerek iş akışının engelini kaldırmalıyız.

Kayıt yapma girişimini en iyi şekilde gösteren ekran görüntüsü.

And

İlk ve en yaygın senaryolar koşullu "ve"dir: önceki etkinliklerin yalnızca başarılı olması durumunda iş akışına devam edin. Örneğin, veri işlemenin bir sonraki aşamasına geçmeden önce başarılı olması gereken birden çok kopyalama etkinliğiniz olabilir. ADF'de davranış kolayca elde edilebilir: sonraki adım için birden çok bağımlılık bildirin. Grafiksel olarak bu, bir sonraki etkinliğe işaret eden birden çok satır anlamına gelir. Bağımlılığın başarılı olduğundan emin olmak için "Başarılı Olduğunda" yolunu veya en iyi çaba ile çalışmanın tamamlanmasına izin vermek için "Tamamlandıktan Sonra" yolunu seçebilirsiniz.

Burada, izleme bekleme etkinliği yalnızca her iki web etkinliği de başarılı olduğunda yürütülür.

İşlem hattını gösteren ekran görüntüsü yalnızca her iki web etkinliği de başarılı olursa devam eder.

Burada, ActivitySucceeded geçtikten ve ActivityFailed tamamlandıktan sonra izleme bekleme etkinliği yürütülür. "Başarılı Olduktan Sonra" yolunda ActivitySucceeded'in başarılı olması gerekirken, "Tamamlandıktan Sonra" yolundaki ActivityFailed en iyi çabayla çalışır, yani başarısız olabilir.

İlk web etkinliği başarılı olduğunda ve ikinci web etkinliği tamamlandığında işlem hattını gösteren ekran görüntüsü.

Or

İkinci yaygın senaryolar koşullu "veya"dır: Bağımlılıklardan herhangi biri başarılı olursa veya başarısız olursa bir etkinlik çalıştırın. Burada "Tamamlandıktan Sonra" yollarını, If Koşulu etkinliğini ve ifade dilini kullanmamız gerekir.

Kodu derinlemesine incelemeden önce bir şeyi daha anlamamız gerekir. Bir etkinlik çalıştırılıp tamamlandıktan sonra, @activity('ActivityName').Status ile durumuna başvurabilirsiniz. "Başarılı"_ veya "Başarısız" olur. Koşullu veya mantık oluşturmak için bu özelliği kullanırız.

Paylaşılan hata günlüğü işleme adımı

Bazı durumlarda, önceki etkinliklerden herhangi biri başarısız olduysa paylaşılan hata işleme veya günlüğe kaydetme adımını çağırmak isteyebilirsiniz. İşlem hattınızı aşağıdaki gibi oluşturabilirsiniz:

  • birden çok etkinliği paralel olarak çalıştırma
  • True dalında hata işleme adımlarını içerecek bir if koşulu ekleme
  • "Tamamlandığında" yolunu kullanarak etkinlikleri koşul etkinliğine bağlama
  • koşul etkinliklerinin okumaları için mantıksal ifade
@or(equals(activity('ActivityFailed').Status, 'Failed'), equals(activity('ActivitySucceeded').Status, 'Failed'))
  • Not: Birleştirilmiş veya ikiden fazla bağımlılık etkinliğiniz varsa, örneğin,
@or(or(equals(activity('ActivityFailed').Status, 'Failed'), equals(activity('ActivitySucceeded1').Status, 'Failed')),equals(activity('ActivitySucceeded1').Status, 'Failed'))

Önceki etkinliklerden herhangi biri başarısız olursa paylaşılan hata işleme adımının nasıl yürütüleceğini gösteren ekran görüntüsü.

Herhangi bir etkinlik başarılı olursa Greenlight

Tüm etkinlikleriniz en iyi şekilde çalıştığında, önceki etkinliklerden herhangi biri başarılı olursa sonraki adıma geçmek isteyebilirsiniz. İşlem hattınızı aşağıdaki gibi oluşturabilirsiniz:

  • birden çok etkinliği paralel olarak çalıştırma
  • True dalında sonraki adımları içerecek bir if koşulu ekleme
  • "Tamamlandığında" yolunu kullanarak etkinlikleri koşul etkinliğine bağlama
  • koşul etkinliklerinin okumaları için mantıksal ifade
@or(equals(activity('ActivityFailed').Status, 'Succeeded'), equals(activity('ActivitySucceeded').Status, 'Succeeded'))
  • Not: Grafik tam olarak önceki senaryoya benzer. Tek fark kullanılan ifade dilidir

Etkinliklerden herhangi biri geçerse işlem hattının sonraki adıma geçeceğini gösteren ekran görüntüsü.

Karmaşık senaryolar

Devam etmek için tüm etkinliklerin başarılı olması gerekir

Desen ikinin birleşimidir: koşullu ve + hata işleme. İşlem hattı, devam eden tüm etkinlikler başarılı olursa sonraki adımlara geçer veya paylaşılan bir hata günlüğü adımı çalıştırır. İşlem hattını aşağıdaki gibi oluşturabilirsiniz:

  • birden çok etkinliği paralel olarak çalıştırma
  • if koşulu ekleyin. True dalında sonraki adımları ekleyin ve False dalında hata işleme kodu ekleyin
  • "Tamamlandığında" yolunu kullanarak etkinlikleri koşul etkinliğine bağlama
  • koşul etkinliklerinin okumaları için mantıksal ifade
@and(equals(activity('ActivityFailed').Status, 'Succeeded'), equals(activity('ActivitySucceeded').Status, 'Succeeded'))

Etkinliklerden herhangi biri geçerse veya hata işleme kodunu çalıştırırsa işlem hattının sonraki adıma geçtiğini gösteren ekran görüntüsü.

Ortak desenler

Try-Catch-Proceed

Desen, kodlamada catch bloğunu denemeye eşdeğerdir. İşlem hattında bir etkinlik başarısız olabilir. Başarısız olduğunda, müşterinin bununla başa çıkmak için bir hata işleme işi çalıştırması gerekir. Ancak tek etkinlik hatası işlem hattındaki sonraki etkinlikleri engellememelidir. Örneğin, dosyaları depolama alanına taşıyarak bir kopyalama işi çalıştırmayı denerim. Ancak yarı yolda başarısız olabilir. Bu durumda, kısmen kopyalanan ve güvenilir olmayan dosyaları depolama hesabından silmek istiyorum (hata işleme adımım). Ama sonrasında başka etkinliklere devam ederim.

Deseni ayarlamak için:

  • İlk etkinliği ekleme
  • UponFailure yoluna hata işleme ekleyin
  • İkinci etkinlik ekle, ancak ilk etkinliğe bağlanma
  • Hem UponFailure hem de UponSkip yollarını hata işleme etkinliğinden ikinci etkinliğe bağlayın

Note

Her yol (UponSuccess, UponFailure ve UponSkip) herhangi bir etkinliğe işaret edebilir. Birden çok yol aynı etkinliği işaret edebilir. Örneğin, UponSuccess ve UponSkip tek bir etkinliğe işaret ederken UponFailure farklı bir etkinliğe işaret edebilir.

Try-catch bloğuna sahip işlem hattını gösteren ekran görüntüsü.

Hata İşleme işi yalnızca İlk Etkinlik başarısız olduğunda çalışır. Sonraki Etkinlik, İlk Etkinlik başarılı olup olmadığına bakılmaksızın çalışır.

Genel hata işleme

Genellikle işlem hattında sıralı olarak çalışan birden çok etkinliğimiz vardır. Herhangi biri başarısız olursa, durumu temizlemek ve/veya hatayı günlüğe kaydetmek için bir hata yönetimi çalıştırmam gerekiyor. Örneğin, işlem hattında sıralı kopyalama etkinliklerim var. Bunlardan herhangi biri başarısız olursa, işlem hattı hatasını kaydetmek için bir script çalıştırmam gerekiyor.

Deseni ayarlamak için:

  • Sıralı veri işleme işlem hattı oluşturma
  • İşlem hattının sonuna genel hata işleme adımı ekleme
  • Hem UponFailure hem de UponSkip yollarını son etkinlikten hata işleme etkinliğine bağlama

Dallanma olmayan bir işlem hattında genel hata işlemeyi gösteren ekran görüntüsü.

Son adım olan Genel Hata İşleme yalnızca önceki etkinliklerden biri başarısız olursa çalışır. Hepsi başarılı olursa, bu çalışmaz.

Hata işleme için birden çok etkinlik ekleyebilirsiniz.

Dallanma ve birden çok etkinlik içermeyen bir işlem hattında genel hata işleme ile işlem hattını gösteren ekran görüntüsü.

Data Factory ölçümleri ve uyarıları

Görsel Olarak İzleme