Sélectionner vos préférences de cookies

Nous utilisons des cookies essentiels et des outils similaires qui sont nécessaires au fonctionnement de notre site et à la fourniture de nos services. Nous utilisons des cookies de performance pour collecter des statistiques anonymes afin de comprendre comment les clients utilisent notre site et d’apporter des améliorations. Les cookies essentiels ne peuvent pas être désactivés, mais vous pouvez cliquer sur « Personnaliser » ou « Refuser » pour refuser les cookies de performance.

Si vous êtes d’accord, AWS et les tiers approuvés utiliseront également des cookies pour fournir des fonctionnalités utiles au site, mémoriser vos préférences et afficher du contenu pertinent, y compris des publicités pertinentes. Pour accepter ou refuser tous les cookies non essentiels, cliquez sur « Accepter » ou « Refuser ». Pour effectuer des choix plus détaillés, cliquez sur « Personnaliser ».

Création d'index de partition

Mode de mise au point
Création d'index de partition - AWS Glue

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.

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.

Au fil du temps, des centaines de milliers de partitions sont ajoutées à une table. L'GetPartitions API est utilisée pour récupérer les partitions de la table. L'API renvoie les partitions qui correspondent à l'expression fournie dans la demande.

Prenons l'exemple d'une table sales_data partitionnée par les clés Country, Category, Year, Month et CreationDate. Si vous souhaitez obtenir des données de vente pour tous les articles vendus dans la catégorie Livres en 2020 après le 15/08/2020, vous devez envoyer une GetPartitions demande au catalogue de données avec l'expression « Category = 'Books' et CreationDate > '2020-08-15' ».

Si aucun index de partition n'est présent sur la table, AWS Glue charge toutes les partitions de la table, puis filtre les partitions chargées à l'aide de l'expression de requête fournie par l'utilisateur dans la GetPartitions demande. L'exécution de la requête prend plus de temps à mesure que le nombre de partitions augmente sur une table sans index. Avec un index, la requête GetPartitions essaiera de récupérer un sous-ensemble des partitions au lieu de charger toutes les partitions de la table.

À propos des index de partition

Lorsque vous créez un index de partition, vous spécifiez une liste de clés de partition qui existent déjà sur une table donnée. L'index de partition est une sous-liste des clés de partition définies dans la table. Un index de partition peut être créé sur n'importe quelle permutation de clés de partition définie sur la table. Pour la table sales_data ci-dessus, les index possibles sont (pays, catégorie, creationDate), (pays, catégorie, année), (pays, catégorie), (pays), (catégorie), (catégorie, pays, année, mois), etc.

Data Catalog concaténera les valeurs de partition dans l'ordre fourni au moment de la création de l'index. L'index est créé de manière cohérente à mesure que des partitions sont ajoutées à la table. Des index peuvent être créés pour les types de colonnes String (string, char et varchar), Numeric (int, bigint, long, tinyint et smallint) et Date (yyyy-mm-dd).

Types de données pris en charge

  • Date — Une date au format ISO, telle queYYYY-MM-DD. Par exemple, date2020-08-15. Le format utilise des tirets (‐) pour séparer l'année, le mois et le jour. La plage de dates autorisée pour l'indexation s'étend de à0000-01-01. 9999-12-31

  • String — Chaîne littérale entre guillemets simples ou doubles.

  • Char — Données de caractères de longueur fixe, avec une longueur spécifiée comprise entre 1 et 255, telles que char (10).

  • Varchar — Données de caractères de longueur variable, avec une longueur spécifiée comprise entre 1 et 65535, telles que varchar (10).

  • Numérique — int, bigint, long, tinyint et smallint

Les index des types de données Numeric, String et Date prennent en charge les opérateurs =, >, >=, <, <= et entre les opérateurs. La solution d'indexation ne prend actuellement en charge que l'opérateur logique AND. Les sous-expressions avec les opérateurs « LIKE », « IN », « OR » et « NOT » sont ignorées dans l'expression pour le filtrage à l'aide d'un index. Le filtrage de la sous-expression ignorée est effectué sur les partitions récupérées après application du filtrage d'index.

