Frage

Wir haben eine Teradata-Datenbank, die mit BIGINT Datentypen gefüllt ist. SAS ist die primäre Analyse-Engine für die Organisation. Die SAS-Zugriffsbibliothek Drosseln auf BIGINT und deshalb zwingt alle Code-Variablen in eine ganze Zahl oder eine Dezimalzahl zu werfen, bevor sie auf SAS zurückkehrt. Beispiel:

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;

Kennt jemand eine Möglichkeit, dies zu beheben? Möglicherweise ein Makro für das Gießen Variablen oder SAS-Zugang fix? Denken Sie daran, dass es buchstäblich Tausende von Variablen in dieser Datenbank, die bigint und Änderungen an der Datenbank indiskutabel ist.

War es hilfreich?

Lösung

Wenn Sie es nicht auf der SAS-Seite beheben, können Sie immer einen Satz von Ansichten auf der Teradata Seite erstellen das Casting zu tun. Dann haben SAS Zugriff die Ansichten:

create view sas_cast_db.some_table as 
select col1, col2, cast(bigint_var as decimal(18)), col3
from real_db.some_table;

Da Sie viele Tabellen haben, kann es möglich sein, einige SQL zu schreiben, diese aus dem Data Dictionary zu automatisch generieren.

Andere Tipps

Das Problem ist, dass SAS nur maximal 15 Ziffern für einen BIGINT-Datentyp verarbeiten kann. SAS hat ein paar Workarounds zur Verfügung gestellt für SAS 9.2 (eine wie oben erwähnt) für dieses Problem. Sie können auch Ihre SAS Platform Admin erhalten für den SAS-Server aktualisiert werden, so anzuordnen, dass sie die BIGINT Felder zu 15 Ziffern (offensichtliche Einschränkungen gelten) abschneidet, oder aktualisieren Sie Ihre LIBNAME Anweisung alle BIGINTs einzustellen automatisch gegossen werden.

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

Beispielcode

data temp1; 
   set mylib.bigclass (dbsastype= (id='char(20)'));
run;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top