Il controllo temporale dei data file in staging area

of 18 /18
Come avere il controllo temporale dei data file in Staging Area Tecniche di Data Warehouse and Business Intelligence Sei quello giusto ? Hai quello che mi aspetto ? Sei completo? DATA FILE

Embed Size (px)

Transcript of Il controllo temporale dei data file in staging area

  1. 1. Come avere il controllo temporale dei data file in Staging Area Tecniche di Data Warehouse and Business Intelligence Sei quello giusto ? Hai quello che mi aspetto ? Sei completo? DATA FILE
  2. 2. In questo articolo concentriamo la nostra attenzione sulla gestione del giorno di caricamento del data file, del giorno di riferimento dei dati associato al data file, e sul numero di righe atteso. Questi temi sono gi stati trattati in modo sintetico in alcuni miei articoli precedenti pubblicati su slideshare e sul mio blog. Ora ne vediamo l'applicazione pratica. Come caso reale, useremo come esempio il data file dei mercati MTF (Multilateral Trading Facilities). Al data file stato associato un "row" file che contiene al suo interno il numero di righe attese nel data file stesso. Il file di controllo, creato a mano a tal fine, composto da tre righe: #MTF CONTROL FILE OF 20160314 ROWS = 160 #END OF MTF CONTROL FILE OF 20160314 Supponiamo che il data file debba arrivare tutti i giorni lavorativi, e il giorno di riferimento dei dati il giorno lavorativo precedente. Il giorno di riferimento specificato nel nome del file, ma dobbiamo fare attenzione, perch il sistema alimentante imposta, come riferimento, il giorno di produzione del flusso e non il giorno lavorativo precedente. Il caso di esempio
  3. 3. Sulla base delle informazioni indicate in precedenza, per avere il pieno controllo del caricamento del data file, il sistema ETL deve fornirmi tutte le informazioni necessarie per esaudire i seguenti requisiti. Dobbiamo avere una visione chiara di quali sono le caratteristiche del data file, sia di tipo generale, sia di tipo strettamente tecnico. In particolare, quelle legate al suo nome, alla struttura del file, al modo con cui definito il giorno di riferimento dei dati, alla struttura del suo file di controllo (se presente) Ovviamente dobbiamo sapere quali sono le caratteristiche temporali del data file utilizzando un codice che ne rappresenta la gestione. I requisiti di controllo
  4. 4. Per comodit riassumo i modi con cui il sistema alimentante pu indicarmi il giorno di riferimento dei dati. I requisiti di controllo A column of data file Inside the data file Where is the reference day of data ? In the heading of data file In the tail of data file In the name of data file Missing, assume the system date Outside the data file
  5. 5. Dobbiamo avere una visione chiara di quale la struttura interna del data file, cio quali sono le colonne che lo costituiscono. E per ogni colonna devono essere presenti quanti pi metadati possibili. Sia statici, come il tipo o la lunghezza, che dinamici, come la presenza di un dominio di valori o se la colonna fa parte della chiave univoca. I requisiti di controllo
  6. 6. I requisiti di controllo Dobbiamo avere una tabella di calendario che, per ogni giorno solare, mi dica, duplicandone semplicemente il giorno, se mi aspetto larrivo del data file e quale il giorno di riferimento atteso dei dati contenuti nel data file di quel giorno. Se il data file contiene pi giorni, devo sapere quale il range di giorni che mi aspetto.
  7. 7. I requisiti di controllo Dobbiamo sapere lesito conclusivo della elaborazione. Lo stato finale e il tempo impiegato. Se il caricamento ha avuto problemi, devo sapere lerrore prodotto e quale il modulo che lo ha generato. Se lesito negativo, dobbiamo sapere esattamente perch si generato lerrore. Per esempio, se fallito il controllo di congruenza, devo sapere in quale punto si verificato.
  8. 8. I requisiti di controllo Dobbiamo sapere lesito finale del controllo dei giorni di riferimento del flusso e dei dati. Per ottenere lesito finale dei controlli indicato in figura, dobbiamo pensare a implementare una logica di controllo simile a quella indicata nella figura successiva. In verde scuro le situazioni sicuramente corrette. In rosso le situazioni di allerta. In verde chiaro quelle presumibilmente corrette ma che richiedono attenzione.
  9. 9. I requisiti di controllo 1 OK (arrived and right day) Expected day = reference day ? It had to arrive ? Data file is arrived ? 2 - NOT OK ( arrived but wrong day) 3 - OK (unespected file) 4 - NOT OK (unespected file and wrong day) 5 - OK (maybe file) 6 - NOT OK (maybe file and wrong day) 7 - NOT OK (missing file) 8 OK (no file to load) 9 - OK (maybe file) Expected day = reference day ? Expected day = reference day ? It had to arrive ? yes no maybe yes no maybe yes yes yes yes no no no no
  10. 10. I requisiti di controllo Dobbiamo avere via email lesito della elaborazione. Utilizzando la Micro ETL Foundation possiamo gestire questa situazione e il suo controllo in pochi passi. MEF: Aprire il link: https://drive.google.com/open?id=0B2dQ0EtjqAOTQzZSaUlyUmxpT1k Accedere alla cartella mef_v2 e seguire le istruzioni del readme. Il data file presente nella cartella ..dat e si chiama mtf_export_20160314.csv. Il file di controllo con il numero di righe atteso si chiama mtf_export_20160314.row. Anche esso presente nella cartella ..dat Il file che configura la struttura dei campi del data file si trova nella cartella ..cft e si chiama mtf.csv
  11. 11. Configurazione del data file e del file di controllo Il primo step quello di inserire in una tabella di configurazione, che chiameremo per brevit IO_CFT, tutte le informazioni che conosciamo sulla caratteristiche del data file che dobbiamo caricare. Inoltre, per questo caso, bisogna inserire in IO_CFT anche le informazioni relative al file di controllo. Il secondo step quello di inserire nella tabella IO_CFT, l'informazione relativa al giorno atteso di arrivo del data file. Dobbiamo definire un codice, chiamiamolo FR_COD (File Reference Code) dietro il quale ci sar la logica di caricamento di una seconda tabella di configurazione che chiameremo IODAY_CFT. Il codice FR_COD rappresenta la periodicit di arrivo del flusso. Per il momento sono stati definiti alcuni valori di uso comune: AD = Tutti i giorni. Significa che il data file deve arrivare tutti i giorni. Quindi nella IODAY_CFT saranno valorizzati tutti i giorni. AWD = Tutti i giorni lavorativi. Significa che il data file deve arrivare solo nei giorni lavorativi. Quindi tutti i giorni festivi pi i sabati e le domeniche saranno null. ? = Non so quando arriva, variabile. Tipico di alcuni flussi mensili di cui non si sa di precisione quando saranno disponibili. Sulla base del codice FR_COD sar caricata la tabella IODAY_CFT impostando la presenza del giorno atteso nel campo FR_YMD.
  12. 12. Configurazione dei giorni di riferimento dei dati Il terzo step quello di inserire nella tabella IO_CFT, l'informazione relativa al giorno di riferimento atteso dei dati. Il codice DR_COD deve indicare quale deve essere il giorno di riferimento dei dati nel data file. Ricordo che il giorno di riferimento dei dati deve sempre essere presente o deducibile. La stessa logica che stata applicata al campo FR_COD si applica anche al campo DR_COD. Servir per valorizzare la IODAY_CFT. Per il momento sono stati definiti solo alcuni valori di uso comune: 0 = il giorno di riferimento coincide con il giorno corrente. 1 = il giorno di riferimento coincide con il giorno precedente, cio il corrente -1 1W = indica il primo giorno lavorativo precedente. L'attivit di configurazione della tabella IODAY_CFT avviene solo una volta in fase di configurazione del flusso. Dopo non sar pi necessario intervenire. Notate che l'utilizzo dei codici un modo per agevolare velocemente l'attivit di configurazione della tabella IODAY_CFT. Nessuno vi impedisce di modificare a mano la tabella o con SQL ad-hoc.
  13. 13. Configurazione del fattore di correzione Il codice OFF_COD presente nella IO_CFT indica il fattore di correzione da applicare al giorno di riferimento dei dati indicato dal sistema alimentante. Il campo OFF_COD non agisce nel controllo, ma agir come correttore di giorno a run-time. Per il momento sono stati definiti alcuni codici di uso comune: 0 = il giorno di riferimento coincide con il giorno indicato dal sistema alimentante. 1 = il giorno di riferimento coincide con il giorno precedente, cio il corrente -1 1W = il giorno di riferimento coincide con il giorno lavorativo precedente. I campi FROM_DR_YMD e TO_DR_YMD hanno lo stesso significato del campo FR_COD, ma permettono di identificare un range di date di riferimento possibili. Per il momento stato definito un solo codice PM = mese precedente del giorno solare corrente. MEF: Il data file presente nella cartella ..dat e si chiama mtf_export_20160314.csv. Il file di controllo con il numero di righe atteso si chiama mtf_export_20160314.row. Anche esso presente nella cartella ..dat Il file che configura la struttura dei campi del data file si trova nella cartella ..cft e si chiama mtf.csv Il file di configurazione del data file si chiama io_mtf.txt e si trova sotto la cartella ..cft. Ha le seguenti impostazioni:
  14. 14. Configurazione del fattore di correzione IO_COD:MTF (data file code) IO_DEB:Multilateral Trading Facilities (descrizione del data file) TYPE_COD:FIN (tipo data file file di input) SEC_COD:ESM (sistema alimentante: ESMA) FRQ_COD:D (requenza giornaliera) FILE_LIKE_TXT:mtf_export%.csv (nome generico del data file senza data) FILE_EXT_TXT:mtf_export_20160314.csv (nome del data file di esempio) HOST_NC:., (priorit sul segno decimale) HEAD_CNT:1 (numero di righe di testata) FOO_CNT:0 (numero righe di coda) SEP_TXT:, (simbolo separatore se csv) START_NUM:12 (carattere di partenza del giorno di riferimento nel nome) SIZE_NUM:8 (dimensione del giorno) RROW_NUM:2 (riga del file di controllo in cui si trova il numero righe del data file) RSTART_NUM:8 (dove inizia il numero delle righe) RSIZE_NUM:6 (dimensione del numero) MASK_TXT:YYYYMMDD (formato del giorno) FR_COD:AWD (codice dei giorni di riferimento del data file) DR_COD:1W (codice dei giorni di riferimento dei dati) OFF_COD:1W (offset sul gorno di riferimento) RCF_LIKE_TXT:mtf_export%.row (nome generico del file di controllo senza data) RCF_EXT_TXT:mtf_export_20160314.row (nome del file di controllo di esempio) FTB_TXT:NEWLINE (indicatore fine riga per external table) TRUNC_COD:1 (indica se la tabella di staging deve essere troncata prima del caricamento) NOTE_IO_COD:MTF (presenza di un file di note)
  15. 15. Configurazione dei giorni di riferimento L'attivit di configurazione della tabella IODAY_CFT avviene solo una volta in fase di configurazione del flusso. Dopo non sar pi necessario intervenire. MEF: Il codice DR_COD gestito della funzione mef_sta_build.p_dr_cod Il codice FR_COD gestito della funzione mef_sta_build.p_fr_cod Il codice OFF_COD gestito dalla funzione mef_sta.f_off_cod . Vedi ulteriore dettaglio in Recipe 12 su Slideshare Le funzioni che gestiscono il range di giorni sono la mef_sta_build.p_from_dr_cod e la mef_sta_build.p_to_dr_cod. In questo modo modificando le funzioni possiamo definire altri codici. La procedura mef_sta_build.p_objday_cft caricher la tabella IODAY_CFT La configurazione completa del data file avviene lanciando la procedura SQL> @sta_conf_io MTF
  16. 16. Caricamento del data file Il processo di caricamento del data file, deve inserire in una tabella di log le informazione relative alla data di elaborazione del flusso e al giorno di riferimento dei dati ricevuto dal sistema alimentante. MEF: SQL> exec mef_job.p_run('sta_esm_mtf'); Confrontando, a fine caricamento, quanto configurato con quanto stato caricato, possiamo dedurre un esito finale di correttezza. Questo confronto pu essere visualizzato per mezzo di una vista che chiameremo IODAY_CFV. La logica con cui lavora la vista stata sintetizzata in una figura precedente. Sulla base di questo esito, dovr essere concordata una strategia di intervento. Nel nostro caricamento di esempio, lanciato in un giorno lavorativo, vediamo che c' un problema nel giorno di riferimento. Inoltre c' un altro problema su cui indagare: il numero di righe dichiarate nel file di controllo diverso dal numero di righe caricate..
  17. 17. Conclusione Qualunque sia il modo con cui implementeremo una soluzione, il punto importante da sottolineare che dobbiamo conoscere prima le precise caratteristiche temporali del data file che dobbiamo caricare. Per ogni giorno solare, dobbiamo avere chiaro quali data file mi aspetto di ricevere in quel giorno e, per ogni data file, quale il giorno di riferimento dei dati che mi aspetto di trovare al suo interno. Non possono esserci dubbi o ambiguit: sono informazioni che dobbiamo conoscere a priori e che dobbiamo configurare. Terminato il processo di caricamento della Staging Area, solo il confronto tra quello che prevedevamo di ricevere con quello che abbiamo effettivamente ricevuto, ci permetter di valutare la correttezza dei dati caricati. E' giusto ricordare che questa verifica di correttezza prioritaria ed riferita solo alle due componenti temporali dei dati. Solo se questi controlli sono positivi, avr senso proseguire con gli altri controlli di qualit.
  18. 18. Riferimenti Su Slideshare la serie Recipes of Data Warehouse and Business Intelligence. Blog: http://microetlfoundation.blogspot.it http://massimocenci.blogspot.it/ Micro ETL Foundation free source at: https://drive.google.com/open?id=0B2dQ0EtjqAOTQzZSaUlyUmxpT1k Last version v2. Email: [email protected]