Connecteur Amazon Athena pour DynamoDB
Le connecteur Amazon Athena DynamoDB permet à Amazon Athena de communiquer avec DynamoDB afin que vous puissiez requêter vos tables avec SQL. Les opérations d'écriture telles que INSERT INTO ne sont pas prises en charge.
Ce connecteur peut être enregistré auprès du Catalogue de données Glue en tant que catalogue fédéré. Il prend en charge les contrôles d’accès aux données définis dans Lake Formation aux niveaux catalogue, base de données, table, colonne, ligne et balise. Ce connecteur utilise les connexions Glue pour centraliser les propriétés de configuration dans Glue.
Si Lake Formation est activé sur votre compte, le rôle IAM de votre connecteur Lambda fédéré Athena que vous avez déployé dans le AWS Serverless Application Repository doit avoir un accès en lecture au AWS Glue Data Catalog dans Lake Formation.
Prérequis
Déployez le connecteur sur votre Compte AWS à l’aide de la console Athena ou du AWS Serverless Application Repository. Pour plus d’informations, consultez Création d’une connexion à une source de données ou Utilisation d’AWS Serverless Application Repository pour déployer un connecteur de source de données.
Limitations
Si vous migrez vos connexions DynamoDB vers le Catalogue Glue et Lake Formation, seuls les noms de table et de colonne en minuscules seront reconnus.
Paramètres
Utilisez les paramètres de cette section pour configurer le connecteur DynamoDB.
Nous vous recommandons de configurer un connecteur DynamoDB en utilisant un objet des connexions Glue. Pour ce faire, définissez la variable d’environnement glue_connection du connecteur DynamoDB Lambda sur le nom de la connexion Glue à utiliser.
Propriétés des connexions Glue
Utilisez la commande suivante afin d’obtenir le schéma d’un objet de connexion Glue. Ce schéma contient tous les paramètres que vous pouvez utiliser pour contrôler votre connexion.
aws glue describe-connection-type --connection-type DYNAMODB
Propriétés d’environnement Lambda
glue_connection – Spécifie le nom de la connexion Glue associée au connecteur fédéré.
Note
-
Tous les connecteurs qui utilisent des connexions Glue doivent utiliser AWS Secrets Manager pour stocker les informations d’identification.
-
Le connecteur DynamoDB créé à l’aide des connexions Glue ne prend pas en charge l’utilisation d’un gestionnaire de multiplexage.
-
Le connecteur DynamoDB créé à l’aide des connexions Glue prend uniquement en charge
ConnectionSchemaVersion2.
Note
Les connecteurs de source de données Athena créés le 3 décembre 2024 et les versions ultérieures utilisent des connexions AWS Glue.
Les noms et définitions de paramètres répertoriés ci-dessous concernent les connecteurs de source de données Athena créés sans connexion Glue associée. Utilisez les paramètres suivants uniquement lorsque vous déployez manuellement une version antérieure d’un connecteur de source de données Athena ou lorsque la propriété d’environnement glue_connection n’est pas spécifiée.
Propriétés d’environnement Lambda
-
spill_bucket – Spécifie le compartiment Amazon S3 pour les données qui dépassent les limites des fonctions Lambda.
-
spill_prefix – (Facultatif) Par défaut, il s’agit d’un sous-dossier dans le
spill_bucketspécifié appeléathena-federation-spill. Nous vous recommandons de configurer un cycle de vie de stockage Amazon S3 à cet endroit pour supprimer les déversements supérieurs à un nombre de jours ou d’heures prédéterminé. -
spill_put_request_headers – (Facultatif) Une carte codée au format JSON des en-têtes et des valeurs des demandes pour la demande
putObjectAmazon S3 utilisée pour le déversement (par exemple,{"x-amz-server-side-encryption" : "AES256"}). Pour les autres en-têtes possibles, consultez PutObject dans la Référence d'API Amazon Simple Storage Service. -
kms_key_id – (Facultatif) Par défaut, toutes les données déversées vers Amazon S3 sont chiffrées à l'aide du mode de chiffrement authentifié AES-GCM et d'une clé générée de manière aléatoire. Pour que votre fonction Lambda utilise des clés de chiffrement plus puissantes générées par KMS, comme
a7e63k4b-8loc-40db-a2a1-4d0en2cd8331, vous pouvez spécifier l’ID d’une clé KMS. -
disable_spill_encryption – (Facultatif) Lorsque la valeur est définie sur
True, le chiffrement des déversements est désactivé. La valeur par défaut estFalseafin que les données déversées vers S3 soient chiffrées à l’aide d’AES-GCM, soit à l’aide d’une clé générée de manière aléatoire soit à l’aide de KMS pour générer des clés. La désactivation du chiffrement des déversements peut améliorer les performances, surtout si votre lieu de déversement utilise le chiffrement côté serveur. -
disable_glue – (Facultatif) S’il est présent et défini sur true, le connecteur ne tente pas de récupérer des métadonnées supplémentaires depuis AWS Glue.
-
glue_catalog – (Facultatif) Utilisez cette option pour spécifier un catalogue AWS Glue entre compte. Par défaut, le connecteur tente d’obtenir des métadonnées depuis son propre compte AWS Glue.
-
disable_projection_and_casing – (Facultatif) Désactive la projection et la casse. À utiliser si vous souhaitez interroger des tables DynamoDB dont le nom de colonne est sensible à la casse et que vous ne souhaitez pas spécifier de propriété
columnMappingsur votre table AWS Glue.Le paramètre
disable_projection_and_casingutilise les valeurs suivantes pour spécifier le comportement de la casse et du mappage des colonnes :-
auto – Désactive la projection et la casse lorsqu’un type précédemment non pris en charge est détecté et que le mappage des noms de colonnes n’est pas défini sur la table. Il s’agit du paramètre par défaut.
-
always (toujours) – Désactive la projection et la casse de manière inconditionnelle. Cela est utile lorsque vous avez des noms de vos colonnes DynamoDB sensibles à la casse, mais que vous ne souhaitez pas spécifier de mappage de noms de colonnes.
Lorsque vous utilisez le paramètre
disable_projection_and_casing, gardez à l'esprit les points suivants :-
L'utilisation de ce paramètre peut augmenter l'utilisation de la bande passante. En outre, si votre fonction Lambda ne se trouve pas dans la même Région AWS que votre source de données, vous devrez supporter des coûts de transfert interrégionaux AWS standard plus élevés en raison de l'utilisation plus importante de la bande passante. Pour plus d'informations sur les frais de transfert interrégionaux, consultez la page Frais de transfert de données AWS pour les architectures avec et sans serveur
sur le blog du réseau de partenaires AWS. -
Étant donné qu'un plus grand nombre d'octets est transféré et qu'un plus grand nombre d'octets nécessite un délai de désérialisation plus long, la latence globale peut augmenter.
-
Configuration de bases de données et de tables dans AWS Glue
La capacité d’inférence de schéma intégrée du connecteur étant limitée, vous pouvez souhaiter utiliser AWS Glue pour les métadonnées. Pour ce faire, vous devez disposer d’une base de données et d’une table dans AWS Glue. Pour les utiliser avec DynamoDB, vous devez modifier leurs propriétés.
Modification des propriétés d’une base de données dans la console AWS Glue
Connectez-vous à la AWS Management Console et ouvrez la console AWS Glue à l’adresse https://console.aws.amazon.com/glue/
. -
Dans le panneau de navigation, développez Catalogue de données, puis sélectionnez Bases de données.
Sur la page Databases (Bases de données), vous pouvez modifier une base de données existante ou sélectionner Add database (Ajouter une base de données) pour en créer une.
-
Dans la liste des bases de données, sélectionnez le lien de la base de données à modifier.
-
Choisissez Modifier.
-
Sur la page Mettre à jour une base de données, sous Paramètres de la base de données, dans Emplacement, ajoutez la chaîne
dynamo-db-flag. Ce mot-clé indique que la base de données contient des tables utilisées par le connecteur Athena DynamoDB pour des métadonnées supplémentaires, et est requis pour les bases de données AWS Glue autres quedefault. La propriétédynamo-db-flagpermet de filtrer les bases de données des comptes comprenant de nombreuses bases de données. -
Choisissez Update Database (Mettre à jour la base de données).
Modification des propriétés d'une table dans la console AWS Glue
Connectez-vous à la AWS Management Console et ouvrez la console AWS Glue à l’adresse https://console.aws.amazon.com/glue/
. -
Dans le panneau de navigation, développez Catalogue de données, puis sélectionnez Tables.
-
Sur la page Tables, dans la liste des tables, choisissez le nom lié de la table que vous souhaitez modifier.
-
Sélectionnez Actions, puis Edit table (Modifier la table).
-
Sur la page Edit table (Modifier la table), dans la section Table properties (Propriétés de la table), ajoutez les propriétés de table suivantes, selon les besoins. Si vous utilisez le crawler DynamoDB AWS Glue, ces propriétés sont définies automatiquement.
-
dynamoDB— Chaîne indiquant au connecteur Athena DynamoDB que la table peut être utilisée pour des métadonnées supplémentaires. Saisissez la chaîne
dynamodbdans les propriétés de la table, dans un champ nommé classification (correspondance exacte).Note
La page Définir les propriétés de la table qui fait partie du processus de création de table dans la console AWS Glue comporte une section Format de données avec un champ Classification. Vous ne pouvez pas saisir ou choisir
dynamodbici. Après avoir créé votre table, suivez plutôt les étapes pour modifier la table et pour saisirclassificationetdynamodbsous forme de paire clé-valeur dans la section Propriétés de la table. -
sourceTable – Propriété de table facultative qui définit le nom de la table source dans DynamoDB. Utilisez cette propriété si les règles de dénomination des tables AWS Glue vous empêchent de créer une table AWS Glue portant le même nom que votre table DynamoDB. Par exemple, les majuscules ne sont pas autorisées dans les noms de tables AWS Glue, mais elles le sont dans les noms de tables DynamoDB.
-
columnMapping – Propriété de table facultative qui définit les mappages de noms de colonnes. Utilisez cette propriété si les règles de dénomination des colonnes AWS Glue vous empêchent de créer une table AWS Glue portant les mêmes noms de colonnes que votre table DynamoDB. Par exemple, les majuscules ne sont pas autorisées dans les noms de tables AWS Glue, mais elles le sont dans les noms de colonnes DynamoDB. La valeur de la propriété devrait être au format col1=Col1,col2=Col2. Notez que le mappage des colonnes s'applique uniquement aux noms de colonnes de niveau supérieur et non aux champs imbriqués.
-
defaultTimeZone – Propriété de table facultative appliquée aux valeurs
dateoudatetimequi n’ont pas de fuseau horaire explicite. La définition de cette valeur est recommandée pour éviter tout écart entre le fuseau horaire par défaut de la source de données et le fuseau horaire de la session Athena. -
datetimeFormatMapping – Propriété de table facultative qui spécifie le format
dateoudatetimeà utiliser lors de l’analyse des données d’une colonne du type de données AWS Gluedateoutimestamp. Si cette propriété n’est pas spécifiée, le connecteur tente de déduireun format ISO-8601. Si le connecteur ne peut pas déduire le format dateoudatetimeni analyser la chaîne brute, la valeur est alors omise du résultat.La valeur
datetimeFormatMappingdoit être au formatcol1=someformat1,col2=someformat2. Voici quelques exemples de formats :yyyyMMdd'T'HHmmss ddMMyyyy'T'HH:mm:ssSi votre colonne contient des valeurs
dateoudatetimesans fuseau horaire et que vous souhaitez utiliser la colonne dans la clauseWHERE, définissez la propriétédatetimeFormatMappingpour la colonne.
-
-
Si vous définissez manuellement vos colonnes, assurez-vous que vous utilisez les types de données appropriés. Si vous avez utilisé un crawler, validez les colonnes et les types qu’il a découverts.
-
Choisissez Enregistrer.
Autorisations nécessaires
Pour plus de détails sur les politiques IAM requises par ce connecteur, reportez-vous à la section Policies du fichier athena-dynamodb.yaml
-
Amazon S3 write access (Accès en écriture Amazon S3) – Le connecteur nécessite un accès en écriture à un emplacement dans Amazon S3 pour déverser les résultats à partir de requêtes volumineuses.
-
Athena GetQueryExecution – Le connecteur utilise cette autorisation pour aboutir à un échec rapide lorsque la requête Athena en amont est terminée.
-
AWS Glue Data Catalog – Le connecteur DynamoDB nécessite un accès en lecture seule au AWS Glue Data Catalog pour obtenir des informations sur le schéma.
-
CloudWatch Logs – Le connecteur nécessite un accès à CloudWatch Logs pour stocker les journaux.
-
Accès en lecture DynamoDB – Le connecteur utilise les opérations d’API
DescribeTable,ListSchemas,ListTables,QueryetScan.
Performances
Le connecteur Athena DynamoDB prend en charge les examens parallèles et les tentatives de transfert de prédicats dans le cadre de ses requêtes DynamoDB. Un prédicat de clé de hachage avec des valeurs distinctes X se traduit par des appels de requête X à DynamoDB. Tous les autres scénarios de prédicat se traduisent par un nombre Y d’appels d’analyse, où Y est déterminé de manière heuristique en fonction de la taille de votre table et de son débit alloué. Cependant, la sélection d'un sous-ensemble de colonnes entraîne parfois un délai d'exécution plus long des requêtes.
Les clauses LIMIT et les prédicats simples sont poussés vers le bas, ce qui peut réduire la quantité de données analysées et entraîner une diminution du délai d'exécution des requêtes.
Clauses LIMIT
Une instruction LIMIT N réduit les données analysées par la requête. Grâce à la poussée vers le bas LIMIT N, le connecteur renvoie uniquement des lignes N à Athena.
Prédicats
Un prédicat est une expression contenue dans la clause WHERE d'une requête SQL qui prend une valeur booléenne et filtre les lignes en fonction de plusieurs conditions. Le connecteur Athena DynamoDB peut combiner ces expressions et les pousser directement vers DynamoDB pour améliorer la fonctionnalité et réduire la quantité de données analysées.
Les opérateurs du connecteur Athena DynamoDB suivants prennent en charge la poussée vers le bas de prédicats :
-
Booléen : AND
-
Égalité : EQUAL, NOT_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, IS_NULL
Exemple de poussée combinée vers le bas
Pour améliorer les capacités de requête, combinez les types de poussée vers le bas, comme dans l'exemple suivant :
SELECT * FROM my_table WHERE col_a > 10 and col_b < 10 LIMIT 10
Pour un article sur l'utilisation de la poussée vers le bas de prédicats pour améliorer les performances des requêtes fédérées, y compris DynamoDB, consultez Améliorer les requêtes fédérées avec la poussée vers le bas de prédicats dans Amazon Athena
Requêtes de transmission
Le connecteur DynamoDB prend en charge les requêtes de transmission et utilise la syntaxe PartiQL. L’opération d’API DynamoDB GetItem n’est pas prise en charge. Pour plus d’informations sur les interrogations avec DynamoDB à l’aide de PartiQL, consultez PartiQL select statements for DynamoDB dans le Guide de développement d’Amazon DynamoDB.
Pour utiliser les requêtes de transmission avec DynamoDB, utilisez la syntaxe suivante :
SELECT * FROM TABLE( system.query( query => 'query_string' ))
L’exemple de requête de transmission DynamoDB suivant utilise PartiQL pour renvoyer la liste des appareils Fire TV Stick dont la propriété DateWatched est postérieure au 24/12/22.
SELECT * FROM TABLE( system.query( query => 'SELECT Devices FROM WatchList WHERE Devices.FireStick.DateWatched[0] > '12/24/22'' ))
Résolution des problèmes
Plusieurs filtres sur une colonne de clé de tri
Message d'erreur : KeyConditionExpressions ne doit contenir qu'une seule condition par clé
Cause : ce problème peut se produire dans la version 3 du moteur Athena dans les requêtes comportant à la fois un filtre de limite inférieure et supérieure sur une colonne de clé de tri DynamoDB. DynamoDB ne prenant en charge qu'une seule condition de filtre sur une clé de tri, une erreur est générée lorsque le connecteur tente de pousser vers le bas une requête sur laquelle les deux conditions sont appliquées.
Solution : mettre à jour le connecteur vers la version 2023.11.1 ou ultérieure. Pour obtenir des instructions sur la mise à jour d'un connecteur, consultez Mise à jour d’un connecteur de source de données.
Coûts
Les coûts d’utilisation du connecteur dépendent des ressources AWS sous-jacentes utilisées. Étant donné que les requêtes qui utilisent des examens peuvent consommer un grand nombre d’unités de capacité de lecture (RCU)
Ressources supplémentaires
-
Pour une introduction à l'utilisation du connecteur Amazon Athena DynamoDB, consultez Accéder aux tables Amazon DynamoDB, les interroger et les joindre à l'aide d'Athena dans le guide Modèles de recommandations AWS.
-
Pour obtenir un article expliquant comment utiliser le connecteur Athena pour DynamoDB afin d’interroger des données dans DynamoDB avec SQL et de visualiser les informations dans Quick Suite, consultez l’article Visualize Amazon DynamoDB insights in Quick Suite using the Amazon Athena DynamoDB connector and AWS Glue
dans le blog AWS Big Data Blog. -
Pour obtenir un article concernant l’utilisation du connecteur Amazon Athena pour DynamoDB avec Amazon DynamoDB, Athena et Quick Suite afin de créer un tableau de bord de gouvernance simple, consultez l’article Query cross-account Amazon DynamoDB tables using Amazon Athena Federated Query
dans le blog AWS Big Data Blog. Pour plus d'informations sur ce connecteur, consultez le site correspondant
sur GitHub.com.