Come migrare i dati da locale al cloud: Amazon S3

Come migrare i dati da locale al cloud: Amazon S3

  • Eric Higaki
    Eric Higaki joined Talend in 2017 as an Associate Evangelist. In this role, Eric works on the community team to provide technical support and brand awareness. Prior to Talend, Eric worked on the Integration team at the largest protein producing company in the world, while also studying at Colorado State University. Go Rams!

Migrazione nel cloud

Il 2018 è stato l'anno del boom del cloud: un numero crescente di aziende ha optato per le tecnologie nel cloud ed è pertanto importante capire come poterlo sfruttare al meglio. Una delle maggiori difficoltà che si trovano ad affrontare oggi le imprese è il trasferimento dei propri dati dai database locali ai servizi di archiviazione nel cloud. Senza gli strumenti giusti il processo può risultare lungo e noioso, ma per fortuna Talend offre un valido aiuto.

In Talend ho dovuto prendere il nostro database locale, MySQL, e trasferirlo in Amazon S3, la nostra piattaforma di archiviazione nel cloud. Invece di gestire le complessità di Apache Sqoop, ho deciso di creare un job all'interno di Talend che potesse essere eseguito ogniqualvolta si fosse manifestata l'esigenza di trasferire nuovi dati nel cloud. Grazie a questo metodo sono riuscito a risparmiare tempo prezioso, che ho potuto impiegare per analizzare i miei dati appena migrati. In questo blog spiegherò come ho creato il mio job. Senza ulteriori indugi, andiamo dritti al punto!

Creazione di una connessione

Come per qualsiasi job Talend, la prima cosa da fare è creare le connessioni. Dato che ho un database MySQL, utilizzerò il componente tMysqlConnection. Devo anche creare una connessione al mio servizio di archiviazione nel cloud S3 e per questo utilizzo tS3Connection. Poiché la connessione a MySQL e a S3 è il primo passaggio da compiere ogni volta che viene eseguito questo job, bisogna aggiungere tPrejob prima di entrambi i componenti.

È bene ricordare che Talend è uno strumento di generazione di codici; utilizzando tPrejob posso controllare cosa sarà sempre compilato per primo e assicurarmi di essere sempre connesso ai miei database. Dopo avere configurato entrambi i componenti della connessione, posso connettere tPrejob, tMysqlConnection e tS3Connection come illustrato nello screenshot seguente.

Scelta delle tabelle e impostazione dello schema dinamico

Ora che sono connesso a entrambe le piattaforme, posso avviare il processo di migrazione nel cloud da MySQL ad Amazon S3. Per iniziare mi occorre un elenco di tutte le tabelle che intendo trasferire dal database. Utilizzando tMysqlTableList posso specificare le tabelle che desidero elencare attraverso la clausola "WHERE".Però, in questo caso, voglio eseguire il pull soltanto dalle tabelle "customer".

Ora che ho l'elenco di tutte le tabelle che intendo trasferire, procedo per ottenere un elenco delle colonne all'interno della tabella che mi interessa.

Per estrarre i valori dai componenti il metodo migliore è utilizzando le variabili globali "tMysql". Si tratta di variabili in grado di estrarre i dati dai componenti "tMysql" affinché possano essere utilizzati da altri componenti. In questo caso "((String)globalMap.get(“tMysqlTableList_1_CURRENT_TABLE”))" creerà le colonne per il pull del componente a partire dalle tabelle che erano state raccolte dal componente tMysqlTableList. Con Talend è semplice recuperare le variabili globali senza doverle memorizzare. È sufficiente digitare "tMysql" e premere Ctrl + spazio: in questo modo tutte le variabili globali saranno visualizzate in un elenco dal quale si potrà scegliere quella desiderata.

Adesso devo aggiungere un tFixedFlowInput per generare le colonne "tableName" e "columnName". I valori saranno visualizzati soltanto all'interno del componente tFixedFlowInput se prima configuro lo schema per queste colonne. Dopo avere configurato lo schema posso impostare il valore per le colonne, che sarà ((String)globalMap.get(“tMysqlTAbleList_1_CURRENT_TABLE”)) per "tableName" e ((String)globalMap.get(“tMysqlTAbleList_1_COLUMN_NAME”)) per "columnName".

