Form 1 of COMBINE produces its result by passing each record from leftrecset along with the record in the same ordinal position within rightrecset to the transform to produce a single output record. Grouping (if any) on the leftrecset is preserved. An error occurs if leftrecset and rightrecset contain a different number of records.
Important: Form 1 pairs records strictly by ordinal position. Matching global record counts alone may not be sufficient on distributed data. For LOCAL evaluation, each node or partition must have the same local number of LEFT and RIGHT rows; otherwise COMBINE fails because ordinal pairing cannot be completed locally.
Troubleshooting: If local ordinal alignment cannot be guaranteed, reshape the inputs before COMBINE so corresponding rows align per partition. A JOIN-based refactor is a common workaround.
Example:
inrec := RECORD
UNSIGNED6 uid;
END;
outrec := RECORD(inrec)
STRING20 name;
STRING11 ssn;
UNSIGNED8 dob;
END;
ds := DATASET([1,2,3,4,5,6], inrec);
i1 := DATASET([ {1, 'Kevin' },
{2, 'Richard'},
{5, 'Nigel' }],
{UNSIGNED6 uid, STRING10 name });
i2 := DATASET([ {3, '000-12-3462'},
{5, '000-12-8723'},
{6, '000-10-1002'}],
{UNSIGNED6 uid, STRING11 ssn });
i3 := DATASET([ {1, 19700117},
{4, 19831212},
{6, 20010101}],
{UNSIGNED6 uid, UNSIGNED8 dob});
j1 := JOIN(ds, i1, LEFT.uid = RIGHT.uid, LEFT OUTER, LOOKUP);
j2 := JOIN(ds, i2, LEFT.uid = RIGHT.uid, LEFT OUTER, LOOKUP);
j3 := JOIN(ds, i3, LEFT.uid = RIGHT.uid, LEFT OUTER, LOOKUP);
combined1 := COMBINE(j1, j2,
TRANSFORM(outRec,
SELF := LEFT;
SELF := RIGHT;
SELF := []),
LOCAL);
combined2 := COMBINE(combined1, j3,
TRANSFORM(outRec,
SELF.dob := RIGHT.dob;
SELF := LEFT),
LOCAL);
OUTPUT(combined1);
OUTPUT(combined2);