jcl排序来划分大型机数据集

时间:2011-03-03 08:11:37

标签: sorting mainframe jcl

我试图将MF PS分成几个数据集。 例如如果我有一个包含600个recs的数据集,我想把它分成6个文件,每个文件有100个记录。是否可以使用JCL排序?

4 个答案:

答案 0 :(得分:4)

下面的JCL使用DFSORT在3个输出DATASETS(OUT1,OUT2和OUT3)上均匀地分割DD SOTRIN,在6个中添加另外3个输出DD语句并将它们添加到FNAMES语句中。

//SPLIT EXEC PGM=ICEMAN  
//SYSOUT DD SYSOUT=*  
//SORTIN DD DSN=Y897797.INPUT1,DISP=OLD  
//OUT1 DD DSN=Y897797.SPLIT1,DISP=(NEW,CATLG),  
// SPACE=(CYL,(5,5)),UNIT=SYSDA  
//OUT2 DD DSN=Y897797.SPLIT2,DISP=(NEW,CATLG),  
// SPACE=(CYL,(5,5)),UNIT=SYSDA  
//OUT3 DD DSN=Y897797.SPLIT3,DISP=(NEW,CATLG),  
// SPACE=(CYL,(5,5)),UNIT=SYSDA  
//SYSIN DD *  
SORT FIELDS=(21,5,FS,A)  
OUTFIL FNAMES=(OUT1,OUT2,OUT3),SPLIT  
/*  

SORT FIELDS =(21,5,FS,A)是你想要排序的sortint数据集,下面是这个字段声明的意思

21要开始分类的字段
5要分类的字段长度
FS浮动标志(签名数字)
升序

DFSORT Getting Started Manual
Smart DFSORT Tricks有许多有用的示例和其他几种将记录从数据集中分离出来的方法

答案 1 :(得分:2)

SPLIT只是SPLIT,您无法将其与数字相关联。

SPLITBY = n将"旋转" n指定的每个OUTFIL数据集之间的记录。 SPLITY与SPLITYBY = 1相同。

SPLIT1R = n只会执行一次"旋转" (n个记录将被写入第一个OUTFIL数据集,然后是n到第二个OUTFIL并继续这样,直到使用最终的OUTFIL数据集,它将包含输入的任何剩余记录,无论多少。

OUTFIL FILES = OUT1不允许。

如果使用STATREC / ENDREC或INCLUDE / OMIT,OUTFIL SAVE可用于为未写入任何其他OUTFIL数据集的记录建立文件。

答案 2 :(得分:1)

  • Deuian的SORT CARD将输入文件拆分为输出文件同等。例如,如果我们有 3个输出文件,那么总输入记录除以3将是每个输入文件的记录数
  • 我们可以根据应该发生的分割来指定计数,如下所示。它隐式地将输入文件拆分为每个输出文件10000条记录。比方说,我们在输入文件中有40000条记录,我们将它们分成3个输出文件,然后我们将在输出文件中获得10000 + 10000/3条记录。
  

OUTFIL   FNAMES =(OUT1,OUT2,OUT3),SPLIT = <强> 10000

  • 简而言之,当我们对输出记录计数没有任何限制时,我们可以使用它。当我们在拆分时有任何这样的标准时,那么下面的代码就会有帮助......
  

SORT FIELDS = COPY
  OUTFIL FILES = OUT1,ENDREC = 10000
  OUTFIL   FILES = 02,STARTREC = 10001,ENDREC = 20000   OUTFIL   FILES = 03,STARTREC = 20001,ENDREC = 30000

  • 最后,如果我们在输入文件中有超过30000条记录,并且我们没有指定对这些记录做什么,那么SORT就不会为此烦恼。意味着最后一个输出文件只保存10000条记录。
希望我能让你清楚。请进一步回答问题。

答案 3 :(得分:0)

假设您不知道一个数据集中有多少条记录,但是您希望在两个输出数据集之间尽可能平均地划分记录。您可以使用OUTFIL的SPLIT参数将第一条记录放入OUTPUT1,将第二条记录放入OUTPUT2,将第三条记录放入OUTPUT1,将第四条记录放入OUTPUT2,依此类推,直到记录用完。 SPLIT一次将记录分割为FNAMES指定的数据集。以下语句将记录分为两个OUTFIL数据集:   选件复制   OUTFIL FNAMES = {OUTPUT1,OUTPUT2),拆分 通过17条输入记录,为OUTPUT1生成的结果为: 记录01 记录03 记录05 记录07 记录09 记录11 记录13 记录15 记录17

类似地,OUTFIL的SPLITBY = n参数一次将记录n拆分为FNAMES指定的数据集。以下语句在三个OUTFIL数据集之间一次将记录分割成四个:   选件复制   OUTFIL FNAMES = {OUT1,OUT2,OUT3),SPLITBY = 4