|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : avril 2009 Messages : 60 ![]() |
Bonjour à tous
Je dois traiter des tables avec énormément d'observations, auriez-vous une solution beaucoup plus rapide pour les "merge by" que de passer par le chemin classique qu'est de proc sorter les deux tables avant de les merger? En effet, les "proc sort" me demandent des temps de calculs assez longs et le fait de rentrer dans une data est aussi très très long! Je pensais à du SQL, mais je ne m'y connais pas trop à vrai dire... Si vous avez une solution Merci beaucoup et bonne journée!!! |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Salut Misspatate,
Tu pourrais poster ton code avec le merge pour te donner une alternative en SQL. |
|
|
00
|
|
|
#3 | ||
|
Invité régulier
![]() Inscription : avril 2009 Messages : 60 ![]() |
Coucou!! Voici le code
Code :
|
||
|
|
00
|
|
|
#4 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
Hello,
tes tables sont elles sous un SGBD? si oui , tu soumis la requête SQL à la base c'est plu rapide. tes tables sont elles indexées ? si non tu crée des indexes sur les colonnes de merge et le TRI sur les cléfs de joindures devront être plus rapide. |
|
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Ce que ça donne en SQL
Code :
|
||
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : avril 2009 Messages : 60 ![]() |
Merci beaucoup!! Je vais tester pour voir si c'est plus rapide...
|
|
|
00
|
|
|
#7 | ||
|
Invité régulier
![]() Inscription : avril 2009 Messages : 60 ![]() |
Est-ce grave ce warning?
Code :
En tout cas, merci beaucoup |
||
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Inscription : avril 2009 Messages : 60 ![]() |
J'ai une autre question, est ce que a et b sont considérées comme des tables temporaires?
|
|
|
00
|
|
|
#9 | ||||
|
Membre éclairé
![]() statisticien Inscription : mai 2011 Messages : 212 ![]() |
a et b sont internes à ta requète sql , elles n'existent pas ailleurs à ma connaissance.
Dans le cas de très grosses tables triée à l'origine tu peux l'indiquer également à la proc sql pour parfois accélérer les choses En reprenant le code de Brice Code :
Code :
|
||||
|
|
30
|
|
|
#10 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
le Warning te dit que t'as remplacé ta table maBiblio.psdd.
C'est normal tu n'as pas changé le nom de la table en sortie. |
|
|
00
|
|
|
#11 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
A et B s'appel des alias , sa t'évite d'écrire col1.TABLE1,COL2.TABLE2, ...
tu renome temporairement TABLE1 et TABLE2 par A et B. |
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
la table maBiblio.psdd est générée à partir d'elle même, c'est normal que tu as un Warning.ps: Je ne connaissais pas ce trie dans du sql, je vais tester donc.
|
|
|
00
|
|
|
#13 | ||
|
Invité régulier
![]() Inscription : avril 2009 Messages : 60 ![]() |
Citation:
Citation:
Merci Jérome, faut-il que les tables soit triées à l'avance si c'est pour les retrier ensuite avec "sortedby"? |
||
|
|
00
|
|
|
#14 | |||
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
Citation:
Extrait du HELP SAS. Code :
the SORTEDTEDBY= DATA SET OPTION TO specify how the DATA are currently sorted |
|||
|
|
00
|
|
|
#15 |
|
Invité régulier
![]() Inscription : avril 2009 Messages : 60 ![]() |
Ok, merci
J'ai essayé avec le SORTEDBYet cela fonctionne bien mais c'est plus long que sans. |
|
|
00
|
|
|
#16 | ||
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
Les indexes. facilite l'accée à la colonne.
c'est comme les sommaires dans les livres. exemple de création avec une étape DATA. tu peux en créer avec proc datasets, proc sql; Code :
|
||
|
|
00
|
|
|
#17 |
|
Membre éclairé
![]() statisticien Inscription : mai 2011 Messages : 212 ![]() |
oui il faut que les tables soient triées à l'avance, le sortedby c'est juste pour indiquer que la table est triée, il faut donc qu'elle le soit.
Dans ton cas ce serait je pense utile si les deux tables sont triée par seulement une seule des deux variables, par exemple par sim, ce qui ne permet pas de faire le merge by sim numero3, mais est un peu plus que ce dont a besoin la proc sql donc en rajoutant dans ce cas (sortedby=sim) entre les tables et leur allias tu indique qu'elles sont déjà triées par cette variable, et sql devrait alors prendre moins de temps. |
|
|
00
|
|
|
#18 | ||||
![]() ![]() Stéphane Consultant et formateur SAS et Cognos Inscription : avril 2009 Messages : 1 791 ![]() |
Le premier warning s'enlève avec UNDO_POLICY
Code :
Si tu veux lister les colonnes de tes tables et n'y conserver que celles qui t'intéressent, tu utilises FEEDBACK Code :
Il n'est pas utile de trier la table. Ce qui baisse tes performances est de faire un LEFT JOIN. Mais si l'on en a besoin, rien n'est à changer. Néanmoins, qu'entends-tu par "un temps assez long" ? Quels sont les temps entre ta requête SAS et en SQL de MEGAMIND2 ?
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !Moteur de recherche dans les papiers SAS |
||||
|
00
|
|
|
#19 |
|
Invité régulier
![]() Inscription : avril 2009 Messages : 60 ![]() |
Je pense aussi mais le fait de trier la table avec proc sort demande à SAS beaucoup de temps, au final, il se peut que ce soit moins efficace
|
|
|
00
|
|
|
#20 | |
|
Membre éclairé
![]() statisticien Inscription : mai 2011 Messages : 212 ![]() |
Citation:
Tu as des papiers qui sont sortis sur la rapidité des différentes méthodes comme par exemple celui-ci http://www2.sas.com/proceedings/sugi28/096-28.pdf |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com