ETL & BI

Dovrei impelementare un ETL in php da file csv a DB MySQL. Questi dati saranno trattati da un eventuale prodotto di BI...

Quindi mi serve utilizzare un prodotto per ETL o un prodotto di BI che implementa anche gli ETL. Consigli?

Grazie

inviato 5 anni fa
larchitetto
Escludi l'utilizzo di applicazioni desktop per caricare i dati da CSV? SQLYog ad esempio permette di caricare con una certa flessibilità in MySQL i dati presenti in un CSV.Gianni Tomasicchio 5 anni fa
Si tratta di una app server e dubito che l'hosting mi permetta di accedere al mysql da remoto. L'app desktop al limite potrebbe generare i file .sql... Preferirei però un etl lato server.larchitetto 5 anni fa
@larchitetto La struttura dei file CSV è differente dalla struttura delle tabelle? Devi effettuare una conversione dei dati prima di inserirli? Non hai pensato a realizzare personalmente uno script PHP che faccia il lavoro? Oppure potresti fare tutto in SQL? Quali di queste "varianti" potresti percorrere?Gianni Tomasicchio 5 anni fa
La struttura CSV è diversa dalle tabelle, per cui serve un minimo di normalizzazione prima di popolare il DB. Vorrei evitare di sviluppare da zero (sia script che sql) perché poi potrei avere problemi di efficienza legata alla lettura dei file CSV (come mi è già capitato) e l'obiettivo che dovrei raggiungere non è l'ETL (è solo un mezzo): quindi sottrarrei del tempo prezioso per sviluppare qualcosa che magari esiste già...larchitetto 5 anni fa
@larchitetto Purtroppo non conosco degli script per caricare file CSV previa normalizzazione. Al tuo posto lo realizzerei ad hoc, proprio per ottimizzarne le performance.Gianni Tomasicchio 5 anni fa
Per non avere problemi di efficienza, di cosa dovrei tener conto e quali librerie potrei utilizzare?larchitetto 5 anni fa
X 0 X

Potresti realizzare uno script per leggere il file CSV, manipolare i dati ed inserirli nel DB.

La lettura del file va fatta utilizzando la funzione fgetcsv, passando anche come secondo parametro la massima lunghezza prevista per la singola riga del file CSV, in modo da migliorarne la velocità.

Nel ciclo di lettura del file CSV (da realizzare in maiera simile a quanto mostrato nella documentazione di fgetcsv) devi modificare i dati letti ed inserirli nel DB. Se utilizzi tabelle transazionali (InnoDB) potresti avviare la transazione prima di iniziare il ciclo e chiuderla (COMMIT) all'uscita del ciclo, sempre per ottimizzare le performance e per rendere atomica l'operazione.

Se i file da caricare sono molto grossi ti sconsiglio di preparare un form di upload per caricare il file, piuttosto ti conviene portarlo sul server via FTP. Lo script PHP non dovrebbe consumare molta memoria ma la sua esecuzione potrebbe durare diversi secondi se il file è grande. In questo caso dovresti lanciare ad inizio script la funzione set_time_limit(0) per impedire l'interruzione dell'esecuzione. Se il server è in hosting non è detto che ciò sia permesso.

risposto 5 anni fa
Gianni Tomasicchio
X 0 X X
Effettua l'accesso o registrati per rispondere a questa domanda