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

Lecture de 9 minute(s)
0

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.
  • GENERIC_INTERNAL_ERROR : plusieurs entrées avec la même clé : vous pouvez voir cette exception en raison de clés (colonnes) dans les données JSON lorsque :
  • Le même nom est utilisé deux fois.
  • Le même nom est utilisé lorsqu'il est converti en minuscules.

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, lorsqu'une table créée sur des fichiers Parquet :

  • Athena lit le schéma à partir des fichiers
  • Athena valide ensuite le schéma par rapport à la définition de la table dans laquelle le fichier Parquet est interrogé.

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, l’erreur Incompatibilité du type de données de colonne s’affiche alors.

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, trouvez 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.

Exécuter la commande SHOW CREATE TABLE pour générer la requête qui a créé la table. Affichez ensuite 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.

Exécuter la commande SHOW CREATE TABLE pour générer la requête qui a créé la table. Affichez ensuite 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.

Exécuter la commande SHOW CREATE TABLE pour générer la requête qui a créé la table. Affichez ensuite 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, effectuez 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');

GENERIC_INTERNAL_ERROR : plusieurs entrées avec la même clé

Si les lignes comportent plusieurs colonnes avec la même clé, le prétraitement des données est nécessaire pour inclure une paire clé-valeur valide. Si seuls certains enregistrements possèdent des clés dupliquées et si vous souhaitez ignorer ces enregistrements, définissez ignore.malformed.json comme SERDEPROPERTIES dans org.openx.data..jsonserde.JsonSerDe.

Si les noms des clés sont identiques mais dans des cas différents (par exemple : « Colonne », « colonne »), vous devez utiliser le mappage. Cela est dû au fait que Hive ne prend pas en charge les colonnes faisant la distinction majuscules/minuscules. Pour ce faire, vous devez configurer SerDe pour ignorer la distinction majuscules/minuscules.

Procédez comme suit :

CREATE TABLE mytable (  
  time1 string, 
  time2 string)
 ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
"case.insensitive" = "false", --tells hive to ignore key case
"mapping.time1"= "time", -- lowercase 'time' mapped into 'time1'
"mapping.time2"= "Time") -- uppercase to 'time2'

Informations connexes

Types de données dans Amazon Athena

Partitionnement des données dans Athena

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an