跳转至

Vertica 集成 IBM InfoSphere DataStage

本文整理自 Vertica 官方 DataStage 连接指南,补充了配置项原理解析和故障排查根因分析。

关于 Vertica 连接指南

Vertica 连接指南提供将第三方合作伙伴产品连接到 Vertica 的基本说明,基于 Vertica 与合作伙伴产品的实际测试。

最新测试版本

组件 版本
IBM InfoSphere DataStage 11.7.1
DataStage 平台 Windows 10 Pro(服务器 + 客户端)
Vertica 客户端 JDBC 23.4 / ODBC 23.4
Vertica 服务器 Vertica Analytic Database 23.4

1. DataStage 概述

IBM InfoSphere DataStage 是一款企业级 ETL 工具,用于将源系统数据集成并转换为数据市场和数仓。其客户端包含四个核心组件:

组件 功能 使用场景
Administrator Client 项目管理 创建项目、配置环境变量、管理用户权限
Designer Client 作业设计 拖拽式设计 ETL 作业(Pipeline),定义数据流和转换逻辑
Director Client 作业运维 运行、监控、调度作业,查看执行日志
Metadata Asset Manager 元数据导入 通过 JDBC 批量导入数据库表定义(Web 控制台)

DataStage 与 Vertica 的连接方式:DataStage 同时支持 ODBCJDBC 两种通道连接 Vertica。ODBC 用于在 Designer Client 中直接导入表定义;JDBC 通过 Metadata Asset Manager 批量导入元数据。


2. 环境准备

2.1 安装 DataStage

  1. IBM Support 下载对应操作系统的 DataStage 安装包
  2. 参阅 IBM Knowledge Center 中对应版本的安装说明
  3. 按说明完成 DataStage 服务器端和客户端的安装

2.2 安装 Vertica 客户端驱动

DataStage 需要同时安装 JDBCODBC 两种 Vertica 驱动:

驱动 用途 安装方式
JDBC Metadata Asset Manager 元数据导入 .jar 复制到 DataStage 外部库目录
ODBC Designer Client 表定义导入 + 作业运行时连接 按标准 ODBC 安装 + 创建 DSN

安装步骤:

  1. 访问 Vertica Client Drivers 页面
  2. 下载与 DataStage 操作系统架构(32/64 位)和 Vertica 服务器版本兼容的驱动包
  3. JDBC:按 Installing the Client Drivers and Tools on Windows 说明安装,将 .jar 文件拷贝到 DataStage 外部库目录
  4. ODBC:按 Creating an ODBC Data Source Name (DSN) 创建系统 DSN

兼容性提示:Vertica 驱动向前兼容,详见 Client Driver and Server Version Compatibility


3. 项目环境变量配置

在创建 DataStage 项目之前,必须配置与 Vertica 交互相关的环境变量。这些变量影响数据传输块大小、并行度、超时和调试信息。

3.1 配置入口

  1. 打开 Administrator ClientIBM InfoSphere DataStage and QualityStage Administrator
  2. 输入凭据登录
  3. 选择 Projects 选项卡 → 选择项目 → PropertiesEnvironment

3.2 环境变量一览

并行传输性能

变量 分类 推荐值 作用
APT_DEFAULT_TRANSPORT_BLOCK_SIZE Parallel 10000000(≈10 MB) 数据传输块大小(字节),增大可避免 "String data right truncation" 错误
APT_IO_MAXIMUM_OUTSTANDING Parallel 2097152 最大未完成 I/O 请求数,控制并行读写吞吐量
APT_USE_IPV4 Parallel True 强制使用 IPv4 协议(避免 IPv6 环境下的连接问题)

超时控制

变量 分类 推荐值 作用
APT_PM_CONDUCTOR_TIMEOUT User-Defined 320 Conductor 节点超时时间(秒),复杂作业需要较长超时
APT_PM_PLAYER_TIMEOUT User-Defined 120 Player 节点超时时间(秒)

调试与报告

