更改我的工作创建的每个数据集的所有者和权限
Change owner and permissions of every dataset created by my job
我需要更改我的作业生成的每个数据集的所有者和权限。我需要将其包含在我的 post 处理过程中。我可以在我的 SAS 代码中使用 X 或管道使用 chown 命令来更改最新创建的数据集的权限。建议获取作业中创建的所有永久数据集列表的方法。
当你说"permanent datasets"时,你一定是指那些数据集存储在一个或多个地方。为什么不直接使用 filename test pipe "dir /b/s X:\xxxxxx\*.sas7dbat"
来获取列表?
没有 SAS on/off 选项 'journaling' 功能可以自动识别创建数据集的 runner/job。安装在大型机(大型机)操作系统中的 SAS,或者可能是 OpenVMS,可能会由 OS.
自动完成
您知道创建新数据集时使用的库名称 <path>
吗?
一种方法依赖于 find
选项 -newer
-newer file
File was modified more recently than file. If file is a symbolic link and the -H option or the -L option is in effect, the modification time of the file it points to is always used.
所以你想
- 作业开始 - 创建标记文件
- 作业结束-找到比标记文件更新的文件并对它们执行
chown
命令
示例:
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 数据集的替代方法
这个想法是以一种将数据集与其他作业区分开来的方式来分离、标记或标记数据集
方式一.作业创建独立的数据集集:
为每个 运行 创建一个新的作业专用文件夹:
- 在源代码中使用通用的库引用,例如
JOB
,但让它指向新文件夹
- 运行 作业,创建新数据集。
- 执行 post-作业调整
- 将新数据集移动到
PERM
,它们的永久存储位置
方式 2.作业来源依赖于 PERM
中的数据集,无法更改:
使用库路径串联:
- 在作业启动之前更改 libname
libname PERM ("<path-to-new-job-unique-folder">, "<path to actual PERM>")
;
- 新数据集将在串联的第一条路径中创建。
- Post-工作流程数据集如前所述
方式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; …
- Post作业,使用
PROC CONTENTS
或SQLDICTIONARY.TABLES
确定标签中有&JOB_TIMESTAMP的数据集。
方式 4。SAS 服务器上的作业 运行,标签无法更改
- 更新 JOB 源代码,以便作业创建的每个数据集都创建一个相应的元数据注释,其中包含 &JOB_TIMESTAMP.
- Post 作业,扫描 &JOB_TIMESTAMP 的元数据注释并调整匹配的那些。
方式 5.为作业创建的每个数据集创建 AUDIT 数据集
- 搜索 "Understanding an Audit Trail"
的帮助
- Post 职位搜索审核 table 职位标签
其他方式
- 为工作创建您自己的跟踪table
- 作业源必须改变,宏可以帮助加强一致性:
%macro jobtracker(data=, id=);
… insert into perm.jobtracker values ("&data", "&id") …
%mend;
…
%jobtracker(data=analysis1, id=&JOB_TIMESTAMP) %* manually track each table;
data analysis1;
…
- Post 作业,处理每个
PERM.JOBTRACKER
和 &JOB_TIMESTAMP
的数据集。
如果以上方法不适合您,请在问题中添加更多信息:
- 职位是如何启动的?
- 从时间上看,起点有多近?
- 运行并行有多少作业?
- 工作是否会在创建或依赖新数据集时发生冲突?
- 您是否完全控制应用的源代码和数据集选项?
我需要更改我的作业生成的每个数据集的所有者和权限。我需要将其包含在我的 post 处理过程中。我可以在我的 SAS 代码中使用 X 或管道使用 chown 命令来更改最新创建的数据集的权限。建议获取作业中创建的所有永久数据集列表的方法。
当你说"permanent datasets"时,你一定是指那些数据集存储在一个或多个地方。为什么不直接使用 filename test pipe "dir /b/s X:\xxxxxx\*.sas7dbat"
来获取列表?
没有 SAS on/off 选项 'journaling' 功能可以自动识别创建数据集的 runner/job。安装在大型机(大型机)操作系统中的 SAS,或者可能是 OpenVMS,可能会由 OS.
自动完成您知道创建新数据集时使用的库名称 <path>
吗?
一种方法依赖于 find
选项 -newer
-newer file
File was modified more recently than file. If file is a symbolic link and the -H option or the -L option is in effect, the modification time of the file it points to is always used.
所以你想
- 作业开始 - 创建标记文件
- 作业结束-找到比标记文件更新的文件并对它们执行
chown
命令
示例:
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 数据集的替代方法
这个想法是以一种将数据集与其他作业区分开来的方式来分离、标记或标记数据集
方式一.作业创建独立的数据集集:
为每个 运行 创建一个新的作业专用文件夹:
- 在源代码中使用通用的库引用,例如
JOB
,但让它指向新文件夹 - 运行 作业,创建新数据集。
- 执行 post-作业调整
- 将新数据集移动到
PERM
,它们的永久存储位置
方式 2.作业来源依赖于 PERM
中的数据集,无法更改:
使用库路径串联:
- 在作业启动之前更改 libname
libname PERM ("<path-to-new-job-unique-folder">, "<path to actual PERM>")
; - 新数据集将在串联的第一条路径中创建。
- Post-工作流程数据集如前所述
方式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; …
- Post作业,使用
PROC CONTENTS
或SQLDICTIONARY.TABLES
确定标签中有&JOB_TIMESTAMP的数据集。
方式 4。SAS 服务器上的作业 运行,标签无法更改
- 更新 JOB 源代码,以便作业创建的每个数据集都创建一个相应的元数据注释,其中包含 &JOB_TIMESTAMP.
- Post 作业,扫描 &JOB_TIMESTAMP 的元数据注释并调整匹配的那些。
方式 5.为作业创建的每个数据集创建 AUDIT 数据集
- 搜索 "Understanding an Audit Trail" 的帮助
- Post 职位搜索审核 table 职位标签
其他方式
- 为工作创建您自己的跟踪table
- 作业源必须改变,宏可以帮助加强一致性:
%macro jobtracker(data=, id=); … insert into perm.jobtracker values ("&data", "&id") … %mend; … %jobtracker(data=analysis1, id=&JOB_TIMESTAMP) %* manually track each table; data analysis1; …
- Post 作业,处理每个
PERM.JOBTRACKER
和&JOB_TIMESTAMP
的数据集。
如果以上方法不适合您,请在问题中添加更多信息:
- 职位是如何启动的?
- 从时间上看,起点有多近?
- 运行并行有多少作业?
- 工作是否会在创建或依赖新数据集时发生冲突?
- 您是否完全控制应用的源代码和数据集选项?