IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS Base Discussion :

Jointure multiple avec volumétrie importante


Sujet :

SAS Base

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Jointure multiple avec volumétrie importante
    Bonjour à tous,

    Je travaille avec SAS V8. J'essaie de rapprocher des informations de plusieurs bases de très petites tailles à une base d'une importante volumétrie ( nombre de lignes > 1 million et plus de 200 variables via PROC SQL ( avec plusieurs LEFT OUTER JOIN )).
    Le traitement met au moins 1h à tourner sans créer la table souhaitée.
    J'ai le message d'erreur suivant :

    ERROR: An I/O error has occurred ON file WORK.#tf0038.n.DATA.

    Ci-dessous le Code que j'ai utilisé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    rsubmit;
    proc sql;
    create index var1 on malib.matable(var1);
    create index var2 on malib.matable(var2);
    create index var3 on malib.matable(var3);
    create index var4 on malib.matable(var4);
    create index var5 on malib.matable(var5);
    create index var6 on malib.matable(var6);
    create index var7 on malib.matable(var7);
    create index var8 on malib.matable(var8);
    create index var9 on malib.matable(var9);
    quit;
    endrsubmit;
     
     
    rsubmit;
    proc sql ;
     
    create table malib.matable
    as select a.*,
               b.var_a as nomvar_a_1,
               c.var_a as nomvar_a_2,
    		   d.var_b as nomvar_b,
               e.var_c as nomvar_c_1,
               f.var_c as nomvar_c_2,
               g.var_d as nomvar_d_2,
    		   h.var_e as nomvar_e_2,
    		   i.var_f as nomvar_f_1,
               j.var_f as nomvar_f_2
     
    from malib.matable as a 
     
     left outer join malib2.matable1  as b  on  a.var1=b.var1
     left outer join malib2.matable1  as c  on  a.var2=c.var1 
     left outer join malib2.matable2  as d  on  a.var3=d.var2
     left outer join malib2.matable3  as e  on  a.var4=e.var3 
     left outer join malib2.matable3  as f  on  a.var5=f.var3
     left outer join malib2.matable4  as g  on  a.var6=g.var4
     left outer join malib2.matable5  as h  on  a.var7=h.var5
     left outer join malib2.matable6  as i  on  a.var8=i.var6
     left outer join malib2.matable6  as j  on  a.var9=j.var6
       ;
      quit;
    endrsubmit;
    J'ai compressé ( option compress=yes) ça ne change pas grand chose.
    J'ai nettoyé ma WORK (en local) ça ne change rien.
    La vérification de la WORK sur le serveur montre qu'elle n'est pas "saturée". Le traitement est toujours long.

    J'ai fais un test sur un échantillon de la grosse bas ( 10 000 lignes), je n'ai pas le message d'erreur concernant la WORK (!!!!) mais le traitement mais néanmoins plus de 35 mn.

    J'ai besoin d'aide et je sais que je peux compter sur vous.

    Merci d'avance.

  2. #2
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    http://support.sas.com/kb/12/135.html

    Je pense que tu exploses l'espace de stockage.
    Tu peux relancer ton programme et surveiller la work
    si tu es sous unix tu peux lancer la commande sous le répertoire ou se trouve la work .
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 181
    Points
    181
    Par défaut
    Salut,

    As tu testé avec les HASH?

    Regarde ce lien :

    http://www.sas.com/offices/europe/fr...200703_a1.html


    Suistrop

  4. #4
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    bonjour,

    tu fais deux submit au serveur. A quel moment rencontre tu le problème? A ce que je comprends tu travailles sur une librairie en mode serveur donc il est inutile de nettoyer ta work locale. Tu peux également essayer de limiter l'utilisation des variables de tes tables via un keep.

    Après, sans être un grand connaisseur, la solution via des hash proposée par suistrop, peut démontrer des performances très intéréssantes...

  5. #5
    Membre éclairé

    Femme Profil pro
    SAS FRANCE - Support Clients France et Europe
    Inscrit en
    Février 2010
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : SAS FRANCE - Support Clients France et Europe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 289
    Points : 886
    Points
    886
    Par défaut
    Bonjour,

    Je suis sceptique pour le hash : les données seraient stockées uniquement en mémoire. Si la volumétrie est importante, ça suppose de la RAM ! De plus le code hash est une nouveauté SAS 9, or vous êtes en 8.2.

    Je vous recommande
    1. de découper l'unique PROC SQL en plusieurs
    2. de tester avec un MERGE
    3. de faire pointer la WORK vers disque ayant + d'espace libre
    4. éventuellement d'utiliser cleanwork pour libérer de l'espace sur le disque hébergeant la WORK actuellement. Cet utilitaire supprime les dossiers WORK fantômes.

    Géraldine Cade-Deschamps
    Support Clients SAS
    Cordialement,

    --
    Géraldine CADE-DESCHAMPS
    Consultante ▪ Support Clients SAS
    Tel: +33 1 60 62 12 12 ▪ support@sas.com
    www.sas.com/france
    SAS® … THE POWER TO KNOW®

  6. #6
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Remerciements
    Merci à tous pour votre aide.

    J'ai utilisé plusieurs "merge" comme l'a suggéré Géraldine_Cade_SAS.

    Le traitement est très très rapide et se passe sans problème.

    Par ailleurs il me semblait avoir lu quelque part qu'il "n y avait pas de différence" entre jointure avec sql et jointure avec merge.
    Cela à l'air de ne pas être toujours vrai !!!!!!!

    Merci à tous une fois encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CakePHP] Jointures multiples avec CakePHP
    Par sebstein dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 12/11/2010, 09h52
  2. Requete SQL avec jointure multiple
    Par kissskoool dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/01/2008, 01h07
  3. [SQL 2000] Optimisation requête avec jointure multiple
    Par zooffy dans le forum Développement
    Réponses: 5
    Dernier message: 18/09/2007, 15h38
  4. [MySQL] Jointure JOIN avec clé multiple
    Par BlindeKinder dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 18/06/2007, 11h56
  5. UPDATE multiple avec jointure
    Par PyRoFlo dans le forum Requêtes
    Réponses: 6
    Dernier message: 25/05/2006, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo