Сортировка jcl для разделения набора данных мэйнфреймов - PullRequest
3 голосов
/ 03 марта 2011

Я пытаюсь разделить MF PS на несколько наборов данных. например Если у меня есть набор данных, содержащий 600 записей, я хочу разделить его на 6 файлов по 100 записей в каждом. Возможно ли это сделать с помощью сортировки JCL?

Ответы [ 4 ]

4 голосов
/ 03 марта 2011

В приведенном ниже JCL используется DFSORT, чтобы равномерно разделить DD SOTRIN по 3 выходным DATASETS (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 имеет множество полезных примеров и несколько других способов разделить записи из набора данных

2 голосов
/ 22 января 2013

SPLIT - это просто SPLIT, вы не можете связать его с числом.

SPLITBY = n будет «вращать» n записей между каждым указанным набором данных OUTFIL. SPLIT - то же самое, что SPLITYBY = 1.

SPLIT1R = n будет выполнять только одно "вращение" (n записей будет записано в первый набор данных OUTFIL, затем в n во второй OUTFIL и будет продолжаться до тех пор, пока не будет использован окончательный набор данных OUTFIL, который будет содержать любые оставшиеся записи для вход, независимо от того, сколько.

OUTFIL FILES = OUT1 не допускается.

ЕСЛИ используя STATREC / ENDREC или INCLUDE / OMIT, OUTFIL SAVE можно использовать для создания файла для записей, которые не записаны ни в один из других наборов данных OUTFIL.

1 голос
/ 26 июня 2019

Предположим, вы не знаете, сколько записей в наборе данных, но вы хотите как можно более равномерно разделить записи между двумя наборами выходных данных. Вы можете использовать параметр OUTFIL SPLIT, чтобы поместить первую запись в OUTPUT1, вторую запись в OUTPUT2, третью запись в OUTPUT1, четвертую запись в OUTPUT2 и т. Д., Пока не закончится запись. SPLIT разделяет записи по одной среди наборов данных, указанных в FNAMES. Следующие операторы разделяют записи между двумя наборами данных OUTFIL: ВАРИАНТ КОПИЯ OUTFIL FNAMES = (OUTPUT1, OUTPUT2), SPLIT С 17 входными записями результаты, полученные для OUTPUT1: Запись 01 Запись 03 Запись 05 Запись 07 Запись 09 Запись 11 Запись 13 Запись 15 Запись 17

Аналогичным образом, параметр OUTFIL SPLITBY = n разделяет записи n за один раз среди наборов данных, указанных в FNAMES. Следующие операторы разделяют записи по четыре за три набора данных OUTFIL: ВАРИАНТ КОПИЯ OUTFIL FNAMES = (OUT1, OUT2, OUT3), SPLITBY = 4

1 голос
/ 30 апреля 2011
  • SORT CARD Deuian разбивает входной файл на выходной файл равным образом . Например, если у нас есть 3 выходных файла , , то общее количество входных записей, разделенное на 3, будет количеством записей каждого входного файла .
  • Из-за того, что мы можем указать количество, на основе которого должно произойти разделение, как показано ниже. Он неявно разбивает входной файл на выходные файлы по 10000 записей каждый. Например, у нас есть 40000 записей во входном файле, и мы делим их на 3 выходных файла, тогда мы получим 10000 + 10000/3 записей в выходном файле.

OUTFIL FNAMES = (OUT1, OUT2, OUT3), SPLIT = 10000

  • В двух словах, мы можем использовать его, когда у нас нет никаких ограничений на количество выходных записей. Когда у нас есть какие-то такие критерии при разбиении, то фрагмент кода ниже помогает ...

СОРТИРОВАТЬ ПОЛЯ = КОПИЯ
OUTFIL FILES = OUT1, ENDREC = 10000
OUTFIL ФАЙЛЫ = 02, STARTREC = 10001, ENDREC = 20000 OUTFIL FILES = 03, STARTREC = 20001, ENDREC = 30000

  • Наконец, если у нас более 30000 записей во входном файле, и мы не указали, что делать с этими записями, поэтому SORT не будет беспокоиться о них. Это означает, что последний выходной файл будет содержать только 10000 записей.

Надеюсь, я дал вам понять. Вернитесь в случае вопроса дальше.

...