You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Teradata Parallel Transporter错误2673:源数据包长度不匹配

修复TPT错误2673:源数据包长度与定义不匹配

错误原因分析

错误2673本质是源数据的实际传输长度和TPT Schema中定义的长度不匹配,你的场景里核心触发点有两个:

  • NVARCHAR转VARCHAR的字符集差异:SQL Server的NVARCHAR是双字节Unicode存储,而Teradata目标列是单字节LATIN字符集。TPT的ODBC Reader默认按Unicode读取源数据,但目标Schema定义的是单字节VARCHAR,导致长度计算偏差。
  • INT/INTEGER的类型映射偏差:SQL Server的INT类型通过ODBC驱动返回的元数据,和TPT中定义的INTEGER类型在数据长度或格式校验上存在不匹配,触发长度校验错误。

针对性修复方案

1. 修正NVARCHAR到VARCHAR的字符集处理

方案A:在SQL查询中显式转换

在@SQL对应的SELECT语句里,将SQL Server的NVARCHAR列强制转换为单字节VARCHAR,确保传输长度匹配:

SELECT 
    CAST(NVarcharColumn1 AS VARCHAR(100)) AS NVarcharColumn1,
    CAST(NVarcharColumn2 AS VARCHAR(50)) AS NVarcharColumn2,
    -- 其他列...
FROM SourceSQLTable

保持TPT的SourceTableSchema中对应列的VARCHAR(n)定义不变即可。

方案B:调整ODBC Reader的字符集属性

在ODBC_READER的属性中添加字符集配置,强制驱动以单字节格式读取数据:

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,
    -- 强制ODBC以ASCII字符集读取数据
    VARCHAR CharacterSet = 'ASCII',
    VARCHAR AddDefaultCharSet = 'Y'
);

2. 修复INT到INTEGER的类型匹配

方案A:显式转换SQL Server的INT类型

在SELECT语句中对INT列做显式转换,确保ODBC返回的元数据和TPT的INTEGER类型完全匹配:

SELECT 
    CAST(IntColumn AS INT) AS IntColumn,
    -- 其他列...
FROM SourceSQLTable

方案B:调整TPT Schema的类型定义

部分TPT版本对INT和INTEGER的处理存在细微差异,可尝试将SourceTableSchema中的INTEGER改为INT:

DEFINE SCHEMA SourceTableSchema
(
   columnname      INT, -- 替换原INTEGER定义
   columnname2     VARCHAR(50),
   columnname3     VARCHAR(100),
   -- 其他列...
);

3. 全局字符集配置修正

将脚本开头的字符集配置改为UNICODE,确保TPT在传输过程中正确处理Unicode到单字节的转换:

USING CHAR SET UNICODE -- 替换原ASCII配置
DEFINE JOB JobName
DESCRIPTION 'Load data from SQL(tablename) to Teradata(tablename)'

验证与排查建议

  • 查看错误表_ET中的ErrorFieldName列,定位具体出错列,针对性调整。
  • 将ODBC Reader的TraceLevel改为Low,查看日志确认源数据实际长度与Schema定义是否一致。
  • 用SELECT TOP 1 *测试单条数据加载,排查是否是特定行(如含特殊字符的NVARCHAR值)导致的问题。

内容的提问来源于stack exchange,提问作者DirtyDataDoneDirtCheap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:26:09