2015-08-25 10 views
6

В SAS у меня есть структура папок, которая содержит большое количество метаданных таблицы SAS.SAS, программный экспорт объектов метаданных spks

Чтобы перенести из одной среды в другую, нам нужно вручную создать большое количество spks и нажать их в Git. Это проблематично, потому что оно (а) требует времени, (б) разработчики заинтересованы в том, чтобы упаковать большое количество объектов метаданных в один .spk, что создает проблемы в строке, когда нужно отредактировать только один из этих объектов, и никто не может пересмотреть.

Есть:

  1. Способ программно экспортировать файл .spk?
  2. Способ анализа структуры папок и создания одного файла spk для каждого объекта метаданных?

Было бы здорово, если бы вы могли указать мне на полезные бумаги SAS или указать мне правильное направление.

+0

Можете ли вы объяснить, что вы говорите? Что такое файл SPK? Связано ли это с инструментами программирования Института SAS? Если да, то какие пакеты или системы? – Tom

+0

При экспорте объекта метаданных с помощью SAS Management Console или SAS Data Integration studio создается файл .spk, который по существу является пакетом экспортированных метаданных. Затем вы можете импортировать этот пакет в другую среду. – jaamor

+1

Возможно, пакетный инструмент экспорта поможет? http://bi-notes.com/2013/03/administration-backup-certain-item/ Я не играл с ним. – Quentin

ответ

3

Есть две вещей, чтобы указать с вашим подходом:

  1. Тем же элемент метаданных будет иметь различные контрольные суммы при экспорте в два раза, из-за встроенные временные метки. Это всегда будет создавать различия в GIT.
  2. Экспортирование каждого элемента метаданных по отдельности займет много времени - процедура ExportPackage выполняется не так быстро.

Но в любом случае, конечно, вы можете сделать это! Я только что протестировал ниже, и он отлично работает. Если вы не на окнах вы, возможно, придется настроить путь к ExportPackage полезности в трубе (с помощью точки с запятой -; - к командам цепи) ..

%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()