Résolution des problèmes dans Athena - Amazon Athena

Résolution des problèmes dans Athena

L'équipe d'Athena a rassemblé les informations suivantes de résolution de problèmes à partir des problèmes des clients. Bien qu'elles ne soient pas exhaustives, elles comprennent des conseils concernant certains problèmes courants de performances, de délais d'attente et de manque de mémoire.

CREATE TABLE AS SELECT (CTAS)

Il y a duplication des données en cas d'instructions CTAS simultanées

Athena ne maintient pas la validation simultanée pour CTAS. Assurez-vous qu'il n'y a pas d'instruction CTAS dupliquée pour le même emplacement au même moment. Même si une instruction CTAS ou INSERT INTO échoue, les données orphelines peuvent être laissées dans l'emplacement de données spécifié dans l'instruction.

HIVE_TOO_MANY_OPEN_PARTITIONS

Lorsque vous utilisez une instruction CTAS pour créer une table comportant plus de 100 partitions, l'erreur HIVE_TOO_MANY_OPEN_PARTITIONS: Exceeded limit of 100 open writers for partitions/buckets (Dépassement de la limite de 100 rédacteurs ouverts pour les partitions/compartiments) peut s'afficher. Pour contourner ces limitations, vous pouvez utiliser une instruction CTAS et une série d'instructions INSERT INTO qui créent ou insèrent jusqu'à 100 partitions chacune. Pour de plus amples informations, consultez Utilisation de CTAS et INSERT INTO pour contourner la limite de 100 partitions.

Problèmes de fichiers de données

Athena ne peut pas lire les fichiers cachés

Athena traite les fichiers sources qui commencent par un trait de soulignement (_) ou un point (.) comme étant cachés. Pour contourner cette limitation, renommez les fichiers.

Athena lit des fichiers que j'ai exclus du Crawler AWS Glue

Athena ne reconnaît pas les modèles d'exclusion que vous spécifiez à un Crawler AWS Glue. Par exemple, si vous disposez d'un compartiment Simple Storage Service (Amazon S3) contenant à la fois des fichiers .csv et .json et que vous excluez les fichiers .json du Crawler, Athena interroge les deux groupes de fichiers. Pour éviter cela, placez les fichiers que vous voulez exclure dans un autre emplacement.

HIVE_BAD_DATA : erreur lors de l'analyse de la valeur du champ

Cette erreur peut se produire dans les cas suivants :

HIVE_CANNOT_OPEN_SPLIT : erreur lors de l’ouverture du fractionnement Hive s3://amzn-s3-demo-bucket

Cette erreur peut se produire lorsque vous interrogez un préfixe de compartiment Simple Storage Service (Amazon S3) qui contient un grand nombre d'objets. Pour plus d’informations, consultez Comment puis-je corriger l’erreur de requête Athena « HIVE_CANNOT_OPEN_SPLIT » ? dans le Centre de connaissances AWS.

HIVE_CURSOR_ERROR : com.amazonaws.services.s3.model.AmazonS3Exception : la clé spécifiée n'existe pas

Cette erreur se produit généralement lorsqu'un fichier est supprimé alors qu'une requête est en cours d'exécution. Vous pouvez soit réexécuter la requête, soit vérifier votre flux de travail pour voir si une autre tâche ou un autre processus modifie les fichiers pendant l'exécution de la requête.

HIVE_CURSOR_ERROR : fin inattendue du flux d'entrée

Ce message indique que le fichier est soit corrompu, soit vide. Vérifiez l'intégrité du fichier et exécutez à nouveau la requête.

HIVE_FILESYSTEM_ERROR : taille du fichier 1234567 incorrecte pour le fichier

Ce message peut survenir lorsqu'un fichier a été modifié entre la planification de la requête et son exécution. Cela se produit généralement lorsqu'un fichier sur Simple Storage Service (Amazon S3) est remplacé sur place (par exemple, un PUT est exécuté sur une clé où un objet existe déjà). Athena ne prend pas en charge la suppression ou le remplacement du contenu d'un fichier lorsqu'une requête est en cours d'exécution. Pour éviter cette erreur, planifiez des tâches qui écrasent ou suppriment des fichiers à des moments où les requêtes ne sont pas exécutées, ou qui n'écrivent des données que dans de nouveaux fichiers ou partitions.

HIVE_UNKNOWN_ERROR : impossible de créer le format d'entrée

Cette erreur peut être le résultat de problèmes tels que :

  • Le Crawler AWS Glue n'a pas été capable de classer le format des données

  • Certaines propriétés de définition de la table AWS Glue sont vides

  • Athena ne prend pas en charge le format de données des fichiers de Simple Storage Service (Amazon S3)

