J'ai utilisé une table Apache Iceberg avec Amazon Athena et j'ai reçu un message d'erreur.
Résolution
Suivez les étapes de résolution correspondant au message d'erreur que vous avez reçu.
Clé de propriété de table non prise en charge
Cette erreur se produit lorsque la clause TBLPROPERTIES de l’instruction CREATE TABLE ou ALTER TABLE n'utilise pas de propriété de table prise en charge. Athena n'autorise qu'une liste prédéfinie de paires clé-valeur dans les propriétés de la table pour créer ou modifier des tables Iceberg.
Pour résoudre ce problème, assurez-vous que votre table Iceberg utilise des propriétés de table prises en charge.
L'instruction CREATE TABLE ne peut pas être générée car la table utilise des propriétés non prises en charge
Cette erreur se produit avec les requêtes qui utilisent l'instruction DDL SHOW CREATE TABLE avec des tables Iceberg alors qu'Athena ne parvient pas à reproduire la structure de la table. Utilisez l'instruction DDL DESCRIBE FORMATTED pour afficher les propriétés de table au lieu de SHOW CREATE TABLE.
TABLE_REDIRECTION_ERROR
Cette erreur se produit avec les requêtes SELECT Athena qui utilisent des métadonnées de table Iceberg non prises en charge. Assurez-vous que votre requête SELECT Athena contient les métadonnées de table Iceberg prises en charge.
NOT_SUPPORTED : Type non pris en charge pour Iceberg
Cette erreur se produit lorsque vous utilisez un type de données non pris en charge avec une table Iceberg. Par exemple, les types de données Athena tinyint, smallint et char ne sont pas pris en charge pour les tables Iceberg. Assurez-vous que votre requête Athena utilise un type de données pris en charge pour les tables Iceberg.
ICEBERG_COMMIT_ERROR
Cette erreur peut se produire lorsque plusieurs instructions tentent de modifier le même ensemble de fichiers qui s'exécutent en parallèle lors des mises à jour des tables Iceberg. Par exemple, cette erreur se produit lorsque plusieurs instructions DELETE s'exécutent en parallèle et tentent de supprimer le même jeu d'enregistrements en même temps.
Pour éviter ce problème, procédez comme suit :
- Assurez-vous que les mises à jour des requêtes s'exécutent de manière séquentielle pour éviter tout traitement parallèle des données.
- Implémentez un mécanisme de nouvelle tentative avec backoff exponentiel lorsque vous mettez à jour les tables Iceberg.
Remarque : Athena ne prend en charge que le verrouillage optimiste d'AWS Glue. Lorsque vous modifiez une table Iceberg à l'aide d'autres méthodes de verrouillage, vous risquez de perdre des données et d'interrompre les transactions.
Pour plus d'informations, consultez la page Verrouillage optimiste sur le site Web d'Apache Iceberg.
GENERIC_INTERNAL_ERROR : Impossible d'écrire et de supprimer des fichiers dans une table v1
Cette erreur se produit lorsque vous tentez l'opération DELETE sur une table Iceberg v1. Athena crée et fonctionne uniquement sur les tables Iceberg v2.
Assurez-vous que votre table Iceberg utilise le moteur Athena version 2. Si vous utilisez un autre type de moteur, assurez-vous que la propriété de table format-version est définie sur 2 pour autoriser les suppressions au niveau des lignes. Par exemple, utilisez la version 2 lorsque vous écrivez une table Iceberg et que vous l'enregistrez dans le catalogue de données AWS Glue.
Pour plus d'informations, consultez la page Supprimer des formats sur le site Web d'Apache Iceberg.
GENERIC_INTERNAL_ERROR : com.facebook.presto.spi.PrestoException : La clé spécifiée n'existe pas
Cette erreur se produit lorsque vous supprimez un fichier de métadonnées, tel qu'une liste de manifestes ou metadata.json. La requête Athena échoue alors. Si vous ne parvenez pas à récupérer le fichier correctement, restaurez la table sous forme d'instantané ou d'horodatage.
Remarque : Vous devez restaurer la table dans un environnement Spark tel qu'AWS Glue ou Amazon EMR, et non dans l'éditeur de requêtes Athena.
Pour restaurer la table à un ID d’instantané spécifique, exécutez la commande roll_to_snapshot Apache Iceberg :
CALL catalog_name.system.rollback_to_snapshot('your-db.your-table', your-snapshot-id)
Remarque : Remplacez your-db, your-table et your-snapshot-id par vos variables.
Pour restaurer la table à un horodatage spécifique, exécutez la commande rollback_to_timestamp Apache Iceberg :
CALL catalog_name.system.rollback_to_timestamp('your-db.your-table', TIMESTAMP 'yyyy-mm-dd hh:mm:ss')
Remarque : Remplacez your-db, your-table et yyyy-mm-dd hh:mm:ss par vos variables.
Pour plus d'informations, consultez les pages rollback_to_snapshot et rollback_to_timestamp sur le site Web d'Apache Iceberg.
Informations connexes
Résoudre les problèmes liés à Athena
Comment puis-je utiliser Apache Iceberg avec un catalogue de données AWS Glue entre comptes dans Spark ?
Interroger les tables Apache Iceberg