L'aggiunta di un tLogRow dopo il flusso fisso mi consentirà di vedere i nomi delle tabelle e delle colonne dalle quali il mio job sta eseguendo il pull visualizzando le informazioni sulla console di esecuzione. Sotto è riportato uno screenshot aggiornato del job fino a questo punto.

Ora devo impostare lo schema dinamico che sarà utilizzato dai dati durante l'esecuzione del pull dal mio database locale. Come suggerisce il nome, uno schema dinamico è un tipo di schema che varia in funzione della colonna che viene letta di volta in volta, pertanto è un elemento essenziale per il job.

Per impostare lo schema dinamico userò un componente di fantasia chiamato tSetDynamicSchema, che mi consentirà di impostare dinamicamente lo schema in base al valore "columnName". Grazie a questo schema dinamico non sarò costretto a spostare ogni tabella singolarmente, ma potrò spostarne più di una con facilità.

Lettura dei dati e scrittura delle tabelle

Dopo avere configurato il mio schema dinamico sono pronto per iniziare a leggere i dati della tabella utilizzando il tipo dinamico creato dal componente tSetDynamicSchema. Dato che sto leggendo i dati dal mio database locale, devo utilizzare un componente di input che leggerà dal database MySQL, tMysqlInput. Devo innanzitutto modificare lo schema del componente tMysqlInput per utilizzare il tipo DB dinamico. Alla colonna di questo schema ho assegnato il nome "dynamic_row", con tipo "Dinamico" (ovviamente) e tipo DB "VARCHAR".

Terminata la configurazione dello schema, posso passare a quella del componente tMysqlInput, assicurandomi che i dati siano estratti dalla tabella corrente elencata in tMysqlTableList.

A questo punto i dati nelle tabelle vengono letti dalla tabella corrente elencata, ma devono ancora essere scritti nel file CSV. Per fare ciò userò tFileOutputDelimited. Devo assicurarmi che il "nome file" segua il percorso file corretto.

Ecco, la procedura è quasi terminata. Questa è una vista aggiornata del job che ho creato fino a questo punto.

Spostamento dei file su Amazon S3

Fino a qui il job legge tutte le tabelle con nome "customer" e le scrive in file CSV archiviati in una cartella specificata. Ora che posso estrarre i dati dalle tabelle del mio database locale, devo terminare il job spostando questi file su Amazon S3.

tFileList mi permetterà di avere un elenco di tutti i file contenuti in una cartella specificata, oppure, come in questo caso, di avere un elenco di tutte le tabelle che ho estratto dal database locale. Non mi resta che specificare la directory in cui si trovano i file.

Ottenuto l'elenco di tutti i file, posso iniziare a spostarli in uno dei miei bucket S3 servendomi del componente tS3Put. Non mi resta che specificare i campi "Bucket", "Key" e "File". Il campo "Key" indica il nome del file all'interno di S3, mentre "File" indica il nome del file che viene caricato su S3.

A questo punto la configurazione di tFileList e tS3Put è completata e non resta che dare qualche tocco di finitura al job di migrazione nel cloud. Torniamo alle connessioni che avevo aperto all'inizio del job. Con l'aiuto di tPostjob, tMysqlClose e tS3Close posso chiudere le connessioni che avevo aperto ad ogni singola esecuzione del job. Per poter controllare cosa accade dopo avere compilato il loop principale, aggiungo il componente tPostjob. Facilissimo! Il job finito dovrebbe assomigliare a questo.

Esecuzione del job

Se il job è in esecuzione e tutto è impostato al meglio, la console di esecuzione dovrebbe apparire come nello screenshot riportato qui sotto. Come si può vedere, la console mostra la tabella che viene letta e scritta e il nome della colonna corrispondente.

Una volta terminato il job posso spostare qualsiasi tabella dal mio database locale alla piattaforma di archiviazione nel cloud senza dover creare un job per ogni tabella e senza il rischio di confondermi usando la codifica manuale. Sembra pronto per il cloud.

Guarda questa demo LIVE

Vuoi guardare questa demo dal vivo? Unisciti a noi giovedì 22 marzo sulla pagina Facebook di Talend per #TalendDevLive: creerò questo job passo per passo e risponderò alle vostre domande. Non mancare!

Partecipa alla discussione

0 Comments

Scrivi una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *