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 :

Optimisation SAS et ORACLE


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 43
    Points : 33
    Points
    33
    Par défaut Optimisation SAS et ORACLE
    Bonjour,

    J’ai un problème d’optimisation.

    En effet, chaque jour je mets à jour des bases Oracle via SAS.
    Je reçois donc des fichiers avec les nouvelles factures à intégrer.
    J’ai 3 identifiants dans ce fichier et avec ces 3 identifiants je crée un ID_FACTURE.
    Si les 3 identifiants existent déjà dans la base Oracle existante je dois reprendre l’ID_facture déjà présent dans la table sinon j’incrémente mon ID_FACTURE.

    Exemple :
    Ligne1 : ID1 = 1 ID2=exem ID3=1 =>ID_FACTURE=1
    Ligne2 : ID1 = 2 ID2=exem ID3=1 =>ID_FACTURE=2
    Ligne3 : ID1 = 1 ID2=exem ID3=1 =>ID_FACTURE=1
    Ligne4 : ID1 = 3 ID2=exep ID3=2 =>ID_FACTURE=3

    Donc pour vérifier l’unicité des 3 ID, je descends ma base ORACLE facture sous SAS pour faire une jointure avec mes nouvelles factures du jour.
    Le problème est que ma base ORACLE comporte plus de 100 Millions de ligne et donc le temps de traitement est énorme…
    Connaissez vous une autre méthode pour vérifier l’unicité dans ma base ORACLE via SAS ?

    Merci d’avance.

  2. #2
    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,

    La jointure peut être faite côté Oracle, tout dépends de la manière dont elle est codée. Si c'est un MERGE qui est fait alors la table Oracle est rapatriée en locale. Mais si la jointure est réalisée en PROC SQL, il y a de grande chances qu'elle soit exécutée directement côté oracle.
    Pour optimiser le temps, la volumétrie étant côté Oracle, il faut penser le code pour qu'il soit soumis par le SGBD.

    Je vous conseille ces 2 lectures :
    Optimisez les performances de traitement de vos données avec SAS/ACCESS®
    SAS In-Database : quand le traitement SAS s'exécute dans le SGBD
    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®

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    Merci pour vos liens mais je n'arrive pas à trouver de meilleurs solutions que celle utilisé ci dessous :
    Peut être en utilisant table volatile?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /*descente de la base oracle en SAS*/
    Proc sql;
    connect to oracle (user=iser pw=password path='@PRO_XXX');
    Create table REF.REF_BASE_FACTURES as select * from connection to oracle( select ID_FACTURE, 
    ID_INT_FLUX,ID_INT_LOT,ID_INT_FACT From BASE_FACTURES );
    disconnect from oracle;
     Quit;
    66 millions de lignes =>16 Minutes de real times

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /*trie de la base*/
    Proc sort data=REF.REF_SIDTP_FACTURES;
    by ID_INT_FLUX ID_INT_LOT ID_INT_FACT;
    Run;
    7 Minutes de real times

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /*trie de notre table SAS =>new factures du jour*/
    Proc sort data=TRAN.SIDTP_FACTURES ;
    by ID_INT_FLUX ID_INT_LOT ID_INT_FACT;
    Run;
    57471 observations =>real time 1s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /*jointure pour voir si les identifiants des new factures existent déja ou pas*/
    Data SIDTP_FACTURES_existe SIDTP_FACTURES_noexiste(drop=ID_FACTURE);
    merge TRAN.SIDTP_FACTURES(in=b) REF.REF_SIDTP_FACTURES(in=a keep=ID_INT_FLUX ID_INT_LOT ID_INT_FACT 
    ID_FACTURE);
    by ID_INT_FLUX ID_INT_LOT ID_INT_FACT;
    if b and a then output SIDTP_FACTURES_existe;
    if b and not a then output SIDTP_FACTURES_noexiste;
    Run;
    =>real time 8:55.13

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Data SIDTP_FACTURES_noexiste ;
    Set SIDTP_FACTURES_noexiste;
    by ID_INT_FLUX ID_INT_LOT ID_INT_FACT;
    retain ID_FACTURE;
    if _N_=1 then ID_FACTURE=max+1;
    else do;
    num=ID_FACTURE;
    if first.ID_INT_FACT then ID_FACTURE=num + 1;
     end;
    Run;

Discussions similaires

  1. Optimisation de batch oracle > peoplesoft
    Par chantalou dans le forum SQL
    Réponses: 0
    Dernier message: 16/05/2008, 22h20
  2. Export SAS vers Oracle
    Par Atojul dans le forum Administration et Installation
    Réponses: 8
    Dernier message: 30/04/2008, 16h14
  3. [9i] Optimisation et Parellisme Oracle
    Par AyaGizmo dans le forum SQL
    Réponses: 2
    Dernier message: 04/12/2007, 18h01
  4. Optimisation de requete oracle
    Par Mehdilis dans le forum Oracle
    Réponses: 4
    Dernier message: 18/12/2006, 13h42
  5. [sgbd]Optimisation des requetes Oracle/Perl
    Par linou dans le forum SGBD
    Réponses: 7
    Dernier message: 30/06/2005, 18h09

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