Pour plus d'informations, consultez la rubrique Comment résoudre l'erreur « impossible de créer le format d'entrée » dans Athena ? dans le Centre de connaissances AWS ou regardez la vidéo du Centre de connaissances.

L'emplacement S3 fourni pour enregistrer les résultats de votre requête n'est pas valide.

Assurez-vous que vous avez spécifié un emplacement S3 valide pour les résultats de votre requête. Pour plus d'informations, consultez Spécification d’un emplacement de résultats des requêtes dans la rubrique Utilisation des résultats des requêtes et des requêtes récentes.

Tables Linux Foundation Delta Lake

Schéma de table Delta Lake non synchronisé

Lorsque vous interrogez une table de Delta Lake dont le schéma dans AWS Glue est obsolète, le message d'erreur suivant peut s'afficher :

INVALID_GLUE_SCHEMA: Delta Lake table schema in Glue does not match the most recent schema of the Delta Lake transaction log. Please ensure that you have the correct schema defined in Glue.

Le schéma peut devenir obsolète s'il est modifié dans AWS Glue après avoir été ajouté à Athena. Pour mettre à jour le schéma, effectuez l'une des étapes suivantes :

Requêtes fédérées

Délai d'expiration lors de l'appel de ListTableMetadata

Un appel à l'API ListTableMetadata peut expirer si la source de données contient de nombreuses tables, si la source de données est lente ou si le réseau est lent. Pour résoudre ce problème, essayez les étapes suivantes.

  • Vérifier le nombre de tables : si vous avez plus de 1 000 tables, essayez de réduire le nombre de tables. Pour obtenir la réponse ListTableMetadata la plus rapide, nous vous recommandons d'avoir moins de 1 000 tables par catalogue.

  • Vérifier la configuration Lambda – Il est essentiel de surveiller le comportement de la fonction Lambda. Lorsque vous utilisez des catalogues fédérés, veillez à examiner les journaux d'exécution de la fonction Lambda. Sur la base des résultats, ajustez les valeurs de mémoire et de délai d'expiration en conséquence. Pour identifier tout problème potentiel lié aux délais d'expiration, parcourez à nouveau votre configuration Lambda. Pour plus d'informations, consultez Configuration du délai d'expiration de la fonction (console) dans le Guide du développeur AWS Lambda.

  • Vérifier les journaux des sources de données fédérées – Examinez les journaux et les messages d'erreur de la source de données fédérée pour voir s'il existe des problèmes ou des erreurs. Les journaux peuvent fournir des informations précieuses sur la cause du délai d'expiration.

  • Utiliser StartQueryExecution pour récupérer les métadonnées : si vous avez plus de 1 000 tables, la récupération des métadonnées à l'aide de votre connecteur fédéré peut prendre plus de temps que prévu. Étant donné que la nature asynchrone de StartQueryExecution garantit qu'Athena exécute la requête de la manière la plus optimale, envisagez d'utiliser StartQueryExecution comme alternative à ListTableMetadata. Les exemples AWS CLI suivants montrent comment StartQueryExecution peut être utilisée au lieu de ListTableMetadata pour obtenir toutes les métadonnées des tables de votre catalogue de données.

    Commencez par exécuter une requête qui récupère toutes les tables, comme dans l'exemple suivant.

    aws athena start-query-execution --region us-east-1 \ --query-string "SELECT table_name FROM information_schema.tables LIMIT 50" \ --work-group "your-work-group-name"

    Ensuite, récupérez les métadonnées d'une table individuelle, comme dans l'exemple suivant.

    aws athena start-query-execution --region us-east-1 \ --query-string "SELECT * FROM information_schema.columns \ WHERE table_name = 'your-table-name' AND \ table_catalog = 'your-catalog-name'" \ --work-group "your-work-group-name"

    Le temps nécessaire pour obtenir les résultats dépend du nombre de tables de votre catalogue.

Pour des informations sur la résolution des problèmes liés aux requêtes fédérées, consultez Problèmes courants dans la section awslabs/aws-athena-query-federation de GitHub ou consultez la documentation des connecteurs de source de données Athena individuels.

Erreurs de données NULL ou incorrectes lors de la tentative de lecture de données JSON

