Anadolu Market’in gece işi şu: ERP’den satışları kopyala, temizle, aylık özeti hesapla, modeli yenile, sorun olursa ekibe haber ver. Her adımı ayrı saate zamanlamak çalışır, ta ki bir gece biri uzayana kadar. İşlem hattı (pipeline) bu adımları tek akışa bağlar. Veri dönüştürmez, düzenler.
Etkinlikler
| Grup | Etkinlik | Tipik kullanım |
|---|---|---|
| Taşıma | Copy data, Copy job | Kaynaktan hedefe |
| Dönüştürme | Dataflow Gen2, Fabric notebook, Stored procedure, SQL script, Spark job definition, Delete data | İş mantığı burada çalışır |
| Denetim | If condition, Switch, ForEach, Until, Wait, Fail, Invoke pipeline, Set variable, Lookup, Get metadata, Filter | Akış |
| Çevre | Teams, Web, Webhook, Functions, Refresh SQL analytics endpoint, Lakehouse maintenance | Bildirim, bakım |
Hat başına varsayılan sınır 120 etkinliktir (iç etkinlikler dahil). Yaklaşıyorsan Invoke pipeline ile böl. Modeli yenilemek için Semantic model refresh etkinliği vardır (Direct Lake’te çerçeveleme yapar).
Bağımlılık: dört yol
Etkinlikler arasındaki oklar koşulludur:
| Koşul | Sonraki etkinlik ne zaman çalışır? | Kullanım |
|---|---|---|
| Başarıda (UponSuccess) | Önceki başarılıysa | Ana akış |
| Hatada (UponFailure) | Önceki başarısızsa | Teams bildirimi |
| Tamamlandığında (UponCompletion) | Başarılı ya da başarısız fark etmez | Temizlik, günlük yazma |
| Atlandığında (UponSkip) | Önceki atlanmışsa | Nadir yollar |
Birden çok ok aynı etkinliğe bağlanırsa koşullar birlikte aranır. “A hata ya da B hata” için tek bir bildirim etkinliğine iki hata oku bağlamak, ikisinin de hata vermesini bekler; ayrı bildirim kullan ya da Tamamlandığında ve durum ifadesiyle kur. Ayrıntı için Learn’deki güncel belgeyi izle.
Yeniden deneme ve zaman aşımı
| Ayar | Varsayılan | Not |
|---|---|---|
| Timeout | 12 saat; en fazla 7 gün | 0.12:00:00 biçiminde |
| Yeniden deneme | Ayarlı değilse denemez; açılırsa 1 kez | Geçici ağ hatası için |
| Yeniden deneme aralığı | 30 saniye | |
| Secure input/output | Kapalı | Gizli değeri günlükten saklar |
Yeniden deneme güvenli olmayan adımı tehlikeye atar: “ekle” yapan bir kopyalama yeniden denenirse satırlar iki kez yazılır. Bu yüzden hat yeniden çalıştırılabilir (idempotent) olmalı: tam yüklemede önce temizle, artımlı yüklemede anahtarla birleştir.
Parametre, değişken, ifade
Parametre çalışma başına sabittir. Değişken çalışma sırasında değişir. Değerler dinamik içerik ifadesiyle kullanılır:
@pipeline().parameters.Ortam // parametre
@variables('SonTarih') // değişken
@activity('Lookup1').output.firstRow.WatermarkValue // önceki etkinliğin çıktısı
@pipeline().RunId // bu çalışmanın kimliği
@concat('satis_', formatDateTime(utcNow(), 'yyyyMMdd'), '.csv')
"Ortam: @{pipeline().parameters.Ortam}" // metin içine gömme
İki ayrıntı sınavda ve işte can sıkar. Birincisi: tek başına @pipeline().parameters.Sayi sayı döndürür, @{pipeline().parameters.Sayi} metin döndürür. İkincisi: zamanlamadan parametre geçerken ad birebir eşleşmeli; yanlış yazılan ad hata vermeden yok sayılır ve varsayılan değerle çalışır.
Filigranla artımlı yükleme
Her gece her şeyi kopyalamak yerine yalnız değişeni al. Learn’ün örneğindeki kalıp:
- Lookup: filigran tablosundan son değeri oku.
- Lookup: kaynağın en büyük değişim zamanını oku.
- Copy data: ikisi arasındaki satırları al.
- Stored procedure: filigranı yeni değere güncelle, yalnız kopyalama başarılıysa.
SELECT * FROM dbo.Satislar
WHERE DegisimZamani > '@{activity('EskiFiligran').output.firstRow.Deger}'
AND DegisimZamani <= '@{activity('YeniFiligran').output.firstRow.Deger}'
Üst sınır neden şimdiki zaman değil? Çünkü Lookup ile kopya arasında gelen satırlar bir sonraki gece alınsın diye en büyük değer sabitlenir. Copy job bunun büyük kısmını kendiliğinden yapar; hattı yalnız çevresinde başka iş varsa kur. Silinen satırlar filigranla görünmez; CDC ya da karşılaştırma gerekir.
Zamanlama ve tetikleyici
- Zamanlama: hat başına en çok 20. Başlangıç ve bitiş tarihi zorunlu; uzun süre için uzak bir bitiş ver. Saat dilimini bilinçli seç.
- Aralık tabanlı zamanlama (önizleme): pencere başlangıç ve bitişi parametresi verir; düzenlenemez, silip yeniden kurulur.
- Olay tetikleyici: OneLake ya da Blob’a dosya düşünce çalışır. Bir Reflex öğesi oluşur, olay akışı üstüne kuruludur.
- Çalıştırma koşulları (önizleme): üst hattın ya da verinin hazır olmasını bekler.
Olay ifadesinde boş değere dikkat: elle test edince değer gelmez, güvenli gösterim kullan: @pipeline()?.TriggerEvent?.FileName. Hata e-postası Hata bildirimleri ayarıyla kurulur ve yalnız zamanlanmış çalışmalarda gider; elle çalıştırmada gitmez.
İzleme ve teşhis
Tuvalin altındaki Çıktı sekmesi her etkinliğin durumunu, süresini, girdi ve çıktısını gösterir. Geçmiş çalışmalar Monitor hub’dadır. Teşhis sırası: ilk kırmızı etkinliği bul, hata iletisini oku, girdiyi kontrol et (ifadeler doğru çözüldü mü?), sonra çıktıya bak. İşlem hattı Copilot’u hatayı açıklayabilir ama nedeni kanıtlamaz (“Fabric’te Copilot” dersi).
| Belirti | Olası neden | Çözüm |
|---|---|---|
| Hat başarılı, satır 0 | Filigran ifadesi hep aynı, parametre adı yanlış | Girdiyi aç; adı eşleştir |
| Satırlar iki kat | Ekle modu ve yeniden deneme | Temizle ya da birleştir |
| Model eski veriyi gösteriyor | Yenileme bağımsız saatte, ya da hatada da çalışıyor | Başarıda oku |
| Sonraki adım yeni tabloyu görmüyor | SQL uç noktası eşitlenmedi | Refresh SQL analytics endpoint |
| Hata var, kimse haber almadı | Elle çalıştırma, ya da hata yolu yok | Bildirim ve Fail |
| Şirket içi kopyada bağlantı hatası | Ağ geçidi sürümü, güvenlik duvarı | Sürüm ve *.frontend.clouddatahub.net |
Files/ham/Urunler.csv dosyasını Urunler_PL tablosuna yaz (beklenen: 40 satır). Ardından bir Notebook etkinliği ekle ve okla bağla. Sonuna Fail ve hata yolu ekle, kasıtlı olarak yanlış dosya adıyla çalıştırıp Çıktı sekmesini oku.