Come posso modificare il numero o la dimensione dei file quando eseguo una query CTAS in Amazon Athena?
Quando eseguo una query CREATE TABLE AS SELECT (CTAS) in Amazon Athena, desidero definire il numero di file o la quantità di dati per ogni file.
Risoluzione
Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Puoi utilizzare il raggruppamento in bucket in una query CTAS per controllare il numero di file di output. Tuttavia, il numero di file creati potrebbe non corrispondere sempre al numero di bucket specificato. La funzione di raggruppamento in bucket può raggruppare dati simili, ma non può controllare con precisione il numero di file.
La seguente risoluzione utilizza il set di dati pubblico del Global Historical Climatology Network Daily, s3://noaa-ghcn-pds/csv.gz/. Per ulteriori informazioni, consulta Visualize over 200 years of global climate data using Amazon Athena and Amazon Quick Sight (Visualizzazione di oltre 200 anni di dati climatici globali utilizzando Amazon Athena e Amazon Quick Sight).
Nota: nel seguenti esempi di comando, sostituisci i seguenti valori con i tuoi:
external_location: posizione di Amazon Simple Storage Service (Amazon S3) in cui hai salvato la query CTAS.
format: formato desiderato per l'output, ad esempio ORC, PARQUET, AVRO, JSON o TEXTFILE.
bucket_count: numero di bucket che desideri.
bucketed_by: campo per l'hashing e il salvataggio dei dati nel bucket, ad esempio yearmonthday.
Esamina il set di dati
Per verificare il numero di file e la dimensione del set di dati, esegui questo comando ls:
aws s3 ls s3://noaa-ghcn-pds/csv.gz/ --summarize --recursive --human-readable
Nota: sostituisci s3://noaa-ghcn-pds/csv.gz/ con il percorso del tuo bucket S3.
Esempio di output:
2019-11-30 01:58:05 3.3 KiB csv.gz/1763.csv.gz 2019-11-30 01:58:06 3.2 KiB csv.gz/1764.csv.gz 2019-11-30 01:58:06 3.3 KiB csv.gz/1765.csv.gz 2019-11-30 01:58:07 3.3 KiB csv.gz/1766.csv.gz ... 2019-11-30 02:05:43 199.7 MiB csv.gz/2016.csv.gz 2019-11-30 02:05:50 197.7 MiB csv.gz/2017.csv.gz 2019-11-30 02:05:54 197.0 MiB csv.gz/2018.csv.gz 2019-11-30 02:05:57 168.8 MiB csv.gz/2019.csv.gz Total Objects: 257 Total Size: 15.4 GiB
Crea l'ambiente
Completa i seguenti passaggi:
-
Per creare una tabella, esegui questo comando:
CREATE EXTERNAL TABLE historic_climate_gz( id string, yearmonthday int, element string, temperature int, m_flag string, q_flag string, s_flag string, obs_time int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://noaa-ghcn-pds/csv.gz/' -
Per testare la tabella, esegui questo comando:
SELECT * FROM historic_climate_gz LIMIT 10L'output mostra 10 righe del set di dati.
Dopo aver creato l'ambiente, utilizza i seguenti metodi per modificare il set di dati quando esegui le query CTAS.
Modifica il numero di file nel set di dati
È consigliabile raggruppare i dati in base a una colonna con elevata cardinalità e valori distribuiti uniformemente. Per ulteriori informazioni, consulta Vantaggi del raggruppamento in bucket.
Completa i seguenti passaggi:
-
Per convertire il set di dati in 20 file, esegui questo comando:
CREATE TABLE "historic_climate_gz_20_files" WITH ( external_location = 's3://awsexamplebucket/historic_climate_gz_20_files/', format = 'TEXTFILE', bucket_count=20, bucketed_by = ARRAY['yearmonthday'] ) AS SELECT * FROM historic_climate_gzNota: l'esempio precedente utilizza il campo yearmonthday.
-
Per verificare che il bucket contenga il numero di file desiderato, esegui questo comando ls:
aws s3 ls s3://awsexamplebucket/historic_climate_gz_20_files/ --summarize --recursive --human-readableEsempio di output:
Total Objects: 20 Total Size: 15.6 Gib
Configura la dimensione approssimativa di ogni file
Completa i seguenti passaggi:
-
Determina il numero di bucket da utilizzare per ottenere il numero di file desiderato. Ad esempio, per suddividere il set di dati da 15,4 GB in file da 2 GB, è necessario avere 8 file (15,4/2 = 7,7, arrotondato a 8).
-
Per creare una nuova tabella con bucket, esegui questo comando:
CREATE TABLE "historic_climate_gz_2GB_files" WITH ( external_location = 's3://awsexamplebucket/historic_climate_gz_2GB_file/', format = 'TEXTFILE', bucket_count=8, bucketed_by = ARRAY['yearmonthday']) AS SELECT * FROM historic_climate_gz -
Per verificare che il set di dati contenga il numero di file desiderato, esegui questo comando ls:
aws s3 ls s3://awsexamplebucket/historic_climate_gz_2GB_file/ --summarize --recursive --human-readableEsempio di output:
2019-09-03 10:59:20 1.7 GiB historic_climate_gz_2GB_file/20190903_085819_00005_bzbtg_bucket-00000.gz 2019-09-03 10:59:20 2.0 GiB historic_climate_gz_2GB_file/20190903_085819_00005_bzbtg_bucket-00001.gz 2019-09-03 10:59:20 2.0 GiB historic_climate_gz_2GB_file/20190903_085819_00005_bzbtg_bucket-00002.gz 2019-09-03 10:59:19 1.9 GiB historic_climate_gz_2GB_file/20190903_085819_00005_bzbtg_bucket-00003.gz 2019-09-03 10:59:17 1.7 GiB historic_climate_gz_2GB_file/20190903_085819_00005_bzbtg_bucket-00004.gz 2019-09-03 10:59:21 1.9 GiB historic_climate_gz_2GB_file/20190903_085819_00005_bzbtg_bucket-00005.gz 2019-09-03 10:59:18 1.9 GiB historic_climate_gz_2GB_file/20190903_085819_00005_bzbtg_bucket-00006.gz 2019-09-03 10:59:17 1.9 GiB historic_climate_gz_2GB_file/20190903_085819_00005_bzbtg_bucket-00007.gz Total Objects: 8 Total Size: 15.0 GiB
Converti il formato dei dati e imposta la dimensione approssimativa dei file
Completa i seguenti passaggi:
-
Per convertire i dati in un formato diverso, esegui questo comando:
CREATE TABLE "historic_climate_parquet" WITH ( external_location = 's3://awsexamplebucket/historic_climate_parquet/', format = 'PARQUET') AS SELECT * FROM historic_climate_gz -
Per verificare la dimensione del set di dati, esegui questo comando ls:
aws s3 ls s3://awsexamplebucket/historic_climate_parquet/ --summarize --recursive --human-readableEsempio di output:
Total Objects: 30 Total Size: 9.8 GiB -
Determina il numero di bucket da utilizzare per ottenere il numero di file desiderato. Ad esempio, per file da 500 MB e un set di dati di 9,8 GB, devi avere 20 file.
-
Per convertire il set di dati in file da 500 MB, esegui questo comando:
CREATE TABLE "historic_climate_parquet_500mb" WITH ( external_location = 's3://awsexamplebucket/historic_climate_parquet_500mb/', format = 'PARQUET', bucket_count=20, bucketed_by = ARRAY['yearmonthday'] ) AS SELECT * FROM historic_climate_parquet -
Per verificare che il set di dati contenga il numero di file desiderato, esegui questo comando ls:
aws s3 ls s3://awsexamplebucket/historic_climate_parquet_500mb/ --summarize --recursive --human-readableEsempio di output:
2019-09-03 12:01:45 333.9 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00000 2019-09-03 12:01:01 666.7 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00001 2019-09-03 12:01:00 665.6 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00002 2019-09-03 12:01:06 666.0 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00003 2019-09-03 12:00:59 667.3 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00004 2019-09-03 12:01:27 666.0 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00005 2019-09-03 12:01:10 666.5 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00006 2019-09-03 12:01:12 668.3 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00007 2019-09-03 12:01:03 666.8 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00008 2019-09-03 12:01:10 646.4 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00009 2019-09-03 12:01:35 639.0 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00010 2019-09-03 12:00:52 529.5 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00011 2019-09-03 12:01:29 334.2 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00012 2019-09-03 12:01:32 333.0 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00013 2019-09-03 12:01:34 332.2 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00014 2019-09-03 12:01:44 333.3 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00015 2019-09-03 12:01:51 333.0 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00016 2019-09-03 12:01:39 333.0 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00017 2019-09-03 12:01:47 333.0 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00018 2019-09-03 12:01:49 332.3 MiB historic_climate_parquet_500mb/20190903_095742_00001_uipqt_bucket-00019 Total Objects: 20 Total Size: 9.9 GiB
Nota: le tabelle con bucket non supportano l'istruzione INSERT INTO.
Informazioni correlate
- Argomenti
- Analytics
- Lingua
- Italiano

Contenuto pertinente
AWS UFFICIALEAggiornata 7 mesi fa