Teradata и SAS с BigInt's - PullRequest
       32

Teradata и SAS с BigInt's

3 голосов
/ 04 июня 2009

У нас есть база данных teradata, которая заполнена типами данных BIGINT. SAS является основным аналитическим механизмом для организации. Библиотека доступа SAS дросселирует BIGINT и поэтому заставляет весь код преобразовывать переменные в целое или десятичное число перед возвратом их в SAS. Пример:

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;

Кто-нибудь знает способ исправить это? Возможно, макрос для приведения переменных или SAS access fix? Имейте в виду, что в этой базе данных буквально тысячи переменных, которые являются значительными, и о внесении изменений в базу данных не может быть и речи.

Ответы [ 3 ]

3 голосов
/ 05 июня 2009

Если вы не можете исправить это на стороне SAS, вы всегда можете создать набор видов на стороне Teradata для выполнения приведения. Затем предоставьте SAS доступ к просмотрам:

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

Поскольку у вас много таблиц, возможно, можно написать некоторый SQL для автоматической генерации их из словаря данных.

1 голос
/ 10 января 2012

Проблема в том, что SAS может обрабатывать не более 15 цифр для типа данных BIGINT. Компания SAS предоставила несколько способов решения этой проблемы для SAS 9.2 (упомянутого выше). Вы также можете попросить администратора SAS Platform организовать обновление сервера SAS таким образом, чтобы он усекал поля BIGINT до 15 цифр (применяются очевидные предостережения), или обновить оператор LIBNAME, чтобы настроить автоматическое приведение всех BIGINT к выводу.

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

0 голосов
/ 12 апреля 2014

Пример кода

data temp1; 
   set mylib.bigclass (dbsastype= (id='char(20)'));
run;
...