How to fix Teradata Parallel Transporter error: '2673 The source parcel length does not match data that was defined'

159 Views Asked by At

I am using Teradata Parallel Transport to select and insert data from tables in a SQL Server to identical tables in a Teradata database. When reviewing the Error Table after failure, I see error 2673 for several columns which is noted in Teradata's documentation as: '2673 The source parcel length does not match data that was defined' . This is happening for NVARCHAR to VARCHAR datatypes and INT to INTEGER. Example

How can I fix this error so that the TPT script executes properly? There are many other instances where the circumstances in other columns seem identical but they do not produce this error so I am unsure how to fix.

For context on these problem columns and their data:

  • Table 1 returns this error for a column with a SQL Source Column defined as NVARCHAR(100) being loaded to a Teradata target column defined as VARCHAR(100) CHARACTER SET LATIN CASESPECIFIC

  • Table 2 returns this error for a column with a SQL Source Column defined as NVARCHAR(50) being loaded to a Teradata target column defined as VARCHAR(50) CHARACTER SET LATIN CASESPECIFIC AND a column with a SQL Source Column defined as INT being loaded to a Teradata target column defined as INTEGER

You can see more code and how I am explicitly casting the NVARCHAR to VARCHAR here.

USING CHAR SET ASCII
DEFINE JOB JobName
DESCRIPTION 'Load data from SQL(tablename) to Teradata(tablename)'


(
  DEFINE OPERATOR Database_Commands()
  TYPE DDL
  ATTRIBUTES
  (
    VARCHAR TdpId = @Teradata_Connection,
    VARCHAR UserName = @Teradata_UserId,
    VARCHAR UserPassword = @Teradata_Password,
    VARCHAR Array ErrorList = ['2580'],
    VARCHAR PrivateLogName = 'ddllog.txt',
    VARCHAR Tracelevel='None',
    VARCHAR LogSQL = ''
 );
  
  /*Examples*/
  DEFINE SCHEMA SourceTableSchema
  (
     columnname      INTEGER,
     columnname2     VARCHAR(50),
     columnname3     VARCHAR(100),
     columnname4     VARCHAR(15),
     columnname4     BYTEINT    
  );
  
  
  DEFINE SCHEMA TargetTableSchema
  (
     columnname      INTEGER,
     columnname2     VARCHAR(50),
     columnname3     VARCHAR(100),
     columnname4     VARCHAR(15),
     columnname4     BYTEINT     
  );
  

  DEFINE OPERATOR ODBC_READER
  TYPE ODBC
  SCHEMA SourceTableSchema
  ATTRIBUTES
  (
      VARCHAR PrivateLogName = 'odbc_log.txt',  
      VARCHAR dsnName = 'SQLDatabaseName',                              
      VARCHAR UserName = @ODBC_UserId,        
      VARCHAR UserPassword = @ODBC_Password,
      VARCHAR TraceLevel = 'None',
      VARCHAR SelectStmt = @SQL 
  );
  
   
  DEFINE OPERATOR TD_LOADER()
  TYPE UPDATE
  SCHEMA TargetTableSchema
  ATTRIBUTES
  (
    VARCHAR TargetTable = @TargetTable,
    VARCHAR LogTable    = @ErrDatabase||'.'||@TargetTable||'_LT', 
    VARCHAR WorkTable   = @WorkDatabase||'.'||@TargetTable||'_WT',
    VARCHAR ErrorTable1 = @ErrDatabase||'.'||@TargetTable||'_ET',
    VARCHAR ErrorTable2 = @ErrDatabase||'.'||@TargetTable||'_UV',
    VARCHAR DateForm = 'IntegerDate',
    VARCHAR TdpId = @Teradata_Connection,
    VARCHAR UserName = @Teradata_UserId,
    VARCHAR UserPassword = @Teradata_Password,
    VARCHAR WorkingDatabase = @TargetDatabase,
    VARCHAR PrivateLogName = 'td_loader_log.txt'
  );

STEP RELEASE
  (
     APPLY
           ' release mload '|| @TargetDatabase ||'.'||@TargetTable ||'  ;'
     TO OPERATOR (Database_Commands());
   );


STEP Initialize
  (
     APPLY
           ' delete from '|| @TargetDatabase ||'.'||@TargetTable ||' '||@DeleteScope||' ;'
     TO OPERATOR (Database_Commands());
   );


STEP load_the_data
  (
    APPLY 
         ('INSERT INTO '|| @TargetDatabase ||'.'||@TargetTable||'
                            (   
                           
                             ...columnnames...

                            );'
          )
    TO OPERATOR (TD_LOADER)
       SELECT                      
                                   
              ...columnnames...
    
         FROM OPERATOR (ODBC_READER); 
  );
);

And this is the output for this failure in command line:

TD_LOADER: connecting sessions
TD_LOADER: preparing target table(s)
TD_LOADER: entering DML Phase
TD_LOADER: entering Acquisition Phase
ODBC_READER: sending SELECT request
ODBC_READER: data retrieval complete
Job step load_the_data terminated (status 4)
Job JOBNAME completed successfully, but with warning(s).
Job start: Fri Dec  1 13:35:37 2023
Job end:   Fri Dec  1 13:41:30 2023
ODBC_READER: Total Rows Exported:  266102
ODBC_READER: disconnecting sessions
ODBC_READER: Total processor time used = '1.54688 Second(s)'
TD_LOADER: entering Application Phase
ODBC_READER: Start : Fri Dec  1 13:35:45 2023
ODBC_READER: End   : Fri Dec  1 13:41:29 2023
TD_LOADER: Statistics for Target Table:  'TableName'
TD_LOADER: Rows Inserted: 0
TD_LOADER: Rows Updated:  0
TD_LOADER: Rows Deleted:  0
TD_LOADER: entering Cleanup Phase
TD_LOADER: Error Table Statistics for Target Table :   'TableName'
TD_LOADER: Total Rows in Error Table 1:   266102
TD_LOADER: Total Rows in Error Table 2:   0
TD_LOADER: disconnecting sessions
0

There are 0 best solutions below