Domanda

Io sono la creazione di un processo di ETL in MS SQL Server e mi piacerebbe avere errori specifiche per una determinata colonna di una determinata riga. Ad esempio, i dati vengono inizialmente caricati da file excel in una tabella (che chiameremo la tabella iniziale) in cui tutte le colonne sono varchar(2000) e poi in scena i dati a un altro tavolo (la DataTypedTable) che contiene i tipi di dati più specifici (datetime, int, etc.) o lunghezze varchar più strettamente vincolati. Ho bisogno di essere in grado di creare messaggi di errore per un campo specifico come ad esempio: "13 gennaio" non è un formato di data valida per la data di presentazione. Si prega di utilizzare un formato di MM / DD / YYYY

Questi messaggi di errore dovrebbero essere conservati in un modo tale che più avanti nel processo di un processo automatizzato in grado di creare report con i messaggi di errore in modo tale che ogni messaggio fa riferimento a un riga e campo specifico (qualcuno avrà bisogno di tornare indietro e correggere la i dati nel sistema di origine e sottoporre nuovamente il file di Excel). Quindi idealmente si sarebbe inserito in un Guasti tavoli di qualche tipo e contiene la chiave primaria della riga fallito, il nome della colonna, e il messaggio di errore.

Domanda: Quindi mi chiedo se questo può essere realizzato con SSIS, o qualche strumento open source come Talend, e in caso affermativo, quale sarebbe il vostro approccio generale? O quello che mano approccio codificato prendereste?

Coppia approcci ho pensato di utilizzare SQL (fino a quando non ho fatto ETL a mano in procs di SQL, ma voglio prendere in considerazione altre possibili approcci C #, anche..):

Utilizzare un cursore per leggere la tabella iniziale, e per ogni riga inserire un record vuoto con solo la chiave primaria nella tabella DataTyped, quindi utilizzare una singola istruzione di aggiornamento per ogni colonna, tale che se l'aggiornamento non posso inserire un messaggio di errore molto specifico specifico per quella colonna della tabella dei messaggi di errore.

Inserire tutti i dati come è nella tabella DataTyped, ma hanno le colonne duplicati come SubmissionDate e SubmissionDateOld. Dopo l'inserimento iniziale delle * Antiche colonne hanno dati, il resto sono vuote, e ho un unico aggiornamento per ogni colonna che imposta il SubmissionDate basato sul SubmissionDateOld.

Oltre a suggerire un approccio, mi piacerebbe sapere se si sta utilizzando questo approccio o qualcosa di simile già nel lavoro che fate.

È stato utile?

Soluzione

Io uso l'aproach dove ho messo una spaccatura condizionale nel flusso di dati. I record che non riescono le condizioni (data non valida, non ci sono dati in un campo obbligatorio, etc.) vengono poi inviati a una tabella di un'eccezione che include l'identificatore di record, i dati errati, la ragione non è riuscito. È possibile poi in seguito creare un file di foglio di calcolo o di testo di errori da queste informazioni per inviare di nuovo al gruppo di fornire il file. Buoni dischi, naturalmente, andare al percorso pther e sono inseriti nella tabella.

Altri suggerimenti

Che ne dite di un po 'di pulizia / trasformazione prima di caricare nella messa in scena (quello che voi chiamate tavoli iniziali) tabelle? Scaricare i dati da Excel in un file scheda o separati da virgola e quindi utilizzare alcuni linguaggi di programmazione a scelta per fare la pulizia dei dati che avete notato. Inoltre, quanto è grande ogni carico di dati? Si può fare uso di applicazioni multi-threaded e multi-processo per gestire grandi carichi (come il caricamento di alcuni milioni di righe alla volta). Durante questo processo ogni errore si verifica può essere caricato nella tabella eccezione con identificatore, di errore e di commento dettagli. Questa tecnica aiuta ad avere un migliore controllo durante la Fase di pulizia.

Se il carico non è così in alto e si vuole fare la maggior parte del vostro lavoro nel database (SQL), quindi si consiglia di fare quanto più profilazione dati possibile e avere una buona understading di possibili variazioni di dati che ci si può aspettare. Con che è possibile utilizzare componente appropriato (Talend o SSIS) per fare la trasformazione o controllare il flusso di dati. Inoltre, utilizzando le espressioni regolari si può prendere qualsiasi entità che si discosta dalla regola set.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top