Seleziona le tue preferenze relative ai cookie

Utilizziamo cookie essenziali e strumenti simili necessari per fornire il nostro sito e i nostri servizi. Utilizziamo i cookie prestazionali per raccogliere statistiche anonime in modo da poter capire come i clienti utilizzano il nostro sito e apportare miglioramenti. I cookie essenziali non possono essere disattivati, ma puoi fare clic su \"Personalizza\" o \"Rifiuta\" per rifiutare i cookie prestazionali.

Se sei d'accordo, AWS e le terze parti approvate utilizzeranno i cookie anche per fornire utili funzionalità del sito, ricordare le tue preferenze e visualizzare contenuti pertinenti, inclusa la pubblicità pertinente. Per continuare senza accettare questi cookie, fai clic su \"Continua\" o \"Rifiuta\". Per effettuare scelte più dettagliate o saperne di più, fai clic su \"Personalizza\".

Usa CTAS e INSERT INTO per ETL e analisi dei dati

Modalità Focus
Usa CTAS e INSERT INTO per ETL e analisi dei dati - Amazon Athena

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizza le istruzioni Create Table as Select (CTAS) e INSERT INTO in Athena per estrarre, trasformare e caricare (ETL) i dati in Amazon S3 per l'elaborazione dei dati. In questo argomento viene illustrato come utilizzare queste istruzioni per partizionare e convertire un set di dati nel formato di dati in colonna per ottimizzarlo per l'analisi dei dati.

Le istruzioni CTAS utilizzano le query SELECT standard per creare le nuove tabelle. Puoi utilizzare un'istruzione CTAS per creare un sottoinsieme di dati per l'analisi. In un'istruzione CTAS, puoi partizionare i dati, specificare la compressione e convertire i dati in un formato a colonne come Apache Parquet o Apache ORC. Quando esegui la query CTAS, le tabelle e le partizioni che crea vengono automaticamente aggiunte al AWS Glue Data Catalog. In questo modo le nuove tabelle e partizioni create sono immediatamente disponibili per le query successive.

Le istruzioni INSERT INTO inseriscono nuove righe in una tabella di destinazione in base a un'istruzione di query SELECT che viene eseguita per una tabella di origine. Puoi utilizzare le istruzioni INSERT INTO per trasformare e caricare i dati della tabella di origine in formato CSV in dati della tabella di destinazione utilizzando tutte le trasformazioni supportate da CTAS.

Panoramica

In Athena, utilizza un'istruzione CTAS per eseguire una conversione batch iniziale dei dati. Quindi utilizza più istruzioni INSERT INTO per apportare aggiornamenti incrementali alla tabella creata dall'istruzione CTAS.

Fase 1: creare una tabella basata sul set di dati originale

Nell'esempio riportato in questo argomento viene utilizzato un sottoinsieme Amazon S3 leggibile del set di dati NOAA Global Historical Climatology Network Daily (GHCN-D) disponibile al pubblico. I dati in Amazon S3 hanno le seguenti caratteristiche.

Location: s3://aws-bigdata-blog/artifacts/athena-ctas-insert-into-blog/ Total objects: 41727 Size of CSV dataset: 11.3 GB Region: us-east-1

I dati originali vengono archiviati in Amazon S3 senza partizioni. I dati sono in formato CSV in file come il seguente.

2019-10-31 13:06:57 413.1 KiB artifacts/athena-ctas-insert-into-blog/2010.csv0000 2019-10-31 13:06:57 412.0 KiB artifacts/athena-ctas-insert-into-blog/2010.csv0001 2019-10-31 13:06:57 34.4 KiB artifacts/athena-ctas-insert-into-blog/2010.csv0002 2019-10-31 13:06:57 412.2 KiB artifacts/athena-ctas-insert-into-blog/2010.csv0100 2019-10-31 13:06:57 412.7 KiB artifacts/athena-ctas-insert-into-blog/2010.csv0101

Le dimensioni dei file in questo esempio sono relativamente piccole. Unendoli in file più grandi, è possibile ridurre il numero totale di file, consentendo prestazioni migliori delle query. Puoi utilizzare le istruzioni CTAS e INSERT INTO per migliorare le prestazioni delle query.

Per creare un database e una tabella in base al set di dati di esempio
  1. Nella console Athena, scegli la Regione AWSStati Uniti orientali (Virginia settentrionale). Assicurarsi di eseguire tutte le query in questo tutorial in us-east-1.

  2. Nell'editor di query Athena, eseguire il comando CREATE DATABASE per creare un database.

    CREATE DATABASE blogdb
  3. Eseguire l'istruzione seguente per creare una tabella.

    CREATE EXTERNAL TABLE `blogdb`.`original_csv` ( `id` string, `date` string, `element` string, `datavalue` bigint, `mflag` string, `qflag` string, `sflag` string, `obstime` bigint) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://aws-bigdata-blog/artifacts/athena-ctas-insert-into-blog/'

