Teradata y SAS con Bigint de
Pregunta
Tenemos una base de datos de Teradata que está lleno de tipos de datos BIGINT. SAS es el motor de análisis principal de la organización. La biblioteca de acceso SAS ahoga en BIGINT y por lo tanto obliga a todo el código para emitir variables en un número entero o decimal antes de devolverlos a SAS. Ejemplo:
proc sql;
connect to database (blah blah);
create table sas_dataset as
select * from connection to database(
select
cast(bigint_var as integer),
varchar_var,
char_var,
from some_table
);
disconnect from database;
quit;
¿Alguien sabe una manera de solucionar este problema? Posiblemente una macro para las variables de fundición o solución de acceso SAS? Tenga en cuenta que hay literalmente miles de variables en esta base de datos que sean cambios bigint y haciendo a la base de datos está fuera de la cuestión.
Solución
Si no se puede arreglar en el lado SAS, siempre se puede crear un conjunto de puntos de vista sobre el lado de Teradata para hacer la colada. Luego tener acceso a los puntos de vista SAS:
create view sas_cast_db.some_table as
select col1, col2, cast(bigint_var as decimal(18)), col3
from real_db.some_table;
Dado que usted tiene un montón de mesas, puede ser posible escribir algunas SQL para generar automáticamente estos datos del diccionario de datos.
Otros consejos
La cuestión es que SAS sólo puede manejar un máximo de 15 dígitos para un tipo de datos BIGINT. SAS ha proporcionado algunas soluciones temporales para SAS 9.2 (mencionado anteriormente) para este problema. También puede obtener su SAS Plataforma de administración para los arreglos para el servidor SAS para ser actualizada de forma que trunca los campos BIGINT 15 dígitos (de salvedades obvias), o actualizar su estado de LIBNAME para establecer todos los BIGINTs a ser emitidos de forma automática.
Código de ejemplo
data temp1;
set mylib.bigclass (dbsastype= (id='char(20)'));
run;