Teradata e SAS con BigInt di
Domanda
Abbiamo un database Teradata che è pieno di tipi di dati BIGINT. SAS è il motore analitica primaria per l'organizzazione. La biblioteca accesso SAS strozzatori su BIGINT e quindi costringe tutto il codice per lanciare variabili in un numero intero o decimale prima di restituirli al SAS. Esempio:
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;
Qualcuno sa un modo per risolvere questo problema? Forse una macro per le variabili di fusione o l'accesso correzione SAS? Tenete a mente che ci sono letteralmente migliaia di variabili in questo database che sono i cambiamenti bigint e rendendo al database è fuori questione.
Soluzione
Se non è possibile risolvere il problema sul lato SAS, è sempre possibile creare una serie di punti di vista sul lato Teradata di fare il casting. Poi hanno SAS accesso i punti di vista:
create view sas_cast_db.some_table as
select col1, col2, cast(bigint_var as decimal(18)), col3
from real_db.some_table;
Dal momento che hai un sacco di tavoli, può essere possibile scrivere qualche SQL per generare automaticamente questi dal dizionario di dati.
Altri suggerimenti
Il problema è che SAS può gestire solo un massimo di 15 cifre per un tipo di dati BIGINT. SAS hanno fornito un paio di rimediare a SAS 9.2 (quella di cui sopra) per questo problema. È anche possibile ottenere il vostro SAS Piattaforma Admin per organizzare il server SAS di essere aggiornato in modo che tronca i campi BIGINT a 15 cifre (a caveat ovvie), o aggiornare la vostra dichiarazione libname per impostare tutti BIGINTs per essere lanciati automaticamente.
Codice di esempio
data temp1;
set mylib.bigclass (dbsastype= (id='char(20)'));
run;