Вопрос

У нас есть база данных 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?Имейте в виду, что в этой базе данных буквально тысячи переменных типа bigint, и о внесении изменений в базу данных не может быть и речи.

Это было полезно?

Решение

Если вы не можете исправить это на стороне 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 для автоматического создания их из словаря данных.

Другие советы

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

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

Образец кода

data temp1; 
   set mylib.bigclass (dbsastype= (id='char(20)'));
run;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top