2009-06-04 15 views
2

Nous avons une base de données de teradata remplie de types de données BIGINT. SAS est le moteur analytique principal de l'organisation. La bibliothèque d'accès SAS étouffe sur BIGINT et oblige donc tout le code à transtyper des variables en un nombre entier ou décimal avant de les renvoyer à SAS. Exemple:Teradata et SAS avec BigInt

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; 

Est-ce que quelqu'un sait un moyen de résoudre ce problème? Peut-être une macro pour lancer des variables ou un correctif d'accès SAS? Gardez à l'esprit qu'il y a littéralement des milliers de variables dans cette base de données qui sont bigint et apporter des modifications à la base de données est hors de question.

+0

Êtes-vous le 9.1.3? Il y avait un correctif publié pour 9.1.3 ici: http://support.sas.com/kb/34/729.html – cmjohns

+0

Nous avons appliqué le correctif .. Il n'a pas réussi à résoudre le problème. – AFHood

+1

Dans ce cas, je pense que votre meilleur pari serait de contacter leur support car il semble qu'ils s'attendent à ce qu'il fonctionne. – cmjohns

Répondre

2

Si vous ne pouvez pas le réparer du côté SAS, vous pouvez toujours créer un ensemble de vues sur le côté Teradata pour faire le casting. Ensuite, avoir accès SAS les vues:

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

Puisque vous avez beaucoup de tables, il peut être possible d'écrire quelques SQL pour générer automatiquement ces derniers du dictionnaire de données.

1

Le problème est que SAS ne peut gérer qu'un maximum de 15 chiffres pour un type de données BIGINT. SAS a fourni quelques solutions de rechange pour SAS 9.2 (un mentionné ci-dessus) pour ce problème. Vous pouvez également demander à votre administrateur SAS Platform d'organiser la mise à jour du serveur SAS afin qu'il tronque les champs BIGINT à 15 chiffres (des mises en garde évidentes s'appliquent) ou mettez à jour votre instruction LIBNAME pour définir tous les BIGINT à diffuser automatiquement.

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

-1

Exemple de code

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