March 01, 2013, 05:02 PM
AnnaRETL Flow not reporting on truncated data
Hello,
Here is the scenario; sometimes I receive source files with columns sizes larger than the original configuration setup in master data. During data load, some rows do not get loaded b/c there is truncation on data. There is no flag in Data Migrator to indicate that data was not loaded in its entirety due to truncation. Theonly way is to look through the log files. Data Migrator flow reads/processes only the
rows with column size fitting the master data specs and rpeorts the flow execution wuth return code 0 - but it is hardly a success. I tried using `Record Logging` feature that is available on the flow properties with attribute `Format Errors`; however that did nothing to capture truncated rows. Is there some method to flag the flow if ther eis truncation on the data? I know , I can setup master data with larger sizes, but I am looking for something that can be setup on a flow as a flag to indicate that some rows were not loaded due to truncation of data.
Any suggestions?
March 06, 2013, 05:04 PM
KerryHi Anna,
From our iWay manager: if you have not done so, please open a case with Customer Support Services for assistance. You may call 1-800-736-6130, or access online at
InfoResponse.
Cheers,
Kerry
March 08, 2013, 07:55 AM
dhagenWe have the same situation. Add this stored proc before and after the data flow:
-* Verify the process.
-DEFAULTH &&U_FILE='NONE'
-DEFAULTH &&CO = 'MAN'
-IF &&U_FILE NE 'NONE' GOTO :VERIFY;
-* Allocate a file to store source format problems.
-SET &&U_FILE_NAME = LOCASE(&&CO.LENGTH, &&CO, 'A&&CO.LENGTH') || '_emgfile' || &YYMD || EDIT(HHMMSS('A8'),'_99_$99_$99');
-SET &&U_FILE_EXT = &&U_FILE_NAME || '.text';
-SET &&U_FILE = 'baseapp/' || &&U_FILE_EXT ;
FILEDEF EMGFILE DISK &&U_FILE
SET EMGSRV=FILE
-RUN
-EXIT
-* job has finished running ... test to see if emgfile contains values
-:VERIFY
APP QUERY baseapp HOLD
TABLE FILE FOCAPPQ PRINT SIZE
WHERE FILENAME EQ '&&U_FILE_EXT';
ON TABLE HOLD AS T_FSIZE
END
-RUN
-READFILE T_FSIZE
-RUN
-SET &&KILL_RPC = IF &SIZE EQ 0 THEN 'N' ELSE 'Y';
-SET &MSG1 = IF &&KILL_RPC EQ 'N' THEN ' ' ELSE '-TYPE (FOC0209) Source format errors, check following file for details';
-SET &MSG2 = IF &&KILL_RPC EQ 'N' THEN ' ' ELSE '-TYPE (FOC0209) File: ' | &&U_FILE;
-SET &FDEL = IF &&KILL_RPC EQ 'Y' THEN ' ' ELSE 'APP DELETEF BASEAPP &&U_FILE_NAME TEXT';
&MSG1.EVAL
&MSG2.EVAL
&FDEL.EVAL
-EXIT
For every row that gets removed from the query because of truncation, a line is added to the EMGFILE. If the EMGFILE has any values, then the process will set the KILL_RPC flag.
Side note: You might want to break the above into 2 procedures just in case you run multiple data flows - as RPC - in a single process flow.