Partitionnement de données - 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.

Partitionnement de données

Qu'est-ce que le partitionnement des données ?

Le partitionnement des données est une technique qui divise les grands ensembles de données en segments plus petits et plus faciles à gérer appelés partitions. Dans le contexte des intégrations de AWS Glue Zero-ETL, le partitionnement organise vos données dans l'emplacement cible en fonction de valeurs de colonne spécifiques ou de transformations de ces valeurs.

Avantages du partitionnement des données

Le partitionnement efficace des données présente plusieurs avantages essentiels pour les charges de travail analytiques :

  • Performances de requêtes améliorées : les requêtes peuvent ignorer les partitions non pertinentes (élagage des partitions), réduisant ainsi la quantité de données à analyser.

  • Coûts réduits : en scannant moins de données, vous pouvez réduire le calcul et I/O les coûts liés à vos requêtes d'analyse.

  • Meilleure évolutivité : le partitionnement permet le traitement parallèle des segments de données, permettant ainsi une mise à l'échelle plus efficace des charges de travail analytiques.

  • Gestion simplifiée du cycle de vie des données : vous pouvez gérer les politiques de conservation au niveau de la partition, ce qui facilite l'archivage ou la suppression des anciennes données.

Principaux concepts de partitionnement

Colonnes de partition

Colonnes de vos données utilisées pour déterminer la manière dont les enregistrements sont organisés en partitions. Les colonnes de partition efficaces doivent s'aligner sur les modèles de requêtes courants et avoir une cardinalité appropriée.

Fonctions de partition

Transformations appliquées aux valeurs des colonnes de partition pour créer les limites réelles de la partition. Les exemples incluent l'identité (en utilisant la valeur brute) et les fonctions basées sur le temps (année, mois, jour, heure).

Élagage de cloisons

Processus par lequel le moteur de requête identifie et ignore les partitions qui ne contiennent pas de données pertinentes pour une requête, ce qui améliore considérablement les performances.

Granularité de partition

Niveau de détail auquel les données sont partitionnées. Une granularité plus fine (davantage de partitions) peut améliorer les performances des requêtes, mais peut augmenter la surcharge de métadonnées. Une granularité plus grossière (moins de partitions) réduit la surcharge de métadonnées, mais peut entraîner l'analyse d'un plus grand nombre de données que nécessaire.

Partitionnement dans les intégrations AWS Glue Zero-ETL

