Come analizzare eventi e generare eventi specifici: trigger o query ad hoc

4

Qual è il metodo migliore per analizzare gli eventi nei batch giornalieri da fonti esterne (file CSV) che producono voci in una tabella separata se viene soddisfatta una delle condizioni multiple. Le condizioni possono variare nel tempo e devono mantenere un certo livello di flessibilità. Sono tuttavia condizioni semplici, o un campo è uguale, inizia o contiene determinate stringhe.

Quello che immagino sono 2 tabelle, la prima tabella per importare i dati esterni e un secondo per mantenere una registrazione parziale dell'evento con un qualche tipo di valutazione a seconda di quale condizione è stata soddisfatta. La mia domanda ruota su come realizzare il riempimento uno con l'altro. Il mio primo pensiero è stato quello di aggiungere un trigger sulle condizioni nella prima tabella che inserisce i valori sul secondo. Un altro pensiero era di eseguire una query pianificata sulla prima tabella, a volte dopo il caricamento giornaliero, che si inserisce nella seconda tabella. Il primo metodo che utilizza i trigger sembra essere oneroso da mantenere e modificare in base ai requisiti. Il secondo sembra più sovraccarico in quanto verrebbe eseguito su procedure pianificate, una da caricare e la seconda da riempire la seconda tabella.

Ogni pensiero è benvenuto. A questo punto non è stato creato nulla, tranne il formato in cui verranno ricevuti i file .CSV. Grazie per aver letto il mio post e tutti coloro che hanno contribuito.

    
posta nbayly 28.09.2016 - 19:34
fonte

1 risposta

2

database

La prima domanda riguarda ciò che vuoi veramente nel tuo database. Il tuo attuale approccio sarebbe avere una tabella di condizioni, mantenere i dati di origine che importi e costruire la tabella di valutazione degli eventi con alcune informazioni analizzate:

Vuoi veramente mantenere l'evento sorgente nel database?

  • Hai intenzione di ri-analizzare i vecchi eventi in caso di modifica delle condizioni?
  • Contiene molte più informazioni rispetto alla tabella dei voti di cui avresti bisogno (ad esempio per stampare informazioni complete per eventi di alto livello)?
  • Non è chiaro se più condizioni risultino in più corrispondenze (vedi l'immagine), o se c'è una sola valutazione per evento (allora avresti una relazione uno a uno con la fonte dell'evento).

Approccio al database

Se hai bisogno di tutte queste tabelle nel datable, potresti considerare l'elaborazione di tutto questo nel database:

  • potresti usare i trigger come hai descritto, nella tabella SourceEvent: ma questi sono non standard e specifici del fornitore, quindi difficili da portare. Inoltre, l'analisi delle stringhe non viene eseguita in modo molto efficiente nei trigger, in modo che questo dovrebbe essere previsto solo se il tuo CSV è già analizzato dallo strumento di caricamento.
  • potresti anche considerare uno script sql che esegue alcune selezioni e INSERT INTO SELECT . Se esiste una sola valutazione per ogni evento, la sfida consiste nell'aggregare più valutazioni per un evento (ad esempio costruendo una vista aggregata sulla tabella di valutazione). Lo script dovrebbe quindi utilizzare una data o un numero di lotto per limitare l'elaborazione ai nuovi elementi. O se ti puoi permettere: rimuovi i SourceEvents elaborati se non ne hai più bisogno alla fine del riempimento.

In entrambi i casi, devi fare i conti con la logica transazionale: tutte le modifiche verranno confermate solo alla fine, in modo che con file di input di grandi dimensioni si verifichino rallentamenti, aumento della latenza e problemi di prestazioni simili.

Approccio applicativo

Un altro approccio sarebbe quello di sviluppare un programma esterno per automatizzare l'elaborazione completa: ottenere il file sorgente dell'evento, leggere e analizzare il file CSV, applicare al volo l'applicazione delle regole per calcolare il rating. Questo sarà sicuramente più efficiente, in quanto evita di leggere più volte gli stessi dati.

    
risposta data 30.09.2016 - 22:28
fonte

Leggi altre domande sui tag