Comment puis-je résoudre l'erreur « GENERIC_INTERNAL_ERROR » lorsque j'interroge une table dans Amazon Athena ?

Date de la dernière mise à jour : 19/05/2021

Lorsque j'interroge ma table Amazon Athena, je reçois l'erreur « GENERIC_INTERNAL_ERROR ».

Brève description

Les différents types d'exceptions GENERIC_INTERNAL_ERROR et leurs causes sont les suivants :

  • GENERIC_INTERNAL_ERROR : null : vous pouvez voir cette exception dans l'une des conditions suivantes :
    • Vous avez une incompatibilité 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) avec une syntaxe inexacte.
  • GENERIC_INTERNAL_ERROR : le générateur parent est null : Vous pouvez voir cette exception lorsque vous interrogez une table avec des colonnes du type de données tableau et de format SerDe OpenCSVSerDe. Le format OpenCSVSerde ne prend pas en charge le type de données tableau.
  • GENERIC_INTERNAL_ERROR : la valeur dépasse MAX_INT : Vous pouvez voir cette exception 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 : la valeur dépasse MAX_BYTE : Vous pouvez voir cette exception lorsque la colonne de données source a une valeur numérique supérieure à la taille autorisée pour le BYTE de type de données. Le BYTE de type de données est équivalent à TINYINT. TINYINT est un INTEGER signé de 8 bits au format de complément de deux, avec une valeur minimale de -128 et une valeur maximale de 127.
  • GENERIC_INTERNAL_ERROR : le nombre de valeurs de partition ne correspond pas au nombre de filtres : Vous pouvez voir cette exception si vous avez des partitions incohérentes sur les données Amazon Simple Storage Service (Amazon S3). Vous pouvez avoir des partitions incohérentes dans l'une des conditions suivantes :
    • Les partitions sur Amazon S3 ont changé (exemple : nouvelles partitions ajoutées).
    • Le nombre de colonnes de partition dans la table ne correspond pas à celui des métadonnées de partition.

Résolution

GENERIC_INTERNAL_ERROR:null

Incompatibilité des types de données de colonne : Assurez-vous que le type de données de la colonne dans la définition de la table est compatible avec le type de données de la colonne dans les données source. Athena utilise la technologie de schéma sur lecture. Cela signifie que les définitions de vos tables sont appliquées à vos données dans Amazon S3 lorsque les requêtes sont traitées. Par exemple, si une table est créée sur des fichiers Parquet, Athena lit le schéma à partir des fichiers et valide le schéma par rapport à la définition de table lorsque le fichier Parquet est interrogé. Vous obtenez cette erreur si le type de données sous-jacent d'une colonne ne correspond pas au type de données mentionné lors de la définition de la table.

Pour résoudre ce problème, vérifiez que les fichiers de données source ne sont pas corrompus. En cas d'incohérence de schéma entre les fichiers de données source et la définition de table, effectuez l'une des opérations suivantes :

  • Mettez à jour le schéma à l'aide d'AWS Glue Data Catalog.
  • Créez une nouvelle table à l'aide de la définition de table mise à jour.

Si les fichiers de données source sont endommagés, supprimez les fichiers, puis interrogez la table.

Syntaxe inexacte : vous pouvez obtenir l'erreur « GENERIC INTERNAL ERROR:null » lorsque les deux conditions suivantes sont remplies :

Pour éviter cette erreur, vous devez utiliser des noms de colonne différents pour les propriétés partitioned_by et bucketed_by lorsque vous utilisez la requête CTAS. Pour résoudre cette erreur, créez une nouvelle table en choisissant des noms de colonne différents pour les propriétés partitioned_by et bucketed_by.

GENERIC_INTERNAL_ERROR : le générateur parent est null.

Pour résoudre cette erreur, recherchez la colonne avec le de type de données tableau, puis modifiez le type de données de cette colonne en chaîne. Pour modifier le type de données de la colonne en chaîne, effectuez l'une des opérations suivantes :

  • Mettez à jour le schéma dans le catalogue de données.
  • Créez une nouvelle table en choisissant le type de données de colonne chaîne.

