Gece yüklemesi neden yarıda kalır?
Kaynak dosyada bir satırın tutarı abc ise CAST hata verir ve bütün yükleme durur. Sabah rapor boştur, üstelik hangi satır yüzünden olduğunu kimse bilmez. İşletilen bir boru hattı üç şeyi ayırır: temiz satırlar yüklenir, bozuklar nedeniyle ayrı tabloya yazılır, her çalışma günlüğe bir satır bırakır.
etl_ tabloları hayali bir gece yüklemesi için elle kuruldu. Gerçek bir sistemden alınmadı; bozuk satırlar bilerek kondu.Bozuk satırı ayıklamak: TRY_CONVERT
TRY_CONVERT dönüşemeyen değerde hata vermez, NULL döner. Bu yüzden bozuk satır bulmanın temel aracıdır. İki tuzak: boş metin INT için 0, DATE için 1900-01-01 olur, NULL dönmez; boşu ayrıca sına. 05.11.2024 gibi tarih de dil ayarına göre 5 Kasım ya da 11 Mayıs okunabilir; kaynağı yyyy-MM-dd ya da stil koduyla netleştir.
SELECT stg_id, kaynak_no, tutar, TRY_CONVERT(DECIMAL(12, 2), tutar) AS sayi, islem_tarihi, TRY_CONVERT(DATE, islem_tarihi) AS tarih FROM etl_stg_hareket ORDER BY stg_id;
Nedeniyle reddetmek
Red tablosu yalnız "bozuk" demez, neden yazar. Sabah ilk bakılan şey hangi nedenin arttığıdır.
INSERT INTO etl_red (stg_id, neden, batch_id)
SELECT stg_id,
CASE WHEN hesap_no IS NULL THEN 'hesap bos'
WHEN TRY_CONVERT(DATE, islem_tarihi) IS NULL THEN 'tarih bozuk'
ELSE 'tutar bozuk' END,
43
FROM etl_stg_hareket
WHERE hesap_no IS NULL
OR TRY_CONVERT(DATE, islem_tarihi) IS NULL
OR TRY_CONVERT(DECIMAL(12, 2), tutar) IS NULL;
SELECT neden, COUNT(*) AS satir FROM etl_red GROUP BY neden ORDER BY neden;
Mükerrer kayıt
Kaynak aynı kaydı iki kez gönderebilir. Hangi satırın kalacağı kurala bağlanır: burada temiz satırlar içinde kaynak_no başına en küçük stg_id. Önce süz, sonra numaralandır: K1015'in ilk kopyası bozuk, ikincisi temiz.
SELECT stg_id, kaynak_no, ROW_NUMBER() OVER (PARTITION BY kaynak_no ORDER BY stg_id) AS sira FROM etl_stg_hareket WHERE kaynak_no = 'K1007';
Yükleme günlüğü ve batch_id
Her çalışma batch_id alır. Fact ve red satırı bu numarayı taşır, böylece hatalı bir yüklemeyi yalnız o numarayla geri almak mümkün olur.
| Alan | Neden tutulur |
|---|---|
okunan, yuklenen, reddedilen, mukerrer | Mutabakat: okunan = yüklenen + reddedilen + mükerrer olmalı. Tutmuyorsa satır kaybolmuştur. |
baslangic, bitis | Süre artışı sorunun erken işaretidir. |
durum | Hata alan çalışma da satır bırakır; günlükte yoksa hiç başlamamış demektir. |
Sıra önemli
Red kaydı yüklemeden önce yazılır, fact yüklemesi de reddedilenleri dışlar. Tersi yapılırsa bozuk satır CAST hatasıyla her şeyi durdurur. Aynı batch yeniden çalışırsa önce o batch'in satırları silinir: yeniden çalıştırmak çift satır üretmemeli.