Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Partitionner vos données
En partitionnant vos données, vous pouvez limiter la quantité de données analysées par chaque requête, ce qui améliore les performances et réduit les coûts. de n’importe quelle clé de partition. Il est d'usage de partitionner les données en fonction de l'heure, ce qui conduit souvent à un schéma de partitionnement à plusieurs niveaux. Par exemple, un client qui reçoit des données toutes les heures peut décider de les partitionner par année, par mois, par date et par heure. Un autre client, qui reçoit des données de nombreuses sources différentes mais qui sont chargées une seule fois par jour, peut les partitionner par date et par identifiant de source de données.
Athena peut utiliser des partitions de style Apache Hive dont les chemins de données contiennent des paires de valeur clé connectées par des signes égal (par exemple country=us/...
ou year=2021/month=01/day=26/...
). Ainsi, les chemins incluent à la fois les noms des clés de partition et les valeurs que chaque chemin représente. Pour charger de nouvelles partitions Hive dans une table partitionnée, vous pouvez utiliser la commande MSCK REPAIR TABLE qui fonctionne uniquement avec des partitions de style Hive.
Athena peut également utiliser des schémas de partitionnement non compatibles avec Hive. Par exemple, les CloudTrail journaux et les flux de diffusion Firehose utilisent des composants de chemin distincts pour les parties de date, telles que. data/2021/01/26/us/6fc7845e.json
Pour les partitions de style non compatibles avec Hive, utilisez ALTER TABLE ADD PARTITION pour ajouter les partitions manuellement.
Considérations et restrictions
Lorsque vous utilisez le partitionnement, gardez à l'esprit les points suivants :
-
Si vous interrogez une table partitionnée et spécifiez la partition dans la clause
WHERE
, Athena analyse les données uniquement à partir de cette partition. -
Si vous exécutez des requêtes sur les compartiments Simple Storage Service (Amazon S3) avec un grand nombre d'objets et que les données ne sont pas partitionnées, de telles requêtes peuvent affecter les limites de débit de demande
GET
dans Simple Storage Service (Amazon S3) et conduire à des exceptions Simple Storage Service (Amazon S3). Pour éviter des erreurs, partitionnez vos données. En outre, envisagez de régler vos taux de demande Simple Storage Service (Amazon S3). Pour plus d'informations, consultez la rubrique Bonnes pratiques de conception : optimisation des performances Simple Storage Service (Amazon S3). -
Les emplacements de partition à utiliser avec Athena doivent utiliser le protocole
s3
(par exemple,s3://amzn-s3-demo-bucket/
). Dans Athena, les emplacements qui utilisent d'autres protocoles (par exemple,folder
/s3a://amzn-s3-demo-bucket/
) provoquent des échecs de requête lorsque les requêtesfolder
/MSCK REPAIR TABLE
sont exécutées sur les tables contenant les données. -
Assurez-vous que le chemin Simple Storage Service (Amazon S3) est en minuscules et non en casse mixte (par exemple,
userid
au lieu deuserId
). Si le chemin S3 est en casse mixte,MSCK REPAIR TABLE
n'ajoute pas les partitions au AWS Glue Data Catalog. Pour de plus amples informations, veuillez consulter MSCK REPAIR TABLE. -
Étant donné que
MSCK REPAIR TABLE
analyse à la fois un dossier et ses sous-dossiers pour trouver un schéma de partition correspondant, veillez à conserver les données des différentes tables dans des hiérarchies de dossiers distinctes. Supposons, par exemple, que vous ayez des données pour le tableau 1 danss3://amzn-s3-demo-bucket1
et des données pour le tableau 2 danss3://amzn-s3-demo-bucket1/table-2-data
. Si les deux tables sont partitionnées par chaîne,MSCK REPAIR TABLE
ajoutera les partitions de la table 2 à la table 1. Pour éviter cela, utilisez des structures de dossiers distinctes telles ques3://amzn-s3-demo-bucket1
et à las3://amzn-s3-demo-bucket2
place. Notez que ce comportement est compatible avec Amazon EMR et Apache Hive. -
Si vous l'utilisez AWS Glue Data Catalog avec Athena, consultez la section AWS Glue Points de terminaison et quotas pour les quotas de service sur les partitions par compte et par table.
-
Bien qu'Athena prenne en charge l'interrogation de AWS Glue tables contenant 10 millions de partitions, Athena ne peut pas lire plus d'un million de partitions en un seul scan. Dans de tels scénarios, l’indexation des partitions peut s’avérer utile. Pour plus d'informations, consultez l'article du blog AWS Big Data Améliorez les performances des requêtes Amazon Athena à l'aide d'index de AWS Glue Data Catalog partition
.
-
-
Pour demander une augmentation du quota de partitions si vous utilisez le AWS Glue Data Catalog, visitez la console Service Quotas pour AWS Glue
.
Création et chargement d'une table avec des données partitionnées
Pour créer une table qui utilise des partitions, utilisez la clause PARTITIONED BY
dans votre instruction CREATE TABLE. La clause PARTITIONED BY
définit les clés sur lesquelles les données doivent être partitionnées, comme dans l'exemple suivant. La clause LOCATION
spécifie l'emplacement racine des données partitionnées.
CREATE EXTERNAL TABLE users ( first string, last string, username string ) PARTITIONED BY (id string) STORED AS parquet LOCATION 's3://amzn-s3-demo-bucket'
Après avoir créé la table, vous chargez les données dans les partitions pour l'interrogation. Pour les partitions de style Hive, exécutez MSCK REPAIR TABLE. Pour les partitions de style non compatibles avec Hive, utilisez ALTER TABLE ADD PARTITION pour ajouter les partitions manuellement.
Préparer les données de style Hive et les données de style non-Hive pour les requêtes
Les sections suivantes expliquent comment préparer des données compatibles avec Hive et non compatibles avec Hive pour l'interrogation dans Athena.
Les partitions sont stockées dans des dossiers distincts, dans Amazon S3. Par exemple, voici une liste partielle pour un exemple d'impressions publicitaires produites par la commande aws s3 ls
aws s3 ls s3://elasticmapreduce/samples/hive-ads/tables/impressions/
PRE dt=2009-04-12-13-00/ PRE dt=2009-04-12-13-05/ PRE dt=2009-04-12-13-10/ PRE dt=2009-04-12-13-15/ PRE dt=2009-04-12-13-20/ PRE dt=2009-04-12-14-00/ PRE dt=2009-04-12-14-05/ PRE dt=2009-04-12-14-10/ PRE dt=2009-04-12-14-15/ PRE dt=2009-04-12-14-20/ PRE dt=2009-04-12-15-00/ PRE dt=2009-04-12-15-05/
Ici, les fichiers journaux sont stockés avec le nom de colonne (dt) défini sur les incréments de date, d'heures et de minutes. Lorsque vous indiquez l'emplacement du dossier parent, le schéma et le nom de la colonne partitionnée, Athena peut interroger les données de ces sous-dossiers. DDL
Création de la table
Pour créer une table à partir de ces données, créez une partition le long de « dt » comme dans l'instruction Athena DDL suivante :
CREATE EXTERNAL TABLE impressions ( requestBeginTime string, adId string, impressionId string, referrer string, userAgent string, userCookie string, ip string, number string, processId string, browserCookie string, requestEndTime string, timers struct<modelLookup:string, requestTime:string>, threadId string, hostname string, sessionId string) PARTITIONED BY (dt string) ROW FORMAT serde 'org.apache.hive.hcatalog.data.JsonSerDe' LOCATION 's3://elasticmapreduce/samples/hive-ads/tables/impressions/' ;
Ce tableau utilise le JSON sérialiseur-désérialiseur natif de Hive pour lire les données stockées dans Amazon S3. JSON Pour de plus amples informations sur les formats pris en charge, veuillez consulter Choisissez un SerDe pour vos données.
Courir MSCK REPAIR TABLE
Après avoir exécuté la requête CREATE TABLE
, exécutez la commande MSCK
REPAIR TABLE
dans l'éditeur de requêtes Athena pour charger les partitions, comme dans l'exemple suivant.
MSCK REPAIR TABLE impressions
Une fois que vous avez exécuté cette commande, les données sont prêtes à être interrogées.
Exécution des requêtes de données
Exécutez des requêtes sur les données sur la table des impressions en utilisant la colonne de partition. Voici un exemple :
SELECT dt,impressionid FROM impressions WHERE dt<'2009-04-12-14-00' and dt>='2009-04-12-13-00' ORDER BY dt DESC LIMIT 100
Cette requête devrait montrer des résultats similaires aux suivants :
2009-04-12-13-20 ap3HcVKAWfXtgIPu6WpuUfAfL0DQEc
2009-04-12-13-20 17uchtodoS9kdeQP1x0XThKl5IuRsV
2009-04-12-13-20 JOUf1SCtRwviGw8sVcghqE5h0nkgtp
2009-04-12-13-20 NQ2XP0J0dvVbCXJ0pb4XvqJ5A4QxxH
2009-04-12-13-20 fFAItiBMsgqro9kRdIwbeX60SROaxr
2009-04-12-13-20 V4og4R9W6G3QjHHwF7gI1cSqig5D1G
2009-04-12-13-20 hPEPtBwk45msmwWTxPVVo1kVu4v11b
2009-04-12-13-20 v0SkfxegheD90gp31UCr6FplnKpx6i
2009-04-12-13-20 1iD9odVgOIi4QWkwHMcOhmwTkWDKfj
2009-04-12-13-20 b31tJiIA25CK8eDHQrHnbcknfSndUk
Dans l'exemple suivant, la aws s3 ls
commande affiche ELBles journaux stockés dans Amazon S3. Notez que la mise en page des données n'utilise pas de paires key=value
et n'est donc pas au format Hive. (L'option --recursive
pour la commande aws s3 ls
précise que tous les fichiers ou objets du répertoire ou du préfixe spécifié doivent être répertoriés.)
aws s3 ls s3://athena-examples-
myregion
/elb/plaintext/ --recursive2016-11-23 17:54:46 11789573 elb/plaintext/2015/01/01/part-r-00000-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:46 8776899 elb/plaintext/2015/01/01/part-r-00001-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:46 9309800 elb/plaintext/2015/01/01/part-r-00002-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:47 9412570 elb/plaintext/2015/01/01/part-r-00003-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:47 10725938 elb/plaintext/2015/01/01/part-r-00004-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:46 9439710 elb/plaintext/2015/01/01/part-r-00005-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:47 0 elb/plaintext/2015/01/01_$folder$ 2016-11-23 17:54:47 9012723 elb/plaintext/2015/01/02/part-r-00006-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:47 7571816 elb/plaintext/2015/01/02/part-r-00007-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:47 9673393 elb/plaintext/2015/01/02/part-r-00008-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:48 11979218 elb/plaintext/2015/01/02/part-r-00009-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:48 9546833 elb/plaintext/2015/01/02/part-r-00010-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:48 10960865 elb/plaintext/2015/01/02/part-r-00011-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:48 0 elb/plaintext/2015/01/02_$folder$ 2016-11-23 17:54:48 11360522 elb/plaintext/2015/01/03/part-r-00012-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:48 11211291 elb/plaintext/2015/01/03/part-r-00013-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:48 8633768 elb/plaintext/2015/01/03/part-r-00014-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:49 11891626 elb/plaintext/2015/01/03/part-r-00015-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:49 9173813 elb/plaintext/2015/01/03/part-r-00016-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:49 11899582 elb/plaintext/2015/01/03/part-r-00017-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:49 0 elb/plaintext/2015/01/03_$folder$ 2016-11-23 17:54:50 8612843 elb/plaintext/2015/01/04/part-r-00018-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:50 10731284 elb/plaintext/2015/01/04/part-r-00019-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:50 9984735 elb/plaintext/2015/01/04/part-r-00020-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:50 9290089 elb/plaintext/2015/01/04/part-r-00021-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:50 7896339 elb/plaintext/2015/01/04/part-r-00022-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 8321364 elb/plaintext/2015/01/04/part-r-00023-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 0 elb/plaintext/2015/01/04_$folder$ 2016-11-23 17:54:51 7641062 elb/plaintext/2015/01/05/part-r-00024-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 10253377 elb/plaintext/2015/01/05/part-r-00025-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 8502765 elb/plaintext/2015/01/05/part-r-00026-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 11518464 elb/plaintext/2015/01/05/part-r-00027-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 7945189 elb/plaintext/2015/01/05/part-r-00028-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 7864475 elb/plaintext/2015/01/05/part-r-00029-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 0 elb/plaintext/2015/01/05_$folder$ 2016-11-23 17:54:51 11342140 elb/plaintext/2015/01/06/part-r-00030-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 8063755 elb/plaintext/2015/01/06/part-r-00031-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:52 9387508 elb/plaintext/2015/01/06/part-r-00032-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:52 9732343 elb/plaintext/2015/01/06/part-r-00033-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:52 11510326 elb/plaintext/2015/01/06/part-r-00034-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:52 9148117 elb/plaintext/2015/01/06/part-r-00035-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:52 0 elb/plaintext/2015/01/06_$folder$ 2016-11-23 17:54:52 8402024 elb/plaintext/2015/01/07/part-r-00036-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:52 8282860 elb/plaintext/2015/01/07/part-r-00037-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:52 11575283 elb/plaintext/2015/01/07/part-r-00038-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:53 8149059 elb/plaintext/2015/01/07/part-r-00039-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:53 10037269 elb/plaintext/2015/01/07/part-r-00040-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:53 10019678 elb/plaintext/2015/01/07/part-r-00041-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:53 0 elb/plaintext/2015/01/07_$folder$ 2016-11-23 17:54:53 0 elb/plaintext/2015/01_$folder$ 2016-11-23 17:54:53 0 elb/plaintext/2015_$folder$
Courir ALTER TABLE ADD PARTITION
Étant donné que les données ne sont pas au format Hive, vous ne pouvez pas utiliser la commande MSCK
REPAIR TABLE
pour ajouter les partitions à la table une fois que vous l'avez créée. Au lieu de cela, vous pouvez utiliser la commande ALTER TABLE ADD PARTITION pour ajouter chaque partition manuellement. Par exemple, pour charger les données dans s3://athena-examples -myregion
/elb/plaintext/2015/01/01/, vous pouvez exécuter la requête suivante. Notez qu'une colonne de partition distincte pour chaque dossier Simple Storage Service (Amazon S3) n'est pas requise et que la valeur clé de partition peut être différente de celle de la clé Simple Storage Service (Amazon S3).
ALTER TABLE elb_logs_raw_native_part ADD PARTITION (dt='2015-01-01') location 's3://athena-examples-
us-west-1
/elb/plaintext/2015/01/01/'
Si une partition existe déjà, vous recevez l'erreur Partition already exists
(Partition déjà existante). Pour éviter cette erreur, vous pouvez utiliser la clause IF NOT EXISTS
. Pour de plus amples informations, veuillez consulter ALTER TABLE ADD PARTITION. Pour supprimer une partition, vous pouvez utiliser ALTER TABLE DROP
PARTITION.
Envisagez la projection de partitions
Pour ne pas avoir à gérer vous-même les partitions, vous pouvez utiliser la projection de partitions. La projection de partitions est une option pour les tables hautement partitionnées dont la structure est connue à l'avance. Dans une projection de partition, les valeurs et les emplacements de partition sont calculés à partir des propriétés de la table que vous configurez au lieu d'être lus à partir d'un référentiel de métadonnées. Étant donné que les calculs en mémoire sont plus rapides que la recherche à distance, l'utilisation de la projection de partition peut réduire considérablement les temps d'exécution des requêtes.
Pour de plus amples informations, veuillez consulter Utiliser la projection de partitions avec Amazon Athena.
Ressources supplémentaires
-
Pour plus d'informations sur les options de partitionnement des données Firehose, consultez. Exemple d'Amazon Data Firehose
-
Vous pouvez automatiser l'ajout de partitions à l'aide du JDBCpilote.
-
Vous pouvez utiliser CTAS et INSERT INTO pour partitionner un ensemble de données. Pour de plus amples informations, veuillez consulter UtilisationCTAS, INSERT INTO pour ETL et analyse des données.