变量 分类 推荐值 作用
APT_PM_SHOW_PIDS Parallel > Reporting True 显示进程 PID,便于故障排查
APT_PM_PLAYER_TIMING Parallel > Reporting True 显示各 Player 节点的执行耗时
APT_PM_SHOWRSH Parallel > Reporting True 显示远程 Shell 命令,便于调试
APT_DUMP_SCORE Parallel > Reporting True 输出作业执行计划的 Score 信息
APT_STARTUP_STATUS Parallel > Reporting True 显示启动阶段状态信息

其他

变量 分类 推荐值 作用
APT_PMCONDUCTOR_HOSTNAME Parallel 当前机器名 指定 Conductor 节点主机名

4. 连接 DataStage 到 Vertica

DataStage 提供两条连接到 Vertica 的路径,各自有不同的适用场景。

4.1 ODBC 通道

ODBC 用于在 Designer Client 中导入表定义,以及在 Parallel Job 的 ODBC Connector 阶段中读写 Vertica。

4.1.1 配置 ODBC DSN

⚠️ 重要:DataStage Client 使用 32 位 ODBC DSN,必须通过 32 位 ODBC 数据源管理器配置。

  1. 打开 Control Panel → Administrative Tools → ODBC Data Source Administrator (32-bit)
  2. 创建 System DSN,选择 Vertica 驱动
  3. 填入服务器 IP、端口(默认 5433)、数据库名、用户名
  4. 点击 Test Connection 验证连通性

4.1.2 通过 ODBC 导入表定义

  1. 在 Designer Client 中选择 Import → Table Definitions → ODBC Table Definitions
  2. 从 DSN 下拉列表选择对应的数据源名称
  3. 输入数据库凭据,点击 OK
  4. 在 Import Meta Data 窗口中:
  5. 选择 DSN
  6. 输入凭据
  7. 勾选所需表,点击 Import
  8. DataStage 验证 ODBC 配置并列出该数据库上的表,导入的表定义显示在 Table Definitions 文件夹中

4.1.3 DSN 列表为空的处理

如果 Import Meta Data 页面的 DSN 下拉列表为空,检查 DSHOME/Projects 目录下的 uvodbc.config 文件,确保包含正确的 DSHOME 路径:

DSHOME=C:\IBM\InformationServer\Server\DSEngine

4.2 JDBC 通道

JDBC 通过 Metadata Asset Manager(Web 控制台)批量导入 Vertica 的表和视图定义。

4.2.1 配置 JDBC 连接

编辑 DSHOME 目录下的 isjdbc.config 文件(Windows 上默认为 C:\IBM\InformationServer\Server\DSEngine\isjdbc.config),追加 Vertica JDBC 驱动的类路径:

CLASSPATH=/opt/vertica/vertica-jdbc-23.4.0.jar;
CLASS_NAMES=com.vertica.jdbc.Driver;

确保 isjdbc.config 文件对 DataStage 服务账户(如 dsadm)具有读取权限。

4.2.2 通过 Metadata Asset Manager 导入元数据

  1. 浏览器访问 Metadata Asset Manager:https://<server-IP>:<port>/ibm/iis/imam/console
  2. 登录后,点击 Import → New Import Area
  3. 填写 Import Area 名称,选择 Metadata Interchange Server
  4. 选择连接器:IBM → JDBC Connector
  5. 创建新的数据连接:
  6. Name:连接名称
  7. URLjdbc:vertica://<hostname>:5433/<db_name>
  8. User name / Password:数据库凭据
  9. 点击 Test Connection 验证
  10. 选择要导入的资产(表和视图),可按 schema 名称或表名过滤
  11. 选择目标主机和数据库,提供导入描述
  12. 选择 Express ImportManaged Import,点击 Import
  13. 导入完成后,在 Designer Client 中通过 Repository → Metadata Sharing → Create Table Definition from shared Table 创建表定义

5. 关键注意事项

5.1 必须使用 Parallel Job

