Lors de l'interrogation de tables Impala stockées sous forme de fichiers Parquet via SAS©, un problème insidieux peut survenir : les données s'affichent dans le mauvais ordre ou les colonnes contiennent des valeurs erronées.
Ce phénomène est souvent dû à la manière dont Impala lit les métadonnées des fichiers Parquet. Par défaut, si la structure du fichier physique diffère légèrement de la définition de la table (par exemple, un ordre de colonnes différent), Impala peut tenter de faire correspondre les colonnes par leur position (index) plutôt que par leur nom.
Pour corriger cela directement dans Impala, l'option PARQUET_FALLBACK_SCHEMA_RESOLUTION=name est utilisée. Mais comment appliquer cette configuration spécifique lors de l'utilisation du SQL Pass-Through dans SAS© ?
Lorsque vous tentez d'extraire une table via SAS© sans cette option, vous risquez de constater que les valeurs ne correspondent pas aux bonnes colonnes. Cela se produit car Impala se rabat sur l'ordre des colonnes.
Une tentative courante consiste à essayer d'intégrer cette option directement dans la chaîne de connexion (connect to impala (&impala.)) ou d'exécuter la commande SET au mauvais endroit (par exemple, lors de la création d'une vue intermédiaire), ce qui ne produit souvent aucun effet.
La clé pour résoudre ce problème est de comprendre que la session Pass-Through doit recevoir l'instruction de configuration avant d'exécuter la requête de sélection de données, mais au sein du même bloc de connexion.
Il faut utiliser l'instruction EXECUTE BY IMPALA pour envoyer la commande SET à la base de données juste avant de lancer le SELECT.
Ouvrir la connexion vers Impala.
Exécuter l'option de configuration pour forcer la résolution par nom.
Récupérer les données via la connexion établie.
Exemple de code corrigé
Voici la syntaxe SAS© PROC SQL fonctionnelle pour ce cas d'usage :
Pourquoi cela fonctionne-t-il ?
En séparant l'instruction SET, vous modifiez l'environnement de la session Impala active. Lorsque la requête suivante (SELECT *) est envoyée via connection to impala, elle bénéficie de ce paramétrage et mappe correctement les colonnes du fichier Parquet par leur nom, garantissant l'intégrité des données récupérées dans SAS©.