Я пытаюсь разделить MF PS на несколько наборов данных. например Если у меня есть набор данных, содержащий 600 записей, я хочу разделить его на 6 файлов по 100 записей в каждом. Можно ли это сделать с помощью сортировки JCL?
jcl sort для разделения набора данных мэйнфрейма
Ответы (4)
В приведенном ниже JCL используется DFSORT для равномерного разделения DD SOTRIN на 3 выходных набора данных (OUT1, OUT2 и OUT3), чтобы сделать это в 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 Руководство
Умные приемы DFSORT содержит множество полезных примеров и несколько других способов выделить записи из набора данных
SPLIT - это просто SPLIT, вы не можете связать его с числом.
SPLITBY = n будет чередовать n записей между каждым указанным набором данных OUTFIL. SPLIT - это то же самое, что SPLITBY = 1.
SPLIT1R = n будет выполнять только одно вращение (n записей будет записано в первый набор данных OUTFIL, затем n во второй OUTFIL и будет продолжаться до тех пор, пока не будет использован последний набор данных OUTFIL, который будет содержать любые оставшиеся записи для ввода, независимо от того, как многие.
OUTFIL FILES = OUT1 не допускается. Это должно быть OUTFIL FNAMES = (OUT1, OUT2, OUT3), SPLIT.
ЕСЛИ используется STATREC / ENDREC или INCLUDE / OMIT, OUTFIL SAVE может использоваться для создания файла для записей, которые не записываются ни в один из других наборов данных OUTFIL.
- КАРТА СОРТИРОВКИ Дойяна делит входной файл на выходной файл поровну. Если у нас есть 3 выходных файла, например, общее количество входных записей, разделенное на 3, будет количеством записей для каждого входного файла.
- Of cos мы можем указать количество, основанное на том, какое разделение должно произойти, как показано ниже. Он неявно разбивает входной файл на выходные файлы по 10000 записей каждый. Скажем, например, у нас есть 40000 записей во входном файле, и мы разделяем их на 3 выходных файла, тогда мы получим 10000 + 10000/3 записей в выходном файле.
OUTFIL FNAMES = (OUT1, OUT2, OUT3), SPLIT = 10000
- Короче говоря, мы можем использовать это, когда у нас нет ограничений на количество выходных записей. Когда у нас есть такие критерии при разделении, тогда поможет фрагмент кода ниже ...
СОРТИРОВАТЬ ПОЛЯ = КОПИРОВАТЬ
OUTFIL FILES = OUT1, ENDREC = 10000
OUTFIL FILES = 02, STARTREC = 10001, ENDREC = 20000 OUTFIL FILES = 03, STARTREC = 20001, ENDREC = 30000
- Наконец, если у нас более 30000 записей во входном файле, и мы не указали, что делать с этими записями, SORT не будет беспокоиться о них. Это означает, что последний выходной файл будет содержать только 10000 записей.
Надеюсь, я вам разъяснил. Вернитесь, если возникнут вопросы.
Предположим, вы не знаете, сколько записей находится в наборе данных, но хотите разделить записи как можно поровну между двумя наборами выходных данных. Вы можете использовать параметр SPLIT в OUTFIL, чтобы поместить первую запись в OUTPUT1, вторую запись в OUTPUT2, третью запись в OUTPUT1, четвертую запись в OUTPUT2 и так далее, пока у вас не закончатся записи. SPLIT разделяет записи по одной среди наборов данных, указанных FNAMES. Следующие операторы разделяют записи между двумя наборами данных OUTFIL: OPTION COPY OUTFIL FNAMES = (OUTPUT1, OUTPUT2), SPLIT С 17 входными записями результаты, полученные для OUTPUT1, следующие: Запись 01 Запись 03 Запись 05 Запись 07 Запись 09 Запись 11 Запись 13 Запись 15 Запись 17
Точно так же параметр SPLITBY = n OUTFIL разделяет записи n за раз среди наборов данных, указанных FNAMES. Следующие операторы разделяют записи по четыре между тремя наборами данных OUTFIL: OPTION COPY OUTFIL FNAMES = (OUT1, OUT2, OUT3), SPLITBY = 4