Les erreurs de données NULL ou incorrectes lorsque vous essayez de lire des données JSON peuvent avoir plusieurs causes. Pour identifier les lignes qui causent des erreurs lorsque vous utilisez le SerDe OpenX, définissez ignore.malformed.json sur true. Les registres mal formés seront renvoyés comme NULL. Pour plus d'informations, consultez la rubrique Je reçois des erreurs lorsque j'essaie de lire des données JSON dans Amazon Athena dans le Centre de connaissances AWS ou regardez la vidéo du Centre de connaissances.

HIVE_BAD_DATA : erreur d'analyse de la valeur du champ 0 : java.lang.String ne peut pas être converti en org.openx.data.jsonserde.json.JSONObject

Le SerDe SerDe JSON OpenX renvoie cette erreur lorsqu'il ne parvient pas à analyser une colonne dans une requête Athena. Cela peut se produire si vous définissez une colonne comme un map ou un struct, mais que les données sous-jacentes sont en fait un string, un int ou un autre type primitif.

HIVE_CURSOR_ERROR : la ligne n'est pas un objet JSON valide - JSONException : clé dupliquée

Cette erreur se produit lorsque vous utilisez Athena pour interroger des ressources AWS Config qui ont plusieurs étiquettes avec le même nom dans des cas différents. La solution consiste à exécuter CREATE TABLE en utilisant WITH SERDEPROPERTIES 'case.insensitive'='false' et à mapper les noms. Pour plus d'informations sur case.insensitive et le mappage, voir Bibliothèques SerDe JSON. Pour plus d'informations, consultez la rubrique Comment résoudre le problème « HIVE_CURSOR_ERROR: Row is not a valid JSON object - JSONException: Duplicate key » (HIVE_CURSOR_ERROR : la ligne n'est pas un objet JSON valide - JSONException : clé dupliquée) lors de la lecture de fichiers de AWS Config dans Athena ? dans le Centre de connaissances AWS.

Messages HIVE_CURSOR_ERROR avec JSON formaté à des fins d'impression (pretty-printed)

Les bibliothèques SerDe JSON Hive et SerDe JSON OpenX nécessitent que chaque document JSON soit sur une seule ligne de texte, sans caractères de fin de ligne pour séparer les champs de l'enregistrement. Si le texte JSON est au format d'impression, vous pouvez recevoir un message d'erreur similaire à HIVE_CURSOR_ERROR : Row is not a valid JSON Object (La ligne n'est pas un JSON valide) ou HIVE_CURSOR_ERROR : JSONParseException : Unexpected end-of-input: expected close marker for OBJECT (Fin d'entrée inattendue : marqueur de fermeture attendu pour OBJECT) lorsque vous tentez d'interroger la table après l'avoir créée. Pour de plus amples informations, consultez la section Fichiers de données JSON dans la documentation OpenX SerDe sur GitHub.

Plusieurs registres JSON renvoient un SELECT COUNT de 1

Si vous utilisez le SerDe SerDe JSON OpenX, assurez-vous que les registres sont séparés par un caractère de saut de ligne. Pour plus d'informations, consultez la rubrique La requête SELECT COUNT d'Amazon Athena ne renvoie qu'un seul registre alors que le fichier JSON d'entrée en contient plusieurs dans le Centre de connaissances AWS.

Impossible d'interroger une table créée par un Crawler AWS Glue qui utilise un classificateur JSON personnalisé

Le moteur Athena ne prend pas en charge les classificateurs JSON personnalisés. Pour contourner ce problème, créez une nouvelle table sans le classificateur personnalisé. Pour transformer le JSON, vous pouvez utiliser CTAS ou créer une vue. Par exemple, si vous travaillez avec des tableaux, vous pouvez utiliser l'option UNNEST pour aplatir le JSON. Une autre option consiste à utiliser une tâche ETL AWS Glue qui prend en charge le classificateur personnalisé, à convertir les données en Parquet dans Simple Storage Service (Amazon S3), puis à les interroger dans Athena.

MSCK REPAIR TABLE

Pour plus d'informations sur les problèmes liés à MSCK REPARATION TABLE, consultez les sections Considérations et restrictions et Résolution des problèmes de la page MSCK REPAIR TABLE.

Problèmes de sortie

Impossible de vérifier/créer un compartiment de sortie

Cette erreur peut se produire si l'emplacement spécifié pour le résultat de la requête n'existe pas ou si les autorisations appropriées ne sont pas présentes. Pour de plus amples informations, consultez la rubrique Comment résoudre l'erreur « Impossible de vérifier/créer un compartiment de sortie » dans Amazon Athena ? dans le Centre de connaissances AWS.

Le résultat TIMESTAMP est vide

Athena nécessite le format TIMESTAMP de Java. Pour plus d'informations, consultez la rubrique Lorsque j'interroge une table dans Amazon Athena, le résultat TIMESTAMP est vide dans le Centre de connaissances AWS.

Stockage des résultats de la requête Athena dans un format autre que CSV

Par défaut, Athena n'affiche que des fichiers au format CSV. Pour afficher les résultats d'une requête SELECT dans un autre format, vous pouvez utiliser l'instruction UNLOAD. Pour de plus amples informations, consultez UNLOAD. Vous pouvez également utiliser une requête CTAS qui utilise la propriété de table format pour configurer le format de sortie. Contrairement à UNLOAD, la technique CTAS nécessite la création d'une table. Pour plus d'informations, consultez la rubrique Comment stocker les résultats d'une requête Athena dans un format autre que CSV, tel qu'un format compressé ? dans le Centre de connaissances AWS.

L'emplacement S3 fourni pour enregistrer les résultats de votre requête n'est pas valide

Il est possible que vous receviez ce message d'erreur si l'emplacement de votre compartiment de sortie ne se trouve pas dans la même région que celle dans laquelle vous exécutez votre requête. Pour éviter cela, spécifiez l'emplacement des résultats de la requête dans la région dans laquelle vous exécutez la requête. Pour les étapes, consultez Spécification d’un emplacement de résultats des requêtes.

Problèmes liés à Parquet

org.apache.parquet.io.GroupColumnIO ne peut pas être converti en org.apache.parquet.io.PrimitiveColumnIO

Cette erreur est causée par une inadéquation du schéma Parquet. Une colonne qui a un type non primitif (par exemple, array) a été déclarée comme un type primitif (par exemple, string) dans AWS Glue. Pour résoudre ce problème, vérifiez le schéma de données dans les fichiers et comparez-le au schéma déclaré dans AWS Glue.

Problèmes de statistiques liés à Parquet

Lorsque vous lisez des données Parquet, vous pouvez recevoir des messages d'erreur tels que les suivants :

HIVE_CANNOT_OPEN_SPLIT: Index x out of bounds for length y HIVE_CURSOR_ERROR: Failed to read x bytes HIVE_CURSOR_ERROR: FailureException at Malformed input: offset=x HIVE_CURSOR_ERROR: FailureException at java.io.IOException: can not read class org.apache.parquet.format.PageHeader: Socket is closed by peer.

Pour contourner ce problème, utilisez l'instruction CREATE TABLE ou ALTER TABLE SET TBLPROPERTIES pour définir la propriété parquet.ignore.statistics Parquet SerDe sur true, comme dans les exemples suivants.

Exemple CREATE TABLE

... ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' WITH SERDEPROPERTIES ('parquet.ignore.statistics'='true') STORED AS PARQUET ...

Exemple ALTER TABLE

ALTER TABLE ... SET TBLPROPERTIES ('parquet.ignore.statistics'='true')

Pour plus d'informations sur le Parquet SerDe Hive, consultez SerDe Parquet.

Problèmes de partitionnement

MSCK REPARATION TABLE ne supprime pas les partitions périmées

Si vous supprimez manuellement une partition dans Simple Storage Service (Amazon S3), puis exécutez MSCK REPAIR TABLE, il est possible que vous receviez le message d'erreur Partitions missing from filesystem (Partitions manquantes dans le système de fichiers). Cela se produit parce que MSCK REPAIR TABLE ne supprime pas les partitions périmées des métadonnées de la table. Utilisez ALTER TABLE DROP PARTITION pour supprimer manuellement les partitions périmées. Pour plus d'informations, consultez la section « Résolution des problèmes » de la rubrique MSCK REPAIR TABLE.

Échec de MSCK REPAIR TABLE

Lorsqu'un grand nombre de partitions (par exemple, plus de 100 000) sont associées à une table particulière, MSCK REPAIR TABLE peut échouer en raison de limitations de mémoire. Pour contourner cette limite, utilisez ALTER TABLE ADD PARTITION à la place.

MSCK REPARATION TABLE détecte les partitions, mais ne les ajoute pas à AWS Glue

Ce problème peut se produire si un chemin d'accès Simple Storage Service (Amazon S3) est en majuscules au lieu de minuscules ou si une politique IAM n'autorise pas l'action glue:BatchCreatePartition. Pour plus d'informations, consultez la rubrique MSCK REPAIR TABLE détecte les partitions dans Athena mais ne les ajoute pas au AWS Glue Data Catalog dans le Centre de connaissances AWS.

Les plages de projection des partitions avec le format de date jj-MM-aaaa-HH-mm-ss ou aaaa-MM-jj ne fonctionnent pas

Pour fonctionner correctement, le format de date doit être défini sur yyyy-MM-dd HH:00:00. Pour plus d'informations, consultez l'article Dépassement de la capacité de la pile : la projection de partition Athena ne fonctionne pas comme prévu.

PARTITION BY ne prend pas en charge le type BIGINT

Convertir le type de données en string et réessayer.

Pas de partitions significatives disponibles

Ce message d'erreur signifie généralement que les paramètres de la partition ont été corrompus. Pour résoudre ce problème, abandonnez la table et créez une table avec de nouvelles partitions.

La projection de partition ne fonctionne pas en conjonction avec les partitions de plage

Vérifiez que l'unité de plage de temps projection.<columnName>.interval.unit correspond au délimiteur des partitions. Par exemple, si les partitions sont délimitées par des jours, l'unité de plage des heures ne fonctionnera pas.

Erreur de projection de partition lorsque la plage est spécifiée par un tiret

La spécification de la propriété de table range avec un tiret au lieu d'une virgule produit une erreur du type INVALID_TABLE_PROPERTY : Pour la chaîne de saisie : « number-number ». Veillez à ce que les valeurs de la plage soient séparées par une virgule, et non par un tiret. Pour de plus amples informations, consultez Type d'entier.

HIVE_UNKNOWN_ERROR : impossible de créer le format d'entrée

Une ou plusieurs des partitions Glue sont déclarées dans un format différent, car chaque partition Glue a son propre format d'entrée spécifique de manière indépendante. Veuillez vérifier comment vos partitions sont définies dans AWS Glue.

HIVE_PARTITION_SCHEMA_MISMATCH

Si le schéma d'une partition diffère du schéma de la table, la requête peut échouer avec le message d'erreur HIVE_PARTITION_SCHEMA_MISMATCH.

Pour chaque table du catalogue de données AWS Glue qui possède des colonnes de partition, le schéma est stocké au niveau de la table et pour chaque partition individuelle de la table. Le schéma des partitions est renseigné par un Crawler AWS Glue en fonction de l'échantillon de données qu'il lit au sein de la partition.

Lorsqu'Athena exécute une requête, il valide le schéma de la table et le schéma de toute partition nécessaire à la requête. La validation compare les types de données des colonnes dans l'ordre et s'assure qu'ils correspondent pour les colonnes qui se chevauchent. Ceci empêche les opérations inattendues, telles que l'ajout ou la suppression de colonnes depuis le milieu d'une table. Si Athena détecte que le schéma d'une partition diffère du schéma de la table, Athena risque de ne pas pouvoir traiter la requête et échoue avec HIVE_PARTITION_SCHEMA_MISMATCH.

Il existe deux moyens de corriger ce problème. Tout d'abord, si les données ont été ajoutées accidentellement, vous pouvez supprimer les fichiers de données à l'origine de la différence de schéma, supprimer la partition et exécuter à nouveau le robot d'indexation sur les données. Deuxièmement, vous pouvez supprimer la partition individuelle, puis exécuter MSCK REPAIR dans Athena pour recréer la partition à l'aide du schéma de la table. Cette deuxième option fonctionne uniquement si vous êtes certain que le schéma appliqué continuera de lire les données correctement.

La table SemanticException n'est pas partitionnée, mais la spécification de partition existe

Cette erreur peut se produire lorsqu'aucune partition n'a été définie dans l'instruction CREATE TABLE. Pour plus d'informations, consultez la rubrique Comment résoudre l'erreur « ÉCHEC : la table SemanticException n'est pas partitionnée, mais la spécification de partition existe » dans Athena ? dans le Centre de connaissances AWS.

Fichiers _$folder$ zéro octet

Si vous exécutez une instruction ALTER TABLE ADD PARTITION et spécifiez par erreur une partition déjà existante et un emplacement Simple Storage Service (Amazon S3) incorrect, des fichiers d'emplacement zéro octet du format partition_value_$folder$ sont créés dans Simple Storage Service (Amazon S3). Vous devez supprimer ces fichiers manuellement.

Pour éviter que cela ne se produise, utilisez la syntaxe ADD IF NOT EXISTS dans votre instruction ALTER TABLE ADD PARTITION comme suit :

ALTER TABLE table_name ADD IF NOT EXISTS PARTITIION […]

Aucun registre renvoyé par les données partitionnées

Ce problème peut se produire pour différentes raisons. Pour connaître les causes et les résolutions possibles, consultez la rubrique J'ai créé une table dans Amazon Athena avec des partitions définies, mais lorsque j'interroge la table, aucun registre n'est renvoyé dans le Centre de connaissances AWS.

Consultez également . HIVE_TOO_MANY_OPEN_PARTITIONS.

Autorisations

Erreur d'accès refusé lors de l'interrogation de Simple Storage Service (Amazon S3)

Cela peut se produire lorsque vous n'avez pas l'autorisation de lire les données dans le compartiment, l'autorisation d'écrire dans le compartiment de résultats ou que le chemin d'accès Simple Storage Service (Amazon S3) contient un point de terminaison de région comme us-east-1.amazonaws.com. Pour plus d'informations, consultez la rubrique Lorsque j'exécute une requête Athena, je reçois une erreur « access denied » (Accès refusé) dans le centre de connaissances AWS.

Accès refusé avec le code d'état : erreur 403 lors de l'exécution de requêtes DDL sur des données chiffrées dans Simple Storage Service (Amazon S3)

Il est possible que vous receviez le message d'erreur Accès refusé (Service : Simple Storage Service (Amazon S3) ; Code d'état : 403 ; Code d'erreur : AccessDenied ; ID demande : <request_id>) si les conditions suivantes sont vraies :

  1. Vous exécutez une requête DDL comme ALTER TABLE ADD PARTITION ou MSCK REPAIR TABLE.

  2. Vous avez un compartiment dont le chiffrement par défaut est configuré pour utiliser SSE-S3.

  3. Le compartiment a également une politique de compartiment comme la suivante qui force les demandes PutObject à spécifier les en-têtes PUT "s3:x-amz-server-side-encryption": "true" etd "s3:x-amz-server-side-encryption": "AES256".

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::<resource-name>/*", "Condition": { "Null": { "s3:x-amz-server-side-encryption": "true" } } }, { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::<resource-name>/*", "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" } } } ] }

Dans un cas comme celui-ci, la solution recommandée est de supprimer la politique de compartiment comme celle ci-dessus, étant donné que le chiffrement par défaut du compartiment est déjà présent.

Accès refusé avec le code d'état : 403 lors de l'interrogation d'un compartiment Simple Storage Service (Amazon S3) dans un autre compte

Cette erreur peut se produire lorsque vous essayez d'interroger des journaux écrits par un autre Service AWS et que le deuxième compte est propriétaire du compartiment mais n'est pas propriétaire des objets du compartiment. Pour plus d'informations, consultez la section Je reçois l'exception Simple Storage Service (Amazon S3) « access denied with status code: 403 » (Accès refusé avec le code d'état : 403) dans Amazon Athena lorsque je fais une requête sur un compartiment dans un autre compte dans le Centre de connaissances AWS.

Utilisation des informations d'identification du rôle IAM pour la connexion au pilote JDBC Athena

Vous pouvez récupérer les informations d'identification temporaires d'un rôle pour authentifier la Connexion JDBC à Athena. Les informations d'identification temporaires ont une durée de vie maximale de 12 heures. Pour plus d'informations, consultez la rubrique Comment utiliser les informations d'identification de mon rôle IAM ou passer à un autre rôle IAM lors de la connexion à Athena à l'aide du pilote JDBC ? dans le Centre de connaissances AWS.

Le descripteur de stockage de table requis n’est pas indiqué

Cela peut se produire lorsque vous tentez d’interroger ou d’afficher une table sur laquelle vous ne disposez pas des autorisations requises. Dans ce cas, il est recommandé d’accorder les autorisations DESCRIBE et SELECT sur les ressources via AWS Lake Formation. Si votre ressource est partagée entre plusieurs comptes, que la ressource d’origine se trouve dans le compte A et que vous souhaitez interroger une ressource liée dans le compte B, assurez-vous que votre rôle dispose de l’autorisation DESCRIBE sur la ressource d’origine dans le compte A et de l’autorisation SELECT sur la ressource liée dans le compte B.

Problèmes de syntaxe des requêtes

ÉCHEC : NullPointerException, nom nul

Si vous utilisez l'opération API AWS Glue CreateTable (Créer une table) ou le modèle CloudFormation AWS::Glue::Table pour créer une table à utiliser dans Athena sans spécifier la propriété TableType, puis exécutez une requête DDL comme SHOW CREATE TABLE ou MSCK REPAIR TABLE, il est possible que vous receviez le message d'erreur FAILED: NullPointerException Name is null (ÉCHEC : NullPointerException, nom nul).

Pour résoudre cette erreur, spécifiez une valeur pour l'attribut TableInput TableType dans le cadre de l'appel d'API AWS Glue CreateTable ou du modèle CloudFormation. Parmi les valeurs possibles pour TableType figurent EXTERNAL_TABLE ou VIRTUAL_VIEW.

Cette exigence s'applique uniquement lorsque vous créez un tableau à l'aide de l'opération API AWS Glue CreateTable ou du modèle AWS::Glue::Table. Si vous créez une table pour Athena en utilisant à l'aide d'une instruction DDL ou d'un crawler AWS Glue, la propriété TableType est définie pour vous automatiquement.

Fonction non enregistrée

Cette erreur se produit lorsque vous essayez d'utiliser une fonction qu'Athena ne prend pas en charge. Pour connaître la liste des fonctions prises en charge par Athena, consultezFonctions dans Amazon Athena ou exécutez l'instruction SHOW FUNCTIONS dans l'éditeur de requête. Vous pouvez également écrire votre propre fonction définie par l'utilisateur (UDF). Pour plus d'informations, consultez la rubrique Comment résoudre l'erreur de syntaxe « fonction non enregistrée » dans Athena ? dans le Centre de connaissances AWS.

Exceptions GENERIC_INTERNAL_ERROR

GENERIC_INTERNAL_ERRORLes exceptions peuvent avoir plusieurs causes, notamment les suivantes :

  • GENERIC_INTERNAL_ERROR : NULL – Vous pouvez voir cette exception dans le cadre de l'une des conditions suivantes :

    • Vous avez une inadéquation de schéma entre le type de données d'une colonne dans la définition de table et le type de données réel du jeu de données.

    • Vous exécutez une requête CREATE TABLE AS SELECT (CTAS) dont la syntaxe est imprécise.

  • GENERIC_INTERNAL_ERROR : parent builder is null (le constructeur parent est nul) – Cette exception peut s'afficher lorsque vous interrogez une table avec des colonnes de type de données array, et vous utilisez la bibliothèque OpenCSVSerDe. Le format OpenCSVSerDe ne prend pas en charge le type de données array.

  • GENERIC_INTERNAL_ERROR: Value exceeds MAX_INT (GENERIC_INTERNAL_ERROR : la valeur dépasse MAX_INT) : cette exception peut s'afficher lorsque la colonne de données source est définie avec le type de données INT et a une valeur numérique supérieure à 2 147 483 647.

  • GENERIC_INTERNAL_ERROR : Value exceeds MAX_BYTE (GENERIC_INTERNAL_ERROR : la valeur dépasse MAX_BYTE) : cette exception peut s'afficher lorsque la valeur numérique de la colonne de données source dépasse la taille autorisée pour le type de données BYTE. Le type de données BYTE est équivalent à TINYINT. TINYINT est un entier signé de 8 bits au format de complément à deux avec une valeur minimum de -128 et une valeur maximum de 127.

  • GENERIC_INTERNAL_ERROR: Number of partition values does not match number of filters (GENERIC_INTERNAL_ERROR : le nombre de valeurs de partition ne correspond pas au nombre de filtres) : cette exception peut s'afficher si vous avez des partitions incohérentes sur les données Amazon Simple Storage Service (Amazon S3). Les partitions peuvent être incohérentes dans le cadre de l'une des conditions suivantes :

    • Les partitions sur Simple Storage Service (Amazon S3) ont changé (exemple : de nouvelles partitions ont été ajoutées).

    • Le nombre de colonnes de partition de la table ne correspond pas à celui des métadonnées de partition.

Pour en savoir plus sur chacune de ces erreurs, veuillez consulter la section Comment résoudre l'erreur « GENERIC_INTERNAL_ERROR » lorsque j'interroge une table dans Amazon Athena ? dans le Centre de connaissances AWS.

Le nombre de groupes correspondants ne correspond pas au nombre de colonnes

Cette erreur se produit lorsque vous utilisez le SerDe SerDe Regex dans une instruction CREATE TABLE et que le nombre de groupes de correspondance regex ne correspond pas au nombre de colonnes que vous avez spécifié pour la table. Pour plus d'informations, consultez la rubrique Comment résoudre l'erreur RegexSerDe « number of matching groups doesn't match the number of columns » (Le nombre de groupes correspondants ne correspond pas au nombre de colonnes) dans Amazon Athena ? dans le Centre de connaissances AWS.

queryString ne satisfait pas à la contrainte : le membre doit avoir une longueur inférieure ou égale à 262144

La longueur maximale de la chaîne de requête dans Athena (262 144  octets) n'est pas un quota réglable. AWS Support ne peut pas augmenter le quota pour vous, mais vous pouvez contourner le problème en divisant les requêtes longues en requêtes plus petites. Pour plus d'informations, consultez la rubrique Comment augmenter la longueur maximale de la chaîne de requête dans Athena ? dans le Centre de connaissances AWS.

SYNTAX_ERROR : impossible de résoudre la colonne

Cette erreur peut se produire lorsque vous interrogez une table créée par un Crawler AWS Glue à partir d'un fichier CSV codé en UTF-8 qui comporte une marque d'ordre d'octet (BOM). AWS Glue ne reconnaît pas les BOM et les transforme en points d'interrogation, ce qu'Amazon Athena ne reconnaît pas. La solution consiste à supprimer le point d'interrogation dans Athena ou dans AWS Glue.

Trop d'arguments pour un appel de fonction

Dans la version 3 du moteur Athena, les fonctions ne peuvent pas comporter plus de 127 arguments. Cette limitation est intentionnelle. Si vous utilisez une fonction comportant plus de 127 paramètres, un message d'erreur semblable au suivant s'affiche :

TOO_MANY_ARGUMENTS : ligne nnn:nn : trop d'arguments pour l'appel de fonction function_name().

Pour résoudre ce problème, utilisez moins de paramètres par appel de fonction.

Problèmes de délai d'expiration des requêtes

Si vous rencontrez des erreurs de délai d'expiration avec vos requêtes Athena, consultez vos journaux CloudTrail. Les requêtes peuvent expirer en raison de la limitation des API AWS Glue ou de celles de Lake Formation. Lorsque ces erreurs se produisent, les messages d'erreur correspondants peuvent indiquer un problème de délai d'expiration des requêtes plutôt qu'un problème de limitation. Pour résoudre ce problème, vous pouvez consulter vos journaux CloudTrail avant de contacter Support. Pour plus d'informations, consultez Interrogation des journaux AWS CloudTrail et Journalisation des appels d’API Amazon Athena à l’aide d’AWS CloudTrail.

Pour plus d'informations sur les problèmes de délai d'expiration des requêtes liées aux requêtes fédérées lorsque vous appelez l'API ListTableMetadata, veuillez consulter Délai d'expiration lors de l'appel de ListTableMetadata.

Problèmes de limitation

Si vos requêtes dépassent les limites des services dépendants tels que Simple Storage Service (Amazon S3), AWS KMS, AWS Glue ouAWS Lambda, les messages suivants peuvent être attendus. Pour résoudre ces problèmes, réduisez le nombre d'appels simultanés provenant du même compte.

Service Message d’erreur
AWS Glue AWSGlueException : vitesse de transfert dépassée.
AWS KMS Vous avez dépassé la vitesse de transfert à laquelle vous pouvez appeler KMS. Réduisez la fréquence de vos appels.
AWS Lambda

Vitesse de transfert dépassée

TooManyRequestsException

Simple Storage Service (Amazon S3) Amazons3Exception : veuillez réduire la vitesse de transfert de votre demande.

Pour plus d'informations sur les moyens d'empêcher la limitation d'Amazon S3 lorsque vous utilisez Athena, consultez Prévention de la limitation d’Amazon S3.

Vues

Les vues créées dans le shell Apache Hive ne fonctionnent pas dans Athena

En raison de leurs implémentations fondamentalement différentes, les vues créées dans le shell Apache Hive ne sont pas compatibles avec Athena. Pour résoudre ce problème, recréez les vues dans Athena.

La vue est périmée ; elle doit être recréée

Il est possible de recevoir cette erreur si la table qui sous-tend une vue a été modifiée ou supprimée. La résolution consiste à recréer la vue. Pour plus d'informations, consultez la rubrique Comment résoudre l'erreur « view is stale; it must be re-created » (La vue est périmée ; elle doit être recréée) dans Athena ? dans le Centre de connaissances AWS.

Groupes de travail

Pour plus d'informations sur la résolution des problèmes liés aux groupes de travail, consultez Correction des erreurs liées aux groupes de travail.

Ressources supplémentaires

Les pages suivantes fournissent des informations supplémentaires pour la résolution des problèmes liés à Amazon Athena.

Les ressources AWS suivantes peuvent également vous être utiles :

La résolution des problèmes nécessite souvent une requête et une recherche itératives par un expert ou par une communauté d'assistants. Si le problème persiste après la mise en œuvre des solutions proposées sur cette page, contactez AWS Support (dans la AWS Management Console, cliquez sur Support, Centre de support) ou posez une question sur AWS re:Post avec la mention Amazon Athena.