<\/figure><\/div>\n\n\n\nUna peculiarit\u00e0 di Firehose consiste nella possibilit\u00e0 di aggiungerlo anche in un secondo momento! \nNella nostra semplice applicazione non lo utilizziamo immediatamente, pertanto le immagini e le analisi vengono salvate direttamente in S3 e AWS Aurora Serverless MySQL da Lambda Functions, nel caso in cui il flusso generato dall’applicazione dovesse crescere potremmo successivamente integrarlo senza difficolt\u00e0 alcuna!\n<\/p>\n\n\n\n
Fase di analisi<\/h2>\n\n\n\n Una volta archiviati i dati, \u00e8 il momento di analizzarli. In questo caso le metodologie possono differire notevolmente. Gli esempi pi\u00f9 comuni vanno dalle semplici query eseguite in database relazionali, ai job analitici complessi eseguiti nei data warehouse di Redshift, oppure all’elaborazione in tempo reale utilizzando EMR o ElasticSearch.\n<\/p>\n\n\n\n
Nel nostro caso possiamo semplicemente eseguire query utilizzando il backend della nostra applicazione web e visualizzare i risultati nel browser.\n<\/p>\n\n\n\n
Tuttavia, in futuro potremmo essere interessati ad eseguire query molto pi\u00f9 avanzate sui nostri dati e magari fare qualche check sulla qualit\u00e0 del dato o training per modelli di Machine Learning. \nPer rendere possibili queste espansioni, occorre quindi spostare i dati da Aurora a S3 per analizzarli con job Glue e Databrew e, se necessario, caricarli facilmente con Apache Spark da Glue o AWS EMR. Per fare ci\u00f2 possiamo seguire diversi strade: ad esempio potremmo usare il servizio AWS DataMigration per spostare i dati su S3 come file Parquet oppure potremmo creare un Glue Job, caricare i dati usando Glue Connection da RDS con Spark e poi scriverli in S3. <\/p>\n\n\n\n
Dopo questo passaggio, sarebbe necessario eseguire un crawler Glue per creare un DataCatalog che verr\u00e0 utilizzato da Athena e Glue per query e jobs.<\/p>\n\n\n\n
Qui tuttavia mostreremo un percorso diverso e talvolta molto pi\u00f9 flessibile per esportare i dati in modo pulito e catalogarli da un database relazionale: <\/span>Athena custom data source.<\/b><\/p>\n\n\n\n Per impostazione predefinita, Athena viene fornito con l\u2019integrazione S3 – Glue Data Catalog, ma di recente AWS ha dato la possibilit\u00e0 di aggiungere un’origine dati personalizzata, ad esempio database connessi tramite JDBC, AWS CloudWatch o l\u2019esecuzione di query su S3 ma utilizzando un metastore Apache Hive personalizzato. Nel nostro caso siamo interessati a connetterci a MySQL Aurora Serverless. Per fare ci\u00f2 dobbiamo andare su Athena Home, configurare un workgroup denominato AmazonAthenaPreviewFunctionality e quindi aggiungere una path S3 di output delle query di Athena:<\/p>\n\n\n\n
<\/figure><\/div>\n\n\n\nDopodich\u00e9 possiamo tornare alla home di Athena e selezionare Connect Data Source:<\/p>\n\n\n\n
<\/figure><\/div>\n\n\n\nCi viene presentata una pagina web dove dobbiamo selezionare il tipo di sorgente dati: optiamo per Query a data source (beta) e MySQL:\n<\/p>\n\n\n\n
<\/figure><\/div>\n\n\n\nA questo punto ci viene chiesto di inserire il nome e la descrizione del nuovo catalogo e di selezionare o creare una funzione Lambda per gestire la connessione. Impostiamo il nome desiderato e facciamo clic su Configura nuova funzione AWS Lambda.<\/p>\n\n\n\n
<\/figure><\/div>\n\n\n\nViene presentata questa pagina in cui bisogna inserire l’uri di connessione JDBC per Aurora e selezionare la subnet e il security group per la funzione Lambda che Athena utilizzer\u00e0 per stabilire la connessione JDBC. Vanno scelti accuratamente, altrimenti la \u200b\u200bLambda non raggiunger\u00e0 l’istanza Aurora!<\/span><\/p>\n\n\n\n <\/figure><\/div>\n\n\n\nIl prefisso del Secret viene utilizzato per memorizzare le credenziali del database in AWS Secret Manager, questo \u00e8 essenziale per l’ambiente di produzione e se lo si lascia vuoto, l’integrazione non verr\u00e0 creata. \nDopo aver selezionato deploy e selezionato la Lambda appena creata nella dashboard di Athena, verr\u00e0 creato un nuovo catalogo diverso dallo standard AwsGlueCatalog:<\/p>\n\n\n\n
<\/figure><\/div>\n\n\n\nTuttavia all’inizio Databeses e tabelle non appariranno. Controllando i log della Lambda su CloudWatch si trover\u00e0 un errore del tipo:<\/p>\n\n\n\n
Catalog is not supported in multiplexer. After registering the catalog in Athena, must set 'iotarticolo_connection_string' environment variable in Lambda. See JDBC connector README for further details.: java.lang.RuntimeException<\/pre>\n\n\n\nImpostiamo quindi la variabile di environment richiesta per la funzione Lambda utilizzando la stessa stringa di connessione JDBC usata come stringa DefaultConnection nel passaggio precedente. Dopodich\u00e9 la connessione funzioner\u00e0 e si potr\u00e0 interrogare il DB direttamente da Athena! Ottimo!<\/p>\n\n\n\n
<\/figure><\/div>\n\n\n\nAd uno sguardo pi\u00f9 attento, per\u00f2, notiamo immediatamente che qualcosa \u00e8 in conflitto con i dati: ecco una schermata di ci\u00f2 che possiamo leggere direttamente da MySQL:<\/p>\n\n\n\n
<\/figure><\/div>\n\n\n\nCome si pu\u00f2 vedere Athena \u00e8 abbastanza intelligente da convertire i dati tinyint(1) in bool ma non riesce a leggere le colonne datetime da mysql. Ci\u00f2 \u00e8 dovuto ad un problema molto noto con il connettore jdbc e la soluzione pi\u00f9 semplice \u00e8 creare un nuovo campo dove datetime \u00e8 una stringa in formato datetime Java:<\/p>\n\n\n\n
UPDATE coffees SET coffees.coffee_hour_str=DATE_FORMAT(coffee_hour, '%Y-%m-%d %H:%i:%s');\nALTER TABLE coffees ADD COLUMN coffee_hour_str VARCHAR(255) AFTER coffee_hour;\n<\/pre>\n\n\n\nA questo punto Athena potr\u00e0 leggere il nuovo campo.\nEd ora siamo pronti per un bellissimo trucco: <\/span>\n<\/span>andiamo nella dashboard di Glue e creiamo un nuovo Database: un database \u00e8 solo un contenitore logico per metadati, si pu\u00f2 scegliere il nome che si preferisce.<\/span><\/p>\n\n\n\n <\/figure><\/div>\n\n\n\nA questo punto possiamo tornare ad Athena ed eseguire una query come questa:<\/p>\n\n\n\n
CREATE table iotarticologlue.coffees<\/span>\n\nWITH (<\/span>\n\n format='PARQUET', external_location='s3:\/\/besharp-athena\/coffees_parquet', parquet_compression='GZIP'<\/span>\n\n) AS SELECT photo_url,smile,beard,mustache,glasses,coffee_hour_str FROM \"iotarticolo\".\"iot\".\"coffees\" <\/span>\n\nWHERE photo_url LIKE 'https:\/\/%';<\/span><\/pre>\n\n\n\n <\/figure><\/div>\n\n\n\nCi\u00f2 creer\u00e0 una nuova tabella nel database che abbiamo appena aggiunto al nostro catalogo di dati Glue e salver\u00e0 tutti i dati in S3 come file GZIP Parquet. Inoltre \u00e8 anche possibile, se lo si desidera, cambiare la compressione (es. Snappy o BZIP).<\/p>\n\n\n\n
Oltre ad esportare i dati come Parquet, la query andr\u00e0 ad eliminare quelli con la formattazione errata per l\u2019url di S3.<\/p>\n\n\n\n
Abbiamo quindi un modo super veloce per esportare il nostro db in S3 come parquet e creare automaticamente il catalogo Glue.\n<\/p>\n\n\n\n
<\/figure><\/div>\n\n\n\nDiventa quindi semplice visualizzare questo nuovo catalogo in AWS Glue Databrew: andiamo alla dashboard di Databrew e creiamo un nuovo progetto <\/p>\n\n\n\n
<\/figure><\/div>\n\n\n\ne un nuovo set di dati nella sezione aggiungi dataset.<\/p>\n\n\n\n
<\/figure><\/div>\n\n\n\nIn caso di errore sar\u00e0 necessario rinominare il file s3 come .parquet e scansionare nuovamente la tabella con i crawler Glue.\n<\/p>\n\n\n\n
Et voil\u00e0 una bellissima visualizzazione dei dati del nostro dataset completa di statistiche delle colonne!<\/p>\n\n\n\n
<\/figure><\/div>\n\n\n\nConclusioni<\/h2>\n\n\n\n In questo articolo abbiamo descritto un’applicazione IoT molto semplice che utilizza Amazon Rekognition e Amazon Aurora. Abbiamo spiegato come pu\u00f2 essere migliorata sfruttando Firehose e infine abbiamo utilizzato Athena per trasformare e pulire i dati raccolti.<\/p>\n\n\n\n
Abbiamo visto anche come salvarli molto facilmente come parquet e come possono essere analizzati con Glue Databrew, Athena e altri strumenti AWS come EMR.<\/span><\/p>\n\n\n\nAvete mai provato configurazioni simili per i vostri processi di Data Analysis?<\/p>\n\n\n\n
Fateci sapere! Saremo felici di offrirvi un caff\u00e8…connesso \ud83d\ude00 \n<\/p>\n\n\n\n
Per oggi \u00e8 tutto. <\/p>\n\n\n\n
Continuate a seguirci: ci vediamo tra 14 giorni qui su #Proud2beCloud!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"Con l\u2019avvento dell\u2019Internet of Things, il numero di device connessi sta aumentando in modo esponenziale, cos\u00ec come la quantit\u00e0 di […]<\/p>\n","protected":false},"author":9,"featured_media":2036,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[477,474],"tags":[414,261,426,251,395,422,410,418,420,424,412],"yoast_head":"\n
Acquisire e Analizzare Dati Iot su AWS: un semplice esempio con Aurora e Athena - Proud2beCloud Blog<\/title>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\t \n\t \n\t \n