⚠️ 创建 DataStage 作业时,必须使用 Parallel Job 类型

  • Parallel Job:同时包含 ODBC 和 JDBC 连接器,支持并行数据处理
  • Serial Job:仅包含 ODBC 连接器,无 JDBC 支持,不适合 Vertica 的数据量级

连接 Vertica 时,在 Stage 属性中从 Database 下拉菜单选择 ODBC 或 JDBC 连接器。

5.2 Transport Block Size 的重要性

APT_DEFAULT_TRANSPORT_BLOCK_SIZE 是影响 Vertica 数据传输稳定性的最关键参数:

  • 默认值较小,写入宽行(如 LONG VARCHAR)时可能触发 "String data right truncation" 错误
  • 推荐值 10000000(10 MB),可有效避免此问题
  • 此参数控制的是 DataStage 内部各 Stage 之间传输数据块的缓冲区大小

5.3 LOB 数据的 Array Size 限制

读取 LOB(Large Object)类型字段时,ODBC Connector 阶段的 Array Size 必须设为 1。否则会报错:

The array size must be set to 1 when reading LOBs

6. 故障排查

6.1 String Data Right Truncation(数据截断)

错误信息

ODBC function "SQLPutData()" reported: SQLSTATE = 22001: Native Error Code = 10,170:
Msg = [Vertica][ODBC] (10170) String data right truncation on data from data source

根因:DataStage 传输块大小不足以容纳宽列数据,导致字符串右侧被截断。

解决:将 APT_DEFAULT_TRANSPORT_BLOCK_SIZE 设置为 10000000(10 MB)。详见第 3.2 节环境变量配置。


6.2 ODBC Connector Array Size 与 LOB 不兼容

错误信息

ODBC_Connector_0,0: The array size must be set to 1 when reading LOBs

根因:ODBC Connector 的 Array Size 参数用于批量获取行以提高吞吐量,但 LOB 类型不支持批量读取。

解决:在 DataStage Designer 中,将 ODBC Connector 阶段的 Array Size 属性值改为 1


6.3 DSN 下拉列表为空

现象:在 Import Meta Data (ODBC) 页面,DSN 下拉列表不显示任何值。

根因uvodbc.config 文件中缺少正确的 DSHOME 路径配置。

解决:编辑 DSHOME/Projects 目录下的 uvodbc.config 文件,添加:

DSHOME=C:\IBM\InformationServer\Server\DSEngine


6.4 JDBC 连接权限问题

现象:使用 JDBC 访问 Vertica 时报错。

根因:DataStage 服务账户(dsadm)没有 isjdbc.config 文件的读取权限。

解决:为 dsadm 用户或所有用户赋予 isjdbc.config 的读取权限。文件位于 DSEngine 目录(如 C:\IBM\InformationServer\Server\DSEngine\isjdbc.config)。


6.5 NUMERIC 精度超限(Pxbridge 错误)

错误信息

Error in "pxbridge" operator: Parsing parameters "1024,0" for schema type "decimal":
Precision must be > 0 and <= 255, got: "1024"

根因:Vertica 的 NUMERIC 类型支持最高 1024 位精度,但 DataStage 的 pxbridge 组件限制精度不超过 255。

解决:修改源表 DDL,将 NUMERIC 列的精度降到 1-255 范围内。


6.6 SQLGetPrivateProfileString 错误

现象:ODBC 驱动无法读取配置文件,通常在 Linux 环境下出现。

根因:Vertica ODBC 驱动期望在 ErrorMessagePath(默认 /opt/vertica/lib64)下找到 en-US 语言目录。

解决:在 /opt/vertica/lib64 目录下创建 en-US 子目录。


7. 已知数据类型限制

7.1 ODBC 通道限制

