Comment définir le nombre ou la taille des fichiers lorsque j'exécute une requête CTAS dans Athena ?
Je souhaite définir le nombre de fichiers ou la quantité de données par fichier lorsque j'exécute une requête CREATE TABLE AS SELECT (CTAS) dans Amazon Athena.
Résolution
Utilisez la mise en compartiments pour définir la taille ou le nombre de fichiers dans une requête CTAS.
Remarque : Les étapes suivantes utilisent le jeu de données publique Global Historical Climatology Network Daily (s3://noaa-ghcn-pds/csv.gz/) pour illustrer la solution. Pour plus d'informations sur ce jeu de données, consultez Accéder à plus de 200 ans de données sur le climat mondial à l'aide d'Amazon Athena et d'Amazon QuickSight. Ces étapes montrent comment examiner votre jeu de données, créer l'environnement, puis modifier le jeu de données :
- Modifiez le nombre de fichiers dans le jeu de données Amazon Simple Storage Service (Amazon S3).
- Définissez la taille approximative de chaque fichier.
- Convertissez le format de données et définissez la taille approximative du fichier.
Examiner le jeu de données
Exécutez l'AWS Command Line Interface (AWS CLI) suivante pour vérifier le nombre de fichiers et la taille du jeu de données :
Remarque : En cas d'erreurs lors de l'exécution des commandes AWS CLI, vérifiez que vous utilisez la version la plus récente de ces commandes.
aws s3 ls s3://noaa-ghcn-pds/csv.gz/ --summarize --recursive --human-readable
Le résultat doit être similaire à ce qui suit :
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
Créer l'environnement
1. Exécutez une instruction similaire à la suivante pour créer une table :
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/'
2. Exécutez la commande suivante pour tester la table :
SELECT * FROM historic_climate_gz LIMIT 10
La sortie affiche dix lignes du jeu de données. Une fois l'environnement créé, utilisez une ou plusieurs des méthodes suivantes pour modifier le jeu de données lorsque vous exécutez des requêtes CTAS.
Modifier le nombre de fichiers dans l'ensemble de données
Une bonne pratique consiste à compartimenter les données selon une colonne ayant une cardinalité élevée et des valeurs distribuées uniformément. Pour plus d'informations, consultez Mise en compartiment et partitionnement. Dans l’exemple suivant, nous utilisons le champ yearmonbirthday.
1. Pour convertir le jeu de données en 20 fichiers, exécutez une instruction similaire à ce qui suit :
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_gz
Remplacez les valeurs suivantes dans la requête :
external_location : emplacement Amazon S3 où Athena enregistre votre requête CTAS
format : format souhaité pour la sortie (par exemple, ORC, PARQUET, AVRO, JSON ou TEXTFILE)
bucket_count : nombre de fichiers souhaités (par exemple, 20)
bucketed_by : champ pour le hachage et la sauvegarde des données dans le compartiment (par exemple, yearmonthday)
2. Exécutez la commande suivante pour confirmer que le compartiment contient le nombre de fichiers souhaité :
aws s3 ls s3://awsexamplebucket/historic_climate_gz_20_files/ --summarize --recursive --human-readable Total Objects: 20 Total Size: 15.6 Gib
Définir la taille approximative de chaque fichier
1. Déterminez le nombre de fichiers dont vous avez besoin pour atteindre la taille de fichier souhaitée. Par exemple, pour fractionner le jeu de données de 15,4 Go en fichiers de 2 Go, vous avez besoin de 8 fichiers (15,4 / 2 = 7,7, arrondis à 8).
2. Exécutez une instruction similaire à ce qui suit :
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
Remplacez les valeurs suivantes dans la requête :
external_location : emplacement Amazon S3 où Athena enregistre votre requête CTAS
format : doit être le même format que les données source (par exemple, ORC, PARQUET, AVRO, JSON ou TEXTFILE)
bucket_count : nombre de fichiers souhaités (par exemple, 20)
bucketed_by : champ pour le hachage et la sauvegarde des données dans le compartiment. Choisissez un champ ayant une cardinalité élevée.
3. Exécutez la commande suivante pour confirmer que le jeu de données contient le nombre de fichiers souhaité :
aws s3 ls s3://awsexamplebucket/historic_climate_gz_2GB_file/ --summarize --recursive --human-readable
Le résultat doit être similaire à ce qui suit :
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
Convertir le format des données et définir la taille approximative du fichier
1. Exécutez une instruction similaire à ce qui suit pour convertir les données dans un format différent :
CREATE TABLE "historic_climate_parquet" WITH ( external_location = 's3://awsexamplebucket/historic_climate_parquet/', format = 'PARQUET') AS SELECT * FROM historic_climate_gz
Remplacez les valeurs suivantes dans la requête :
external_location : emplacement Amazon S3 où Athena enregistre votre requête CTAS format : format que vous souhaitez convertir (ORC, PARQUET, AVRO, JSON ou TEXTFILE)
2. Exécutez la commande suivante pour confirmer la taille du jeu de données :
aws s3 ls s3://awsexamplebucket/historic_climate_parquet/ --summarize --recursive --human-readable
Le résultat doit être similaire à ce qui suit :
Total Objects: 30 Total Size: 9.8 GiB
3. Déterminez le nombre de fichiers dont vous avez besoin pour atteindre la taille de fichier souhaitée. Par exemple, si vous voulez des fichiers de 500 Mo et que le jeu de données est de 9,8 Go, vous avez besoin de 20 fichiers (9 800 / 500 = 19,6, arrondis à 20).
4. Pour convertir le jeu de données en fichiers de 500 Mo, exécutez une instruction similaire à ce qui suit :
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
Remplacez les valeurs suivantes dans la requête :
external_location : emplacement Amazon S3 où Athena enregistre votre requête CTAS bucket_count : nombre de fichiers souhaités (par exemple, 20)
bucketed_by : champ pour le hachage et la sauvegarde des données dans le compartiment. Choisissez un champ ayant une cardinalité élevée.
5. Exécutez la commande suivante pour confirmer que le jeu de données contient le nombre de fichiers souhaité :
aws s3 ls s3://awsexamplebucket/historic_climate_parquet_500mb/ --summarize --recursive --human-readable
Le résultat doit être similaire à ce qui suit :
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
Remarque : L'instruction INSERT INTO n'est pas prise en charge sur les tables compartimentées. Pour plus d'informations, consultez Tables compartimentées non prises en charge.
Informations connexes

Contenus pertinents
- demandé il y a un anlg...
- demandé il y a 3 moislg...
- demandé il y a 2 anslg...
- demandé il y a 3 moislg...
- AWS OFFICIELA mis à jour il y a 4 ans
- AWS OFFICIELA mis à jour il y a un an
- AWS OFFICIELA mis à jour il y a 7 mois
- AWS OFFICIELA mis à jour il y a 3 ans