Fedsql

Resolver el error de conexión "BASE driver" con PROC FEDSQL

Simon 6 Aufrufe

La migración de SAS© 9.4 a SAS© Viya a menudo conlleva una curva de aprendizaje en cuanto a la gestión de datos en memoria. Una confusión frecuente surge durante la transición de PROC SQL a PROC FEDSQL para interactuar con tablas cargadas en las bibliotecas CAS (CASLIBs).

Si alguna vez ha encontrado el error "BASE driver, schema name... was not found", este artículo le explica por qué ocurre y cómo corregir su código.

Resolver el error de conexión "BASE driver" con PROC FEDSQL -

El Escenario

Imaginemos que está trabajando en un entorno de SAS© Viya. Ha definido una CASLIB basada en una ruta física (path-based) y ha cargado una tabla en memoria.

Esta es la configuración típica:

  1. Definición de la CASLIB y del Libref:

1caslib mycaslib path="/sas/staging/test" datasource=(srctype="path") libref=mycas;
2 

Carga de datos en memoria (In-Memory): Se utiliza PROC CASUTIL para cargar una tabla (por ejemplo, test.sashdat) en la memoria del servidor CAS.

1 
2PROC CASUTIL incaslib="mycaslib" outcaslib="mycaslib";
3 
4load casdata="test.sashdat" casout="test" replace;
5 
6RUN;
7 

Hasta ahora, todo funciona. La tabla es accesible en memoria con el nombre mycas.test.

El Problema

Para realizar una agregación (como un GROUP BY), decide utilizar PROC FEDSQL, que es la implementación estándar de SQL para el motor CAS.

Intenta ejecutar el siguiente código:

1PROC FEDSQL;
2 CREATE TABLE mycas.counts AS
3 select FIELD, count(*) as N
4 from mycas.test
5 group BY FIELD;
6QUIT;

Es aquí donde el sistema devuelve el error de bloqueo:

ERROR: Table "MYCAS.TEST" does not exist or cannot be accessed ERROR: BASE driver, schema name MYCAS was not found for this connection

La Explicación

El error no se debe a un problema de configuración de la biblioteca ni a un archivo faltante. Se debe a la forma en que PROC FEDSQL se comunica con el servidor CAS.

A diferencia de un procedimiento SAS© clásico que se ejecuta localmente, PROC FEDSQL necesita saber explícitamente en qué sesión CAS debe operar para acceder a las tablas en memoria. Si no se hace referencia a ninguna sesión, el procedimiento intenta encontrar la tabla a través del motor local (BASE driver), que no conoce el esquema "MYCAS" definido en el servidor remoto.

La Solución

Para corregir este problema, debe hacer dos cosas:

  1. Asegurarse de que una sesión CAS esté activa.

  2. Indicar a PROC FEDSQL que utilice esta sesión mediante la opción SESSREF.

Aquí está el código corregido:

1/* 1. Démarrer ou référencer une session CAS */
2cas mySession sessopts=(caslib=mycas timeout=3600 locale="en_US" metrics=true);
3 
4/* 2. Appeler PROC FEDSQL en pointant vers cette session */
5PROC FEDSQL sessref=mySession;
6 CREATE TABLE mycas.counts AS
7 select FIELD, count(*) as N
8 from mycas.test
9 group BY FIELD;
10QUIT;

Lo que hay que recordar

Añadir la opción sessref=NombreDeSuSesion es indispensable cuando se manipulan tablas CAS directamente con FedSQL. Esto crea el puente necesario entre su código y los datos que residen en la memoria en el clúster de Viya.