数据类型 限制表现 影响评估
TIME 不显示毫秒 低 — 通常 ETL 场景不依赖毫秒精度
TIMESTAMP 写入时不显示毫秒 中 — 如需精确时间戳需转换格式
TIMETZ / TIMESTAMPTZ 不显示毫秒和时区偏移 中 — 时区信息丢失,需应用层补偿
NUMERIC 精度上限 255 位 中 — 大多数场景精度足够
LONG VARBINARY (8 MB) / LONG VARCHAR (32 MB) 报错 "record too big to fit in a block" — 需调整 Block Size 或拆分数据
INTERVAL 系列 显示为未知数据类型 — 无法直接导入 INTERVAL 列
UUID 显示为未知数据类型 低 — 可转为 VARCHAR 处理

7.2 JDBC 通道限制

数据类型 限制表现 影响评估
INTERVAL 系列 执行作业时报 "Driver does not support" — JDBC 通道完全不支持 INTERVAL
TIME 不显示毫秒
TIMETZ / TIMESTAMPTZ 不显示毫秒和时区偏移
NUMERIC 精度上限 255 位
LONG VARBINARY (8 MB) / LONG VARCHAR (32 MB) 尝试显示数据时界面无响应 — 实际不可用

7.3 限制应对策略

受限类型 推荐处理方式
INTERVAL 在 Vertica 侧转换为 NUMERIC 或 VARCHAR 再导入
TIMETZ / TIMESTAMPTZ 转换为 UTC 时间戳 + 独立的时区列,或统一使用 TIMESTAMP
LONG VARCHAR / LONG VARBINARY 增大 APT_DEFAULT_TRANSPORT_BLOCK_SIZE;或拆分为多个小字段
UUID 转为 VARCHAR(36)
TIME 毫秒精度 拆分秒和毫秒为两列,或转 NUMERIC 表示

8. 交付检查清单

在实际项目中交付 DataStage 集成 Vertica 时,建议逐项确认:

环境层

  • [ ] DataStage 服务器和客户端已安装(版本 ≥ 11.7)
  • [ ] Vertica JDBC 驱动 .jar 已放入 DataStage 外部库目录
  • [ ] Vertica ODBC 驱动已安装,32 位 System DSN 已创建并通过 Test Connection
  • [ ] isjdbc.config 已配置 CLASSPATH 和 CLASS_NAMES
  • [ ] isjdbc.config 对 DataStage 服务账户可读

项目配置层

  • [ ] 项目环境变量已按第 3.2 节配置(尤其 APT_DEFAULT_TRANSPORT_BLOCK_SIZE=10000000
  • [ ] uvodbc.configDSHOME 路径正确
  • [ ] Designer Client 可正常登录并连接项目

连接层

  • [ ] ODBC 表定义导入成功(目标表出现在 Table Definitions 文件夹中)
  • [ ] JDBC Metadata Asset Manager 导入成功(Web 控制台可见导入资产)
  • [ ] 作业类型为 Parallel Job(非 Serial Job)

数据验证层

  • [ ] 小批量数据测试读写正常
  • [ ] INTERVAL / TIMETZ 等受限类型已按要求转换
  • [ ] LOB 类型字段的 Array Size 已设为 1
  • [ ] 大批量数据写入无 "String data right truncation" 错误

总结

DataStage 与 Vertica 的集成的关键要点:

  1. 双通道并存:ODBC 用于 Designer Client 直连和作业运行,JDBC 用于 Metadata Asset Manager 批量元数据导入,两者互为补充
  2. Block Size 是头号关键参数APT_DEFAULT_TRANSPORT_BLOCK_SIZE=10000000 几乎每次交付都需要设置,否则 LONG VARCHAR 等宽列写入必定失败
  3. 作业类型务必选 Parallel:Serial Job 不支持 JDBC 且性能受限
  4. 数据类型映射是集成工作的主要工作量:INTERVAL、TIMETZ、UUID 等类型需要提前规划转换策略
  5. 32 位 ODBC 管理器是 Windows 平台上最容易踩的坑:必须使用 32 位版本配置 DSN,64 位 DataStage 客户端内部仍使用 32 位 ODBC

原文来源:https://www.vertica.com/kb/DataStageCG_HTML/Content/Partner/DataStageCG_HTML.htm