Vous pouvez exécuter la commande SHOW CREATE TABLE pour générer la requête qui a créé la table. Vous pouvez afficher le type de données de colonne pour toutes les colonnes à partir de la sortie de cette commande. Recherchez la colonne avec le type de données tableau, puis modifiez le type de données de cette colonne en chaîne.

Pour mettre à jour le schéma de la table avec Data Catalog, procédez comme suit :

  1. Ouvrez la console AWS Glue.
  2. Dans le volet de navigation, choisissez Tables.
  3. Sélectionnez la table à mettre à jour.
  4. Choisissez Actions, puis Afficher les informations.
  5. Choisissez Modifier le schéma.
  6. Faites défiler jusqu'à la colonne avec le type de données tableau, puis choisissez tableau.
  7. Dans Type de colonne, sélectionnez chaîne dans la liste déroulante.
  8. Sélectionnez Mettre à jour.
  9. Dans la page Modifier le schéma, choisissez Enregistrer.

GENERIC_INTERNAL_ERROR : la valeur dépasse MAX_INT

Pour résoudre cette erreur, recherchez la colonne avec le type de données int, puis mettez à jour le type de données de cette colonne de int à bigint. Pour modifier le type de données de la colonne, mettez à jour le schéma dans Data Catalog ou créez une nouvelle table avec le schéma mis à jour.

Vous pouvez exécuter la commande SHOW CREATE TABLE pour générer la requête qui a créé la table. Vous pouvez afficher le type de données de colonne pour toutes les colonnes à partir de la sortie de cette commande. Recherchez la colonne avec le type de données int, puis modifiez le type de données de cette colonne en bigint.

Pour mettre à jour le schéma de la table avec Data Catalog, procédez comme suit :

  1. Ouvrez la console AWS Glue.
  2. Dans le volet de navigation, choisissez Tables.
  3. Sélectionnez la table à mettre à jour.
  4. Choisissez Actions, puis Afficher les informations.
  5. Choisissez Modifier le schéma.
  6. Faites défiler jusqu'à la colonne avec le type de données int, puis choisissez int.
  7. Dans Type de colonne, sélectionnez bigint dans la liste déroulante.
  8. Sélectionnez Mettre à jour.
  9. Dans la page Modifier le schéma, choisissez Enregistrer.

GENERIC_INTERNAL_ERROR : la valeur dépasse MAX_BYTE

Pour résoudre cette erreur, recherchez la colonne avec le type de données tinyint. Changez ensuite le type de données de cette colonne en smallint, intou bigint. Vous pouvez également résoudre cette erreur en créant une nouvelle table avec le schéma mis à jour.

Vous pouvez exécuter la commande SHOW CREATE TABLE pour générer la requête qui a créé la table. Vous pouvez afficher le type de données de colonne pour toutes les colonnes à partir de la sortie de cette commande. Recherchez la colonne avec le type de données tinyint, puis modifiez le type de données de cette colonne en smallint, bigint ou int.

Pour mettre à jour le schéma de la table avec Data Catalog, procédez comme suit :

  1. Ouvrez la console AWS Glue.
  2. Dans le volet de navigation, choisissez Tables.
  3. Sélectionnez la table à mettre à jour.
  4. Choisissez Actions, puis Afficher les informations.
  5. Choisissez Modifier le schéma.
  6. Faites défiler jusqu'à la colonne avec le type de données tinyint, puis choisissez tinyint.
  7. Dans Type de colonne, sélectionnez smallint, bigint ou int dans la liste déroulante.
  8. Sélectionnez Mettre à jour.
  9. Dans la page Modifier le schéma, choisissez Enregistrer.

GENERIC_INTERNAL_ERROR : le nombre de valeurs de partition ne correspond pas au nombre de filtres.

Pour résoudre cette erreur, vous pouvez effectuer l'une des opérations suivantes :

ALTER TABLE doc_example_table DROP PARTITION (date = '2014-05-14');
ALTER TABLE doc_example_table ADD PARTITION (date = '2016-05-14', country = 'IN');

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?