AWS Les intégrations Glue Zero-ETL utilisent le format de table Apache Iceberg, qui fournit des fonctionnalités de partitionnement avancées. Lorsque vous créez une intégration zéro ETL, vous pouvez :

  • Utilisez des stratégies de partitionnement par défaut optimisées pour votre source de données

  • Définissez des spécifications de partitionnement personnalisées adaptées à vos modèles de requêtes

  • Appliquer des transformations aux colonnes de partition (particulièrement utile pour le partitionnement basé sur l'horodatage)

  • Combinez plusieurs stratégies de partition pour un partitionnement à plusieurs niveaux

Les configurations de partitionnement sont spécifiées via l'CreateIntegrationTablePropertyAPI lors de la configuration de votre intégration Zero-ETL. Une fois configuré, AWS Glue applique automatiquement ces stratégies de partitionnement pour organiser vos données dans l'emplacement cible.

Référence de l'API de spécification des partitions

Utilisez les paramètres suivants dans l' CreateIntegrationTableProperties API pour configurer le partitionnement :

PartitionSpec

Tableau de spécifications de partition qui définit la manière dont les données sont partitionnées dans l'emplacement cible.

{ "partitionSpec": [ { "fieldName": "timestamp_col", "functionSpec": "month", "conversionSpec": "epoch_milli" }, { "fieldName": "category", "functionSpec": "identity" } ] }
FieldName

Chaîne UTF-8 (1 à 128 octets) spécifiant le nom de colonne à utiliser pour le partitionnement.

FunctionSpec

Spécifie la fonction de partitionnement. Valeurs valides :

  • identity- Utilise les valeurs source directement sans transformation

  • year- Extrait l'année à partir des valeurs d'horodatage (par exemple, 2023)

  • month- Extrait le mois à partir des valeurs d'horodatage (par exemple, 2023-01)

  • day- Extrait le jour à partir des valeurs d'horodatage (par exemple, 15/01/2023)

  • hour- Extrait l'heure des valeurs d'horodatage (par exemple, 15/01/2023)

Note

Les fonctions basées sur le temps (year,month,day,hour) nécessitent le ConversionSpec paramètre pour spécifier le format d'horodatage de la source.

ConversionSpec

Chaîne UTF-8 qui spécifie le format d'horodatage des données sources. Les valeurs valides sont :

  • epoch_sec- Horodatage de l'époque Unix en secondes

  • epoch_milli- Horodatage de l'époque Unix en millisecondes

  • iso- Horodatage au format ISO 8601

Stratégies de partitionnement

Partitionnement par défaut

Lorsqu'aucune colonne de partition n'est spécifiée, AWS Glue Zero-ETL applique des stratégies de partitionnement par défaut optimisées pour votre source de données :

  • Partitionnement basé sur les clés principales : pour les sources dotées de clés primaires (telles que les tables DynamoDB), AWS Glue Zero-ETL partitionne automatiquement les données à l'aide de la clé primaire avec des compartiments afin d'éviter l'explosion des partitions.

Le partitionnement par défaut est conçu pour fonctionner correctement pour les modèles de requêtes courants sans nécessiter de configuration manuelle. Toutefois, pour des modèles de requêtes ou des exigences de performances spécifiques, vous souhaiterez peut-être définir des stratégies de partitionnement personnalisées.

Stratégies de partitionnement définies par l'utilisateur

AWS Glue Zero-ETL vous permet de définir des stratégies de partitionnement personnalisées à l'aide du PartitionSpec paramètre. Vous pouvez spécifier une ou plusieurs colonnes de partition et appliquer différentes fonctions de partitionnement à chaque colonne.

Le partitionnement d'identité utilise les valeurs brutes d'une colonne pour créer des partitions. Cette stratégie est utile pour les colonnes dont la cardinalité est faible à moyenne, telles que les champs de catégorie, de région ou de statut.

Exemple de partitionnement d'identité
{ "partitionSpec": [ { "fieldName": "category", "functionSpec": "identity" } ] }

Cela crée des partitions distinctes pour chaque valeur unique dans la colonne « catégorie ».

Avertissement

Évitez d'utiliser le partitionnement d'identité avec des colonnes à cardinalité élevée (comme les clés primaires ou les horodatages), car cela peut entraîner une explosion des partitions, ce qui dégrade les performances et augmente la surcharge de métadonnées.

Le partitionnement basé sur le temps organise les données en fonction des valeurs d'horodatage selon différentes granularités (année, mois, jour ou heure). Cette stratégie est idéale pour les données de séries chronologiques et permet des requêtes temporelles efficaces.

Lors de l'utilisation du partitionnement basé sur le temps, AWS Glue Zero-ETL peut convertir automatiquement différents formats d'horodatage en un format standardisé avant d'appliquer la fonction de partition. Cette conversion est spécifiée à l'aide du ConversionSpec paramètre.

Exemple de partitionnement basé sur le temps
{ "partitionSpec": [ { "fieldName": "created_at", "functionSpec": "month", "conversionSpec": "epoch_milli" } ] }

Cela partitionne les données par mois en fonction de la colonne « created_at », qui contient les horodatages d'époque Unix en millisecondes.

AWS Glue Zero-ETL prend en charge les fonctions de partition temporelles suivantes :

  • année : Partitionne les données par année (par exemple, 2023, 2024)

  • mois : partitionne les données par mois (par exemple, 2023-01, 2023-02)

  • jour : Partitionne les données par jour (par exemple, 01/01/2023, 02/01/2023)

  • heure : Partitionne les données par heure (par exemple, 01-01-01, 2023-01-01-02)

AWS Glue Zero-ETL prend en charge les formats d'horodatage suivants via le paramètre : ConversionSpec

  • epoch_sec : horodatages d'époque Unix en secondes

  • epoch_milli : horodatages d'époque Unix en millisecondes

  • iso : horodatages au format ISO 8601

Note

Les valeurs de colonne d'origine restent inchangées dans vos données source. AWS Glue transforme uniquement les valeurs des colonnes de partition en type Timestamp dans la table de base de données cible. Les transformations s'appliquent uniquement au processus de partitionnement.

Le partitionnement à plusieurs niveaux combine plusieurs stratégies de partition pour créer un schéma de partitionnement hiérarchique. Cela est utile pour optimiser différents types de requêtes par rapport au même ensemble de données.

Exemple de partitionnement à plusieurs niveaux
{ "partitionSpec": [ { "fieldName": "created_at", "functionSpec": "month", "conversionSpec": "iso" }, { "fieldName": "region", "functionSpec": "identity" } ] }

Cela crée un schéma de partitionnement à deux niveaux : d'abord par mois (à partir de la colonne « created_at »), puis par région. Cela permet des requêtes efficaces qui filtrent par plages de dates, régions spécifiques ou combinaison de ces dimensions.

Lorsque vous concevez des schémas de partitionnement à plusieurs niveaux, tenez compte des points suivants :

  • Placer les colonnes à haute sélectivité en premier dans la hiérarchie des partitions

  • Équilibrer la granularité des partitions avec le nombre de partitions

  • Aligner le schéma de partitionnement sur vos modèles de requêtes les plus courants

Bonnes pratiques

Sélection de la colonne de partition

  • N'utilisez pas de colonnes à cardinalité élevée avec la fonction de identity partition. L'utilisation de colonnes à haute cardinalité avec partitionnement des identités crée de nombreuses petites partitions, ce qui peut considérablement dégrader les performances d'ingestion. Les colonnes à haute cardinalité peuvent inclure :

    • Clés primaires

    • Champs d'horodatage (tels LastModifiedTimestamp que,) CreatedDate

    • Horodatages générés par le système

  • Ne sélectionnez pas plusieurs partitions d'horodatage sur la même colonne. Par exemple :

    "partitionSpec": [ {"fieldName": "col1", "functionSpec": "year", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "month", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "day", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "hour", "conversionSpec" : "epoch_milli"} ]

FunctionSpec/ConversionSpec Sélection de partitions

  • Spécifiez le format correct ConversionSpec (epoch_sec | epoch_milli | iso) qui représente le format des valeurs de colonne choisies pour le partitionnement basé sur l'horodatage lors de l'utilisation de fonctions de partition basées sur l'horodatage. AWS Glue Zero-ETL utilise ce paramètre pour transformer correctement les données source au format d'horodatage avant le partitionnement.

  • Utilisez la granularité appropriée (year/month/day/hour) en fonction du volume de données.

  • Tenez compte des implications du fuseau horaire lorsque vous utilisez des horodatages ISO. AWS Glue Zero-ETL remplit toutes les valeurs d'enregistrement de la colonne d'horodatage choisie avec le fuseau horaire UTC.

Gestion des erreurs

État NEEDS_ATTENTION

Une intégration passe à l'état NEEDS_ATTENTION lorsque :

  • Les colonnes de partition spécifiées n'existent pas dans la source

  • La conversion d'horodatage échoue pour les colonnes de partition