Pour chaque partition ajoutée à une table, un élément d'index correspondant est créé. Pour une table avec 'n' partitions, 1 index de partition entraînera 'n' éléments d'index de partition. L'index de partition 'm' sur la même table se traduira par des éléments d'index de partition 'm*n'. Chaque élément de l'index de partition sera facturé en fonction du prix actuel AWS Glue politique tarifaire pour le stockage de catalogues de données. Pour plus de détails sur la tarification des objets de stockage, voir AWS Glue tarification.

Création d'un tableau avec index de partition

Vous pouvez créer un index de partition lors de la création d'une table. La demande CreateTable prend une liste d’objets PartitionIndex comme entrée. 3 index de partition au maximum peuvent être créés sur une table donnée. Chaque index de partition nécessite un nom et une liste de partitionKeys définie pour la table. Les index créés sur une table peuvent être récupérés à l'aide de l’API GetPartitionIndexes

Ajout d'un index de partition à une table existante

Pour ajouter un index de partition à une table existante, utilisez l’opération CreatePartitionIndex. Vous pouvez créer un PartitionIndex par opération CreatePartitionIndex. L'ajout d'un index n'affecte pas la disponibilité d'une table, car la table reste disponible pendant la création des index.

L'état d'index d'une partition ajoutée est défini sur CREATING et la création des données d'index est lancée. Si le processus de création des index réussit, l'indexStatus est mis à jour sur ACTIVE et pour un processus infructueux, l'état de l'index est mis à jour sur FAILED. La création d'index peut échouer pour plusieurs raisons et vous pouvez utiliser l'opération GetPartitionIndexes pour récupérer les détails de l'échec. Les échecs possibles sont :

  • ENCRYPTED_PARTITION_ERROR – la création d'index sur une table avec des partitions chiffrées n'est pas prise en charge.

  • INVALID_PARTITION_TYPE_DATA_ERROR – observé lorsque la valeur partitionKey n'est pas une valeur valide pour le type de données partitionKey correspondant. Par exemple : un partitionKey avec le type de données 'int' a une valeur 'foo'.

  • MISSING_PARTITION_VALUE_ERROR – observé lorsque le for partitionValue pour un indexedKey est absent. Cela peut se produire lorsqu'une table n'est pas partitionnée de manière cohérente.

  • UNSUPPORTED_PARTITION_CHARACTER_ERROR – observé lorsque la valeur d'une clé de partition indexée contient les caractères \u0000, \u0001 ou \u0002

  • INTERNAL_ERROR – une erreur interne s'est produite lors de la création des index.

Description des indexes de partition sur une table

Pour extraire les index de partition créés sur une table, utilisez l’opération GetPartitionIndexes. La réponse renvoie tous les index de la table, ainsi que le statut actuel de chaque index (IndexStatus).

Le IndexStatus pour un index de partition sera l'un des suivants :

  • CREATING – l'index est en cours de création et n'est pas encore disponible pour utilisation.

  • ACTIVE – l'index est prêt à l'emploi. Les requêtes peuvent utiliser l'index pour effectuer une requête optimisée.

  • DELETING – l'index est actuellement en cours de suppression et ne peut plus être utilisé. Un index à l'état actif peut être supprimé à l'aide de la demande DeletePartitionIndex, qui fait passer l'état de ACTIVE à DELETING.

  • FAILED – échec de la création d'index sur une table existante. Chaque table stocke les 10 derniers index ayant échoué.

Les transitions d'état possibles pour les index créés sur une table existante sont :

  • CREATING → ACTIVE → DELETING

  • CREATING → FAILED

Limitations de l'utilisation des index de partition

Une fois que vous avez créé un index de partition, notez ces modifications apportées aux fonctionnalités de table et de partition :

Création d'une nouvelle partition (après ajout d'index)

Une fois qu'un index de partition est créé sur une table, toutes les nouvelles partitions ajoutées à la table seront validées pour les vérifications de type de données pour les clés indexées. La valeur de partition des clés indexées sera validée pour le format de type de données. Si la vérification du type de données échoue, l'opération de création de partition échouera. Pour la table sales_data, si un index est créé pour les clés (category, year) où la catégorie est de type string et l'année de type int, la création de la nouvelle partition avec une valeur de YEAR telle que "foo" échouera.

Une fois les index activés, l'ajout de partitions avec des valeurs de clé indexées ayant les caractères U+0000, U+00001 et U+0002 commencera à échouer.

mises à jour du tableau