Fase 2: utilizzare CTAS per partizionare, convertire e comprimere i dati

Dopo aver creato una tabella, puoi utilizzare una singola istruzione CTAS per convertire i dati in formato Parquet con compressione Snappy e per partizionare i dati per anno.

La tabella creata nella fase 1 ha un campo date con la data nel formato YYYYMMDD (ad esempio, 20100104). Poiché la nuova tabella verrà partizionata per year, l'istruzione di esempio nella procedura seguente utilizza la funzione Presto substr("date",1,4) per estrarre il valore year dal campo date.

Per convertire i dati in formato Parquet con compressione Snappy e partizionamento per anno
  • Esegui la seguente istruzione CTAS, sostituendola your-bucket con la posizione del bucket Amazon S3.

    CREATE table new_parquet WITH (format='PARQUET', parquet_compression='SNAPPY', partitioned_by=array['year'], external_location = 's3://amzn-s3-demo-bucket/optimized-data/') AS SELECT id, date, element, datavalue, mflag, qflag, sflag, obstime, substr("date",1,4) AS year FROM original_csv WHERE cast(substr("date",1,4) AS bigint) >= 2015 AND cast(substr("date",1,4) AS bigint) <= 2019
    Nota

    In questo esempio, la tabella creata include solo i dati dal 2015 al 2019. Nella fase 3, aggiungi nuovi dati a questa tabella utilizzando il comando INSERT INTO.

Al termine della query, utilizza la procedura seguente per verificare l'output nella posizione Amazon S3 specificata nell'istruzione CTAS.

Per visualizzare le partizioni e i file parquet creati dall'istruzione CTAS
  1. Per mostrare le partizioni create, esegui il comando seguente. AWS CLI Assicurarsi di includere la barra finale (/).

    aws s3 ls s3://amzn-s3-demo-bucket/optimized-data/

    L'output mostra le partizioni.

    PRE year=2015/ PRE year=2016/ PRE year=2017/ PRE year=2018/ PRE year=2019/
  2. Per visualizzare i file Parquet, eseguire il comando seguente. L'opzione | head -5 che limita l'output ai primi cinque risultati, non è disponibile in Windows.

    aws s3 ls s3://amzn-s3-demo-bucket/optimized-data/ --recursive --human-readable | head -5

    L'output è simile a quello riportato di seguito.

    2019-10-31 14:51:05 7.3 MiB optimized-data/year=2015/20191031_215021_00001_3f42d_1be48df2-3154-438b-b61d-8fb23809679d 2019-10-31 14:51:05 7.0 MiB optimized-data/year=2015/20191031_215021_00001_3f42d_2a57f4e2-ffa0-4be3-9c3f-28b16d86ed5a 2019-10-31 14:51:05 9.9 MiB optimized-data/year=2015/20191031_215021_00001_3f42d_34381db1-00ca-4092-bd65-ab04e06dc799 2019-10-31 14:51:05 7.5 MiB optimized-data/year=2015/20191031_215021_00001_3f42d_354a2bc1-345f-4996-9073-096cb863308d 2019-10-31 14:51:05 6.9 MiB optimized-data/year=2015/20191031_215021_00001_3f42d_42da4cfd-6e21-40a1-8152-0b902da385a1

Fase 3: utilizzare INSERT INTO per aggiungere dati

Nella fase 2, hai utilizzato CTAS per creare una tabella con partizioni per gli anni dal 2015 al 2019. Tuttavia, il set di dati originale contiene anche dati relativi agli anni dal 2010 al 2014. Ora aggiungi questi dati utilizzando un'istruzione INSERT INTO.

