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.

È stato utile?

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.

http://support.sas.com/kb/39/831.html

Codice di esempio

data temp1; 
   set mylib.bigclass (dbsastype= (id='char(20)'));
run;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top