Смена владельца и разрешений каждого набора данных, созданного моей работой - PullRequest
0 голосов
/ 04 апреля 2019

Мне нужно изменить владельца и разрешения для каждого набора данных, сгенерированного моей работой. Мне нужно включить это в мой процесс пост-обработки. Я могу использовать команду chown, используя X или pipe в своем коде SAS, чтобы изменить разрешения последнего созданного набора данных. Предложите способы получения списка всех постоянных наборов данных, созданных в задании.

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Нет опции «ведение журнала» для опции включения / выключения SAS, которая автоматически идентифицирует участника / задание, создавшее наборы данных. SAS, установленный в операционных системах большого железа (мэйнфреймах) или, возможно, в OpenVMS, может автоматически делать это в ОС.

Знаете ли вы <path> имен библиотек, использованных при создании новых наборов данных?

Один подход основан на find опциях -newer

-новый файл
Файл был изменен позже, чем файл. Если файл является символической ссылкой и действует опция -H или -L, всегда используется время модификации файла, на который он указывает.

Итак, вы хотите

  • начало работы - создать файл маркера
  • конец задания - найдите файлы, более новые, чем файл маркера, и выполните для них команду chown

Eaxmple:

libname joblib '~/myjobs/sasdata';

* create marker file;
%sysexec touch /tmp/job-start.tag

* sas code;

* chown and chmod each newer file;
%sysexec find ~/myjobs/sasdata -type f -newer /tmp/job-start.tag -exec chmod 755 {} \%str(;);
%sysexec find ~/myjobs/sasdata -type f -newer /tmp/job-start.tag -exec chown newower {} \%str(;);

Альтернативные способы помечать наборы данных SAS из задания

Идея состоит в том, чтобы отделить, пометить или пометить наборы данных таким образом, чтобы они отличались от других заданий

Способ 1. Задания создают независимые наборы наборов данных:

Создайте новую уникальную папку для каждого запуска:

  • Используйте общий libref, такой как JOB, в исходном коде, но пусть он указывает на новую папку
  • Запустите задание, создав новые наборы данных.
  • Выполнить настройки после работы
  • Переместить новые наборы данных в PERM, место их постоянного хранения

Способ 2. Источник задания зависит от наборов данных в PERM и не может быть изменен :

Использовать конкатенацию пути к библиотеке:

  • Изменить имя библиотеки до запуска задания
    libname PERM ("<path-to-new-job-unique-folder">, "<path to actual PERM>");
  • Новые наборы данных будут создаваться по первому пути объединения.
  • Наборы данных после обработки, как обсуждалось ранее

Способ 3. Использование макропеременной для обозначения каждого набора данных в задании

  • Изменить код задания с
    DATA xyz; …
    до
    %let JOB_TIMESTAMP=%sysfunc(datetime()); %* this is a job 'tag' for job-unique identification; %let JOB_LABEL=(label="JOBID:&JOB_LABEL"); DATA xyz &JOB_LABEL; …
  • Размещать задание, используйте PROC CONTENTS или SQL DICTIONARY.TABLES, чтобы определить наборы данных, имеющие & JOB_TIMESTAMP в метке.

Способ 4. Задания выполняются на сервере SAS, метки не могут быть изменены

  • Обновите исходный код JOB, чтобы каждый набор данных, создаваемый заданием, получал соответствующую созданную заметку метаданных, которая содержит & JOB_TIMESTAMP.
  • Опубликовать работу, отсканировать заметки метаданных на наличие & JOB_TIMESTAMP и настроить те из них, которые соответствуют.

Способ 5. Создание набора данных AUDIT для каждого набора данных, созданного заданием

  • Поиск справки для «Понимания контрольного журнала»
  • Опубликовать поиск работы в таблице аудита для тега задания

Другие способы

  • Создайте собственную таблицу отслеживания для работы
  • Источник JOB должен быть изменен, и макросы могут помочь обеспечить согласованность: %macro jobtracker(data=, id=); … insert into perm.jobtracker values ("&data", "&id") … %mend; … %jobtracker(data=analysis1, id=&JOB_TIMESTAMP) %* manually track each table; data analysis1; …
  • Опубликовать задание, обработать наборы данных для PERM.JOBTRACKER и &JOB_TIMESTAMP.

Если вышеперечисленное не работает для вас, добавьте дополнительную информацию к вопросу:

  • Как запускаются рабочие места?
  • Насколько близко друг к другу по времени находятся старты?
  • Сколько заданий выполняется параллельно?
  • Могут ли задания сталкиваться при создании новых наборов данных или зависимости от них?
  • Имеете ли вы полный контроль над применяемыми параметрами исходного кода и набора данных?
0 голосов
/ 04 апреля 2019

Когда вы говорите «постоянные наборы данных», вы должны иметь в виду, что эти наборы данных хранились в одном или нескольких местах. Почему бы просто не использовать filename test pipe "dir /b/s X:\xxxxxx\*.sas7dbat", чтобы получить список?

...