Per aggiungere dati alla tabella utilizzando una o più istruzioni INSERT INTO
  1. Eseguire il seguente comando INSERT INTO, specificando gli anni prima del 2015 nella clausola WHERE.

    INSERT INTO new_parquet SELECT id, date, element, datavalue, mflag, qflag, sflag, obstime, substr("date",1,4) AS year FROM original_csv WHERE cast(substr("date",1,4) AS bigint) < 2015
  2. Eseguire nuovamente il comando aws s3 ls, utilizzando la seguente sintassi.

    aws s3 ls s3://amzn-s3-demo-bucket/optimized-data/

    L'output mostra le nuove partizioni.

    PRE year=2010/ PRE year=2011/ PRE year=2012/ PRE year=2013/ PRE year=2014/ PRE year=2015/ PRE year=2016/ PRE year=2017/ PRE year=2018/ PRE year=2019/
  3. Per vedere la riduzione delle dimensioni del set di dati ottenuta utilizzando la compressione e lo storage a colonne in formato Parquet, eseguire il comando seguente.

    aws s3 ls s3://amzn-s3-demo-bucket/optimized-data/ --recursive --human-readable --summarize

    I seguenti risultati mostrano che la dimensione del set di dati dopo Parquet con compressione Snappy è 1,2 GB.

    ... 2020-01-22 18:12:02 2.8 MiB optimized-data/year=2019/20200122_181132_00003_nja5r_f0182e6c-38f4-4245-afa2-9f5bfa8d6d8f 2020-01-22 18:11:59 3.7 MiB optimized-data/year=2019/20200122_181132_00003_nja5r_fd9906b7-06cf-4055-a05b-f050e139946e Total Objects: 300 Total Size: 1.2 GiB
  4. Se più dati CSV vengono aggiunti alla tabella originale, è possibile aggiungere i dati alla tabella Parquet utilizzando le istruzioni INSERT INTO. Ad esempio, se sono disponibili nuovi dati per l'anno 2020, è possibile eseguire la seguente istruzione INSERT INTO. L'istruzione aggiunge i dati e la partizione pertinente alla tabella new_parquet.

    INSERT INTO new_parquet SELECT id, date, element, datavalue, mflag, qflag, sflag, obstime, substr("date",1,4) AS year FROM original_csv WHERE cast(substr("date",1,4) AS bigint) = 2020
    Nota

    L'istruzione INSERT INTO supporta la scrittura di un massimo di 100 partizioni nella tabella di destinazione. Tuttavia, per aggiungere più di 100 partizioni, è possibile eseguire più istruzioni INSERT INTO. Per ulteriori informazioni, consulta Usa CTAS e INSERT INTO per aggirare il limite di 100 partizioni.

Fase 4: misurare le prestazioni e le differenze dei costi

Dopo aver trasformato i dati, puoi misurare i miglioramenti delle prestazioni e i risparmi sui costi eseguendo le stesse query nelle tabelle nuove e precedenti e confrontando i risultati.

Nota

Per informazioni sui costi per query di Athena, consulta Prezzi di Amazon Athena.

Per misurare i miglioramenti delle performance e le differenze dei costi
  1. Eseguire la seguente query nella tabella originale. La query trova il numero di distinti IDs per ogni valore dell'anno.

    SELECT substr("date",1,4) as year, COUNT(DISTINCT id) FROM original_csv GROUP BY 1 ORDER BY 1 DESC
  2. Annotare il tempo di esecuzione della query e la quantità di dati analizzati.

  3. Eseguire la stessa query nella nuova tabella, annotando il tempo di esecuzione della query e la quantità di dati analizzati.

    SELECT year, COUNT(DISTINCT id) FROM new_parquet GROUP BY 1 ORDER BY 1 DESC
  4. Confrontare i risultati e calcolare la differenza delle prestazioni e dei costi. I risultati di esempio riportati di seguito mostrano che la query di test nella nuova tabella è stata più veloce e più economica rispetto alla query nella vecchia tabella.

    Tabella Runtime Dati scansionati
    Originale 16,88 secondi 11,35 GB
    Novità 3,79 secondi 428,05 MB
  5. Eseguire la seguente query di esempio nella tabella originale. La query calcola la temperatura massima media (Celsius), la temperatura minima media (Celsius) e la piovosità media (mm) per la Terra nel 2018.

    SELECT element, round(avg(CAST(datavalue AS real)/10),2) AS value FROM original_csv WHERE element IN ('TMIN', 'TMAX', 'PRCP') AND substr("date",1,4) = '2018' GROUP BY 1
  6. Annotare il tempo di esecuzione della query e la quantità di dati analizzati.

  7. Eseguire la stessa query nella nuova tabella, annotando il tempo di esecuzione della query e la quantità di dati analizzati.

    SELECT element, round(avg(CAST(datavalue AS real)/10),2) AS value FROM new_parquet WHERE element IN ('TMIN', 'TMAX', 'PRCP') and year = '2018' GROUP BY 1
  8. Confrontare i risultati e calcolare la differenza delle prestazioni e dei costi. I risultati di esempio riportati di seguito mostrano che la query di test nella nuova tabella è stata più veloce e più economica rispetto alla query nella vecchia tabella.

    Tabella Runtime Dati scansionati
    Originale 18,65 secondi 11,35 GB
    Novità 1,92 secondi 68 MB

Riepilogo

In questo argomento viene illustrato come eseguire operazioni ETL utilizzando istruzioni CTAS e INSERT INTO in Athena. È stata eseguita la prima serie di trasformazioni utilizzando un'istruzione CTAS che ha convertito i dati nel formato Parquet con compressione Snappy. L'istruzione CTAS ha anche convertito il set di dati da non partizionato a partizionato. Ciò ha ridotto le sue dimensioni e i costi di esecuzione delle query. Quando nuovi dati diventano disponibili, puoi utilizzare un'istruzione INSERT INTO per trasformare e caricare i dati nella tabella creata con l'istruzione CTAS.

PrivacyCondizioni del sitoPreferenze cookie
© 2025, Amazon Web Services, Inc. o società affiliate. Tutti i diritti riservati.