Al consultar tablas de Impala almacenadas como archivos Parquet a través de SAS©, puede surgir un problema insidioso: los datos se muestran en el orden incorrecto o las columnas contienen valores erróneos.
Este fenómeno a menudo se debe a la forma en que Impala lee los metadatos de los archivos Parquet. Por defecto, si la estructura del archivo físico difiere ligeramente de la definición de la tabla (por ejemplo, un orden de columnas diferente), Impala puede intentar hacer coincidir las columnas por su posición (índice) en lugar de por su nombre.
Para corregir esto directamente en Impala, se utiliza la opción PARQUET_FALLBACK_SCHEMA_RESOLUTION=name. Pero, ¿cómo aplicar esta configuración específica al usar el SQL Pass-Through en SAS©?
Cuando intentas extraer una tabla a través de SAS© sin esta opción, puedes encontrar que los valores no corresponden a las columnas correctas. Esto sucede porque Impala recurre al orden de las columnas.
Un intento común es tratar de integrar esta opción directamente en la cadena de conexión (connect to impala (&impala.)) o ejecutar el comando SET en el lugar incorrecto (por ejemplo, al crear una vista intermedia), lo que a menudo no produce ningún efecto.
La clave para resolver este problema es entender que la sesión Pass-Through debe recibir la instrucción de configuración antes de ejecutar la consulta de selección de datos, pero dentro del mismo bloque de conexión.
Es necesario usar la instrucción EXECUTE BY IMPALA para enviar el comando SET a la base de datos justo antes de lanzar el SELECT.
Abrir la conexión a Impala.
Ejecutar la opción de configuración para forzar la resolución por nombre.
Recuperar los datos a través de la conexión establecida.
Ejemplo de código corregido
Aquí está la sintaxis SAS© PROC SQL funcional para este caso de uso:
¿Por qué funciona esto?
Al separar la instrucción SET, se modifica el entorno de la sesión activa de Impala. Cuando la siguiente consulta (SELECT *) se envía a través de connection to impala, se beneficia de esta configuración y mapea correctamente las columnas del archivo Parquet por su nombre, garantizando la integridad de los datos recuperados en SAS©.