2015-08-25 17 views
6

W systemie SAS mam strukturę folderów, która zawiera dużą liczbę metadanych tabeli SAS.SAS, programowo wyeksportuj obiekty obiektu metadanych

Aby przeprowadzić migrację z jednego środowiska do drugiego, musimy ręcznie utworzyć dużą liczbę próbek i przesłać je do Git. Jest to problematyczne, ponieważ (a) wymaga czasu, (b) programiści są zachęcani do pakowania dużej liczby obiektów metadanych do jednego .spk, co stwarza problemy na linii, gdy tylko jeden z tych obiektów musi być edytowany, a żaden nie może przejrzeć.

Czy istnieje:

  1. sposób programowo wyeksportować plik .spk?
  2. Sposób na przeanalizowanie struktury folderów i utworzenie jednego pliku SPK dla każdego obiektu metadanych?

Byłoby wspaniale, gdybyś mógł wskazać mi pomocne dokumenty SAS lub wskazać mi właściwy kierunek.

+0

może Pan wyjaśnić, co mówisz? Co to jest plik SPK? Czy jest to związane z narzędziami programowania SAS Institute? Jeśli tak, jakie pakiety lub systemy? – Tom

+0

Podczas eksportowania obiektu metadanych za pomocą programu SAS Management Console lub SAS Data Integration, tworzony jest plik .spk, który zasadniczo jest pakietem wyeksportowanych metadanych. Następnie można zaimportować ten pakiet w innym środowisku. – jaamor

+1

Być może narzędzie do eksportu partii może pomóc? http://bi-notes.com/2013/03/administration-backup-certain-item/ Nie grałem z tym. – Quentin

Odpowiedz

3

Są dwie rzeczy, aby podkreślić w swoim podejściu:

  1. tego samego elementu metadanych mają różne sumy kontrolne kiedy eksportowane dwa razy, z powodu wbudowanych znaczników czasu. To zawsze spowoduje różnice w GIT.
  2. Eksport każdego elementu metadanych osobno zajmie dużo czasu - procedura ExportPackage nie jest tak szybka.

Ale w każdym razie, oczywiście, co proponujecie, można zrobić! Właśnie przetestowałem poniższy i działa dobrze. Jeśli nie jesteś na windows może trzeba ustawić ścieżkę do narzędzia ExportPackage w rurze (za pomocą średnika -; - do poleceń łańcuchowych) ..

%macro exporter(root=%sysfunc(pathname(work)) /* physical root */ 
    ,host=dev-meta.ACME.int /* metadata server */ 
    ,port=8561    /* metadata port */ 
    ,user=sasdemo   /* user with metadata credentials */ 
    ,pass=Mars123   /* password */ 
); 
options noquotelenmax; 

data paths (keep=tree_path uri treetype); 
    length tree_path $500 uri tree_uri parent_uri 
    parent_name TreeType PublicType $256; 
    n=1; 
    do while(metadata_getnobj("omsobj:[email protected] = 'Folder'",n,uri)>0); 
    /* code for getting the metadata path */ 
    rc=metadata_getattr(uri,"Name",tree_path); 
    rc=metadata_getattr(uri,"TreeType",TreeType); 
    rc=metadata_getattr(uri,"PublicType",PublicType); 
    tree_uri=uri; 
    do while (metadata_getnasn(tree_uri,"ParentTree",1,parent_uri)>0); 
     rc=metadata_getattr(parent_uri,"Name",parent_name); 
     tree_path=strip(parent_name)||'/'||strip(tree_path); 
     tree_uri=parent_uri; 
    end; 
    tree_path='/'||strip(tree_path); 
    call symputx(cats('path',n),tree_path,'l'); 
    call symputx(cats('uri',n),uri,'l'); 
    call symputx('n',n,'l'); 
    output; 
    n+1; 
    if n>3 then leave; /* remove this unless testing */ 
    end; 
run; 
proc sort; by tree_path;run; 

/* get location of BatchExport metadata tool */ 
/*http://support.sas.com/documentation/cdl/en/bisag/64088 
    /HTML/default/viewer.htm#a003261084.htm*/ 
data _null_; 
    h="%sysget(SASROOT)"; 
    h2=substr(h,1,index(h,"SASFoundation")-2); 
    call symputx("platform_object_path" 
    ,cats(h2,"/SASPlatformObjectFramework/&sysver")); 
run; 
%put Batch tool located at: &platform_object_path; 

%let connx_string= -host &host -port &port -user &user -password &pass; 

%do x=1 %to &n; 
    data out&x (drop=n rc); 
    length uri objuri Name PublicType path $256; 
    retain path "&&path&x"; 
    retain uri "&&uri&x"; 
    n=1; 
    do while (metadata_getnasn(uri,'Members',n,objuri)>0); 
     rc=metadata_getattr(objuri,"Name",Name); 
     rc=metadata_getattr(objuri,"PublicType",PublicType); 
     call symputx(cats('objuri',n),objuri,'l'); 
     call symputx(cats('objName',n),Name,'l'); 
     call symputx(cats('objType',n),PublicType,'l'); 
     output; 
     n+1; 
    end; 
    run; 
    proc sql noprint; 
    select count(*) into: nobs from &syslast; 
    %if &nobs=0 %then %do; 
    drop table &syslast; 
    %end; 
    %else %do objn=1 %to &nobs; 
    data _null_; 
     infile "C: & cd ""&platform_object_path"" %trim(
     ) & ExportPackage &connx_string %trim(
     )-package ""&root&&path&x\&&objType&objn.._&&objname&objn...spk"" %trim(
     )-objects ""&&path&x/&&objname&objn(&&objType&objn)"" %trim(
     )-log ""&root&&path&x\&&objType&objn.._&&objname&objn...log"" 2>&1" 
     pipe lrecl=1000; 
     input; 
     list; 
    run; 
    %end; 
%end; 
%mend; 

%exporter()