Une fois qu'un index de partition est créé sur une table, vous ne pouvez pas modifier les noms de clé de partition pour les clés de partition existantes, et vous ne pouvez pas changer le type ou l'ordre des clés qui sont enregistrées avec l'index.

Utilisation d'index pour un appel optimisé GetPartitions

Lorsque vous appelez GetPartitions une table avec un index, vous pouvez inclure une expression et, le cas échéant, Data Catalog utilisera un index si possible. La première clé de l'index doit être passée dans l'expression pour les index à utiliser dans le filtrage. L'optimisation de l'index dans le filtrage est appliquée au mieux. Data Catalog essaie d'utiliser l'optimisation d'index autant que possible, mais en cas d'index manquant ou d'opérateur non pris en charge, il revient à l'implémentation existante de chargement de toutes les partitions.

Pour la table sales_data ci-dessus, ajoutons l'index [Country, Category, Year]. Si « Country » (Pays) n'est pas passé dans l'expression, l'index enregistré ne pourra pas filtrer les partitions à l'aide d'index. Vous pouvez ajouter jusqu'à 3 index pour prendre en charge divers modèles de requête.

Prenons quelques exemples d'expressions et voyons comment les index fonctionnent dessus :

Expressions Comment l'index sera-t-il utilisé

Country = 'US'

Index sera utilisé pour filtrer les partitions.

Country = 'US' and Category = 'Shoes'

Index sera utilisé pour filtrer les partitions.

Category = 'Shoes'

Les index ne seront pas utilisés car la valeur « country » (pays) n'est pas fourni dans l'expression. Toutes les partitions seront chargées pour renvoyer une réponse.

Country = 'US' and Category = 'Shoes' and Year > '2018'

Index sera utilisé pour filtrer les partitions.

Country = 'US' and Category = 'Shoes' and Year > '2018' and month = 2

L'index sera utilisé pour récupérer toutes les partitions avec pays = "US" and category = "shoes" and year > 2018. Ensuite, le filtrage sur l'expression du mois sera effectué.

Country = 'US' AND Category = 'Shoes' OR Year > '2018'

Les index ne seront pas utilisés, car un opérateur OR est présent dans l'expression.

Country = 'US' AND Category = 'Shoes' AND (Year = 2017 OR Year = '2018')

Index sera utilisé pour récupérer toutes les partitions avec country = "US" and category = "shoes", puis un filtrage sur l'expression de l'année sera effectué.

Country in ('US', 'UK') AND Category = 'Shoes'

Les index ne seront pas utilisés pour le filtrage, car l'opérateur IN n'est pas pris en charge actuellement.

Country = 'US' AND Category in ('Shoes', 'Books')

L'index sera utilisé pour récupérer toutes les partitions avec country = "US", puis un filtrage sur l'expression Category sera effectué.

Pays = « États-Unis » ET catégorie dans (« Chaussures », « Livres ») ET (CreationDate > « 2023-9-01 »)

L'index sera utilisé pour récupérer toutes les partitions avec country = « US », avec CreationDate > '2023-9-01', puis un filtrage sur l'expression Category sera effectué.

Intégration avec les moteurs

Redshift Spectrum, Amazon EMR et AWS Glue ETL Spark DataFrames est capable d'utiliser des index pour récupérer des partitions une fois que les index sont dans un état ACTIF dans AWS Glue. Athéna et AWS Glue Les cadres dynamiques ETL vous obligent à suivre des étapes supplémentaires pour utiliser les index afin d'améliorer les requêtes.

Activer le filtrage des partitions

Pour activer le filtrage des partitions dans Athena, vous devez mettre à jour les propriétés de la table comme suit :

  1. Dans la AWS Glue console, sous Catalogue de données, sélectionnez Tables.

  2. Choisissez une table .

  3. Sous Actions, choisissez Modifier le tableau.

  4. Sous Propriétés de la table, ajoutez ce qui suit :

    • Clé — partition_filtering.enabled

    • Valeur — true

  5. Choisissez Appliquer.

Vous pouvez également définir ce paramètre en exécutant une requête ALTER TABLE SET PROPERTIES dans Athena.

ALTER TABLE partition_index.table_with_index SET TBLPROPERTIES ('partition_filtering.enabled' = 'true')
ConfidentialitéConditions d'utilisation du sitePréférences de cookies
© 2025, Amazon Web Services, Inc. ou ses affiliés. Tous droits réservés.