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

Administration et Installation Discussion :

[Métadonnées] Lister tous les objets SAS de mon environnement


Sujet :

Administration et Installation

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 18
    Points
    18
    Par défaut [Métadonnées] Lister tous les objets SAS de mon environnement
    Bonjour,

    je voudrais faire une cartographie de tous les objets SAS développés dans un projet.
    J'ai essayé de le faire avec BI Lineage mais l'export de l'arborescence vers les datasets échoue.
    Je suis donc passé à l'extraction des métadonnées mais je n'y arrive pas. Par exemple je n'arrive pas à savoir avec quel type de métadonnées référencée une procédure stockée ou un rapport par exemple. J'ai juste pu extraire les tables et les cubes mais rien de plus. De plus, pour chaque objet je souhaite obtenir en plus de son nom, son chemin (domaine/sous domaine/sous sous domaine/.../objet).

    Quelqu'un aurait - il déjà fait face à ce type de soucis? si oui comment as-tu procédé?
    Merci d'avance.

    PS: Je travaille en SAS 9.1.3

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    Salut,

    c'est quoi ce que tu nommes un "Projet" ?

    xav

  3. #3
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 372
    Points
    372
    Par défaut
    Tu vas devoir entrer dans le monde merveilleux des métadonnées...

    Pour les types de objets storedprocess, map, etc cf ici


    Tu peux utiliser les requetes XML via la proc metadata ou les fonctions datastep METADATA_XXXXXX.
    Pour ce genre de probleme je privilégie les requetes XML, plus rapides.

    un document sur les requetes de métadonnées
    Tu pourras trouver d'autres exemples en faisant des recherches par mots clef "site:sas.com XML metadata request"


    Tu vas aussi avoir besoin du XMLMAPPER pour créer des maps d'extraction des données retournées par le serveur de métadonnées.


    Je ne vais pas te donner le programme qui fait ce que tu demandes mais avec ces requetes de métadonnées la moitié du chemin est fait.

    Déjà une étape data pour obtenir l'identifiant de ton repository (ici le foundation) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DATA _NULL_;
          LENGTH repos_id $17;
    	  repos_id="";
          rc=metadata_resolve("omsobj:RepositoryBase?@Name='Foundation'","nul",repos_id);
          if rc EQ 1 then CALL SYMPUT("repos_id",CATS(repos_id));
    run;

    Cette requete XML va extraire tous les répertoires de métadonnées (elle me sert à extraire les répertoires du BIP_TREE mais elle marche pour tout type de répertoire :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    /* requetes d'extractions des répertoires du BIP TREE */
    	DATA _NULL_;
    	FILE inxml ENCODING="ISO-8859-1";
    	PUT '<GetMetadataObjects>'
    	 	/ "<Reposid>&repos_id.</Reposid>"
    	 	/ '<Type>Tree</Type>'
    		/ '<Objects/>'
    		/ '<NS>SAS</NS>'
    	 	/* OMI_GET_METADATA(256) + OMI_TEMPLATE(4) = 260 */
    	 	/ '<Flags>260</Flags>'
    	 	/ '<Options>'
    		/ '<Templates>'
    		/ '	<Tree Name=" ">'
    		/ '		<SubTrees/>'
    		/ '	</Tree>'
    		/ '</Templates>'
    		/ '</Options>'
    		/ '</GetMetadataObjects>';
    	RUN;
     
     
    /* envoi de la requête au serveur */
    proc metadata in=inxml out=outxml;
    run;
     
    /* Map de récupération des répertoires et de leurs répertoires fils.  
    Cette map définit 2 tables :
    			* "Trees" qui contient tous les répertoires du référentiel
    			* "Tree1Tree2" qui contient les seuls répertoires ayant des sous répertoires et qui les associe 	
    */
    FILENAME TreeMap TEMP ENCODING="ISO-8859-1"; 
     
    DATA _NULL_;
    FILE TreeMap ENCODING="ISO-8859-1";
    PUT '<?xml version="1.0" encoding="ISO-8859-1"?>';
    PUT '<SXLEMAP name="TreeMap" version="1.2">';
    PUT '<TABLE name="Tree1Tree2">';/* table  Tree1Tree2*/
    PUT '<TABLE-DESCRIPTION>Table SAS des répertoires et de leurs sous répertoires</TABLE-DESCRIPTION>';
    PUT '<TABLE-PATH syntax="XPath">/GetMetadataObjects/Objects/Tree/SubTrees/Tree</TABLE-PATH>';
    PUT '<COLUMN name="IdTree1" retain="YES">';
    PUT '<PATH syntax="XPath">/GetMetadataObjects/Objects/Tree/@Id</PATH>';
    PUT '<TYPE>character</TYPE>';
    PUT '<DATATYPE>string</DATATYPE>';
    PUT '<LENGTH>17</LENGTH>';
    PUT '</COLUMN>';
    PUT '<COLUMN name="NameTree1" retain="YES">';
    PUT '<PATH syntax="XPath">/GetMetadataObjects/Objects/Tree/@Name</PATH>';
    PUT '<TYPE>character</TYPE>';
    PUT '<DATATYPE>string</DATATYPE>';
    PUT '<LENGTH>60</LENGTH>';
    PUT '</COLUMN>';
    PUT '<COLUMN name="IdTree2">';
    PUT '<PATH syntax="XPath">/GetMetadataObjects/Objects/Tree/SubTrees/Tree/@Id</PATH>';
    PUT '<TYPE>character</TYPE>';
    PUT '<DATATYPE>string</DATATYPE>';
    PUT '<LENGTH>17</LENGTH>';
    PUT '</COLUMN>';
    PUT '<COLUMN name="NameTree2">';
    PUT '<PATH syntax="XPath">/GetMetadataObjects/Objects/Tree/SubTrees/Tree/@Name</PATH>';
    PUT '<TYPE>character</TYPE>';
    PUT '<DATATYPE>string</DATATYPE>';
    PUT '<LENGTH>60</LENGTH>';
    PUT '</COLUMN>';
    PUT '</TABLE>';
    PUT '<TABLE name="Trees">';/* table  Trees*/
    PUT '<TABLE-DESCRIPTION>Table SAS des répertoires de tous les répertoires</TABLE-DESCRIPTION>';
    PUT '<TABLE-PATH syntax="XPath">/GetMetadataObjects/Objects/Tree</TABLE-PATH>';
    PUT '<COLUMN name="IdTree1" retain="YES">';
    PUT '<PATH syntax="XPath">/GetMetadataObjects/Objects/Tree/@Id</PATH>';
    PUT '<TYPE>character</TYPE>';
    PUT '<DATATYPE>string</DATATYPE>';
    PUT '<LENGTH>17</LENGTH>';
    PUT '</COLUMN>';
    PUT '<COLUMN name="NameTree1" retain="YES">';
    PUT '<PATH syntax="XPath">/GetMetadataObjects/Objects/Tree/@Name</PATH>';
    PUT '<TYPE>character</TYPE>';
    PUT '<DATATYPE>string</DATATYPE>';
    PUT '<LENGTH>60</LENGTH>';
    PUT '</COLUMN>';
    PUT '</TABLE>';
    PUT '</SXLEMAP>';
    RUN;
     
     
    /* extraction des données par application de la map sur la réponse du serveur */		
    LIBNAME treelib XML XMLFILEREF=outxml XMLMAP=TreeMap;
     
    data Trees;
    set treelib.Trees;
    run;
     
    data Tree1Tree2;
    set treelib.Tree1Tree2;
    run;
    Voilà ensuite une requete qui liste les objets de type Transformation contenus dans des répertoires d'identifiant de métadonnées id_rep.


    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    /* construction de la requete des éléments "Transformation" de chaque répertoire retenu */
    FILENAME inxml2 TEMP ENCODING="ISO-8859-1";
    FILENAME outxml2 TEMP ENCODING="ISO-8859-1";
     
     
    DATA _NULL_;
    	set  temp_chemin_rep (keep=id_rep) end=fin;
    	FILE inxml2 ;
    	if _n_ eq 1 then do; /* début de la requête */
    		put '<GetMetadata>';
    	 	put '<Metadata>';
    	end;
    	put   '  <Tree Id="' id_rep $17.  '"/>' ; /* injection de chacune des références de répertoire */
    	if fin then do;
    	put  '</Metadata>'; /* fin de la requête */
    		put '<NS>SAS</NS>';
    	  	put '<Flags>20</Flags>'; 	 /* OMI_TEMPLATE(4) + OMI_INCLUDE_SUBTYPES(16) = 20  */
    	 	put '<Options>';
    		put '<Templates>'; /* tamplates d'extaction des objets Transformation */
    		put '	<Tree>';
    		put '		<Members/>';
    		put '	</Tree>';
    		put ' <Transformation Name=" " TransformRole=" "/>';
    		put '</Templates>';
    		put '</Options>';
    		put '</GetMetadata>';
    	end;
    	RUN;
     
    	/* passage de la requete au serveur de métadonnées */
    	proc metadata in=inxml2 out=outxml2;
    	run;
     
     /* définition d'une map XML de récupération des éléments de type Transformation :
    		* la table "storedprocess" récupère les storedprocess 
    				(de type ClassifierMap qui est un sous type de Transformation)
    		* la table "transformation"  récupère les rapports et les InformationMaps (de type Transformation)
    	*/
    FILENAME Transf TEMP ENCODING="ISO-8859-1";
    data _NULL_; 
    FILE Transf;
    PUT '<?xml version="1.0" encoding="ISO-8859-15"?>'
    / '<SXLEMAP xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Transf" version="1.2" xsi:noNamespaceSchemaLocation="http://www.sas.com/xml/schema/sxle12.xsd">'
    / '	<TABLE name="storedprocess">'
    / '	<TABLE-PATH syntax="XPath">/GetMetadata/Metadata/Tree/Members/ClassifierMap</TABLE-PATH>'
    / ' <COLUMN name="id_rep" retain="YES">'
    / '		<PATH syntax="XPath">/GetMetadata/Metadata/Tree/@Id</PATH>'
    / '     <TYPE>character</TYPE>'
    / '     <DATATYPE>string</DATATYPE>'
    / '     <LENGTH>17</LENGTH>'
    / '     </COLUMN>'
    / '    <COLUMN name="type">'
    / '        <PATH syntax="XPath">/GetMetadata/Metadata/Tree/Members/ClassifierMap/@TransformRole</PATH>'
    / '        <TYPE>character</TYPE>'
    / '        <DATATYPE>string</DATATYPE>'
    / '        <LENGTH>32</LENGTH>'
    / '    </COLUMN>'
    / '    <COLUMN name="objet">'
    / '        <PATH syntax="XPath">/GetMetadata/Metadata/Tree/Members/ClassifierMap/@Name</PATH>'
    / '        <TYPE>character</TYPE>'
    / '        <DATATYPE>string</DATATYPE>'
    / '        <LENGTH>128</LENGTH>'
    / '    </COLUMN>'
    / '    </TABLE>'
    / '    <TABLE name="transformation">'
    / '        <TABLE-PATH syntax="XPath">/GetMetadata/Metadata/Tree/Members/Transformation</TABLE-PATH>'
    / '        <COLUMN name="id_rep" retain="YES">'
    / '            <PATH syntax="XPath">/GetMetadata/Metadata/Tree/@Id</PATH>'
    / '            <TYPE>character</TYPE>'
    / '            <DATATYPE>string</DATATYPE>'
    / '            <LENGTH>17</LENGTH>'
    / '        </COLUMN>'
    / '        <COLUMN name="type">'
    / '            <PATH syntax="XPath">/GetMetadata/Metadata/Tree/Members/Transformation/@TransformRole</PATH>'
    / '            <TYPE>character</TYPE>'
    / '            <DATATYPE>string</DATATYPE>'
    / '            <LENGTH>32</LENGTH>'
    / '        </COLUMN>'
    / '        <COLUMN name="objet">'
    / '            <PATH syntax="XPath">/GetMetadata/Metadata/Tree/Members/Transformation/@Name</PATH>'
    / '            <TYPE>character</TYPE>'
    / '            <DATATYPE>string</DATATYPE>'
    / '            <LENGTH>128</LENGTH>'
    / '        </COLUMN>'
    / '    </TABLE>'
    / '</SXLEMAP>';
    run;
     
     
     
    /* application de la map */
    libname trslib XML XMLFILEREF=outxml2 XMLMAP=Transf; 
     
    /* récupération des éléments storedprocess, rapport et maps */
    data Transformations;
    set trslib.storedprocess TRSLIB.transformation;
    run;
     
     
    FILENAME inxml2 CLEAR;
    FILENAME outxml2  CLEAR ;
    LIBNAME trslib CLEAR;
    Voilà déjà de quoi débuter.

    A+

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 18
    Points
    18
    Par défaut [Résolu]
    Merci beaucoup.

    ça va nettement mieux.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/08/2011, 17h01
  2. lister tous les objets rmiregistry
    Par une_tite_question dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 21/05/2008, 20h45
  3. Comment lister tous les utilisateurs de mon LDAP
    Par PrinceMaster77 dans le forum ASP
    Réponses: 6
    Dernier message: 30/10/2007, 20h29
  4. Réponses: 10
    Dernier message: 06/07/2007, 10h27
  5. Lister tout les objets de mon prog c'est possible?
    Par korntex5 dans le forum Delphi
    Réponses: 9
    Dernier message: 24/10/2006, 11h06

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