|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 1 ![]() |
Bonjour tout le monde,
Je ne suis pas sur de poster au bon endroit, veuillez donc m'excuser d'avance au cas où. Je ne sais pas si quelqu'un a déjà observé ce souci sous SAS/(SHARE?) (proche de celui de Microsoft Access où il faut compacter la base régulièrement pour flusher l'ensemble des données non utilisées mais réellement bien effacées). En effet, pour éviter les problèmes de lecture/écriture, l'option choisie (peut-être à tort à cause du métier) est de passer par une procédure sql pour supprimer une ligne et une autre pour insérer une nouvelle ligne. Le souci, est que lors de ces différentes opérations, la table finit par grossir de façon exagérée. Ainsi que les triggers, je veux dire par là que si on a supprimer une ligne avec un champ incrémental à 10 par exemple, le chiffre 10 n'est plus disponible, malgré la suppression. La ligne suivant sera donc 11... La solution est pour l'instant, de passer par un data set, style data toto set toto. Ce qui a pour effet de réduire la taille de la table toto de 3Go à 300Mo. Comme si on a "compacté" sous Access pour ceux qui connaissent le souci sous Access... Connaîtriez vous une solution qui permettrait de "compacter" la base ? Car le data set, s'il a pour effet de réduire la taille en flushant les données inutiles, c'est une opération longue car le moteur SAS parcourt ligne à ligne la table initiale de 3Go qui en fait, n'est que de 300Mo après lecture... C'est un truc assez étrange, si vous avez une idée, solution, ou une documentation, je suis preneur et vous remercie bien d'avance =) Pour info, la librairie est en option compress=binary Michel |
|
|
00
|
|
|
#2 |
![]() ![]() Stéphane Consultant et formateur SAS et Cognos Inscription : avril 2009 Messages : 1 791 ![]() |
Si tu veux compacter tes tables de façon automatique il n'y a que COMPRESS=YES lorsque les tables ont plutôt plus de variables alphanumériques et COMPRESS=BINARY lorsque les tables ont plutôt plus de variables numériques.
tu peux dimensionner correctement tes champs également. Ensuite, tu peux gérer plus finement les observations à supprimer mais je ne suis pas certain que la sueur générée soit payante. Quant à SAS / SHARE, c'est un module spécifique pour le partage des tables en écriture...
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !Moteur de recherche dans les papiers SAS |
|
10
|
|
|
#3 |
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
Autre possibilité, supprimer les variables inutiles.
De souvenir ce thème à déjà été abordé dans des précédents sujets, en cherchant un peu sur le forum tu devrais trouver des infos plus précises. Manoutz |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Je n'ai peut-être rien compris, mais j'ai l'impression qu'il ne s'agit pas forcément du problème classique de gain de place.
Si j'ai suivi, les suppressions d'observations via la proc SQL ne sont que des suppressions logiques (cf. la fonction ATTRN et les distinctions subtiles entre les comptages d'observations dans une table). Et que du coup, la table enfle démesurément en mémoire alors que son nombre d'observations logiques reste stable. L'étape DATA remet tout ça à plat puisqu'elle n'écrit que les observations qui ne sont pas marquées pour une suppression logique. Je n'ai pas encore eu le temps de faire des tests pour vérifier cette analyse ; mais si c'était le cas, il faudrait chercher un moyen de forcer le SQL à une suppression physique de l'observation et non logique (mais du coup, on reviendrait à un processus coûteux en temps, j'imagine). |
|
|
10
|
|
|
#5 | ||
|
Membre Expert
![]() ![]() |
Bonjour,
Je viens de faire le test suivant : Code :
Pour supprimer les données physiquement il faut recréer la table. Sauf si il y a des options qui nous permettrons de le faire avec un delete sql. Exécuter le code ci-dessus et regarder à chaque étape la taille des tables à partir de l'explorateur windows. Cordialement
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
|
||
|
|
10
|
|
|
#6 |
![]() ![]() Stéphane Consultant et formateur SAS et Cognos Inscription : avril 2009 Messages : 1 791 ![]() |
REMOVE permet la suppression physique d'une observation. Il faut utiliser MODIFY et non SET dans ce cas.
http://support.sas.com/documentation...a000202648.htm
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !Moteur de recherche dans les papiers SAS |
|
10
|
|
|
#7 |
|
Membre Expert
![]() ![]() |
http://support.sas.com/documentation...a001392994.htm
Note: For PROC SQL tables, SAS deletes the data in the rows but retains the space in the table. La proc SQL ne libère pas l'espace dans la table après suppression.
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
|
|
|
10
|
|
|
#8 |
|
Membre habitué
![]() Géraldine CADE DESCHAMPSSupport Clients SAS (France et Europe) Inscription : février 2010 Messages : 62 ![]() |
Bonjour,
C'est en effet le fonctionnement normal et documenté de l'instruction DELETE. Pour que les suppressions logiques soient appliquées physiquement, il y a 2 solutions : - relire en étape DATA : data MaTable ; set MaTable ; - ou bien trier la table proc sort data=MaTable. Géraldine Cade-Deschamps |
|
|
10
|
|
|
#9 | |||||
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Bonjour.
J'ajouterai une 3e solution à la liste de Géraldine : la proc Copy. En effet, comme je viens de le lire dans une doc (ce qui m'a fait repenser à cette discussion) : Citation:
Alors continuons le même article et glissons à la proc APPEND : là on tient quelque chose qui fonctionne. Code :
Code :
A tester. Olivier |
|||||
|
|
10
|
|
|
#10 |
|
Membre expérimenté
![]() Inscription : avril 2009 Messages : 537 ![]() |
si tu enleves des lignes tu dois egalement en ajouter de temps en temps non?
tu peux mettre REUSE=YES sur la table et voir ce qui ce passe coté taille de fichier. cela devrait marcher meme pour du SHARE |
|
|
00
|
|
|
#11 | ||
|
Membre expérimenté
![]() Inscription : avril 2009 Messages : 537 ![]() |
Oui cela fonctionne :
Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com