Pergunta

Temos um banco de dados Teradata que está cheia de tipos de dados BIGINT. SAS é o motor analítico preliminar para a organização. Os SAS bobinas biblioteca de acesso no BIGINT e, portanto, obriga todo o código para variáveis ??elenco em um número inteiro ou decimal antes de devolvê-los ao SAS. Exemplo:

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;

Alguém sabe uma maneira de corrigir isso? Possivelmente uma macro para a fundição de variáveis ??ou SAS correção de acesso? Tenha em mente que existem literalmente milhares de variáveis ??neste banco de dados que são mudanças bigint e fazendo ao banco de dados está fora de questão.

Foi útil?

Solução

Se você não pode corrigi-lo no lado do SAS, você sempre pode criar um conjunto de pontos de vista no lado da Teradata para fazer o casting. Então, SAS acesso os pontos de vista:

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

Uma vez que você tem muitas mesas, pode ser possível escrever alguns SQL para gerar automaticamente estes a partir do dicionário de dados.

Outras dicas

O problema é que SAS só pode lidar com um máximo de 15 dígitos para um tipo de dados BIGINT. SAS têm fornecido alguns soluções alternativas para SAS 9.2 (mencionado acima) para este problema. Você também pode obter o seu SAS Platform Admin para mandar para o servidor SAS para ser atualizado para que ele trunca os campos BIGINT 15 dígitos (advertências óbvias extra), ou atualizar sua declaração libname para definir todos os valores BIGINT a ser expressos automaticamente.

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

Exemplo de código

data temp1; 
   set mylib.bigclass (dbsastype= (id='char(20)'));
run;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top