2009-06-04 11 views
2

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

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, и внесение изменений в базу данных не может быть и речи.

+0

Вы на 9.1.3? Для 9.1.3 было выпущено исправление: http://support.sas.com/kb/34/729.html – cmjohns

+0

Мы применили исправление .. Это не удалось устранить проблему. – AFHood

+1

В этом случае я думаю, что лучше всего будет связаться со своей поддержкой, поскольку кажется, что они ожидают, что она будет работать. – cmjohns

ответ

2

Если вы не можете исправить это на стороне 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

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

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

-1

Пример кода

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