简介:这份文档面向使用 SAP Data Services 进行数据集成的开发与运维人员,聚焦于如何将 MySQL 数据库接入 Data Services 平台,解决异构数据源连接配置与元数据导入的实际问题,适合具备一定 ETL 基础、需要打通 MySQL 数据链路的初中级技术人员参考。资源包共 1 个 docx 文件,约 1.43MB,以图文步骤形式组织内容,围绕 Data Store 创建、ODBC 连接配置、连接测试、表元数据导入及数据查看等环节展开,并提示了服务启动、版本兼容与账号安全等注意事项。目前已有 1624 人学习下载,读者可据此对照完成 MySQL 数据源的接入配置,理解元数据导入与表结构查看的完整流程,减少连接调试中的反复试错,为后续数据抽取、转换与加载任务打下基础。
1. 从一次 ETL 任务卡壳说起:SAP Data Services 连 MySQL 到底难在哪
上周帮一个做数仓的朋友排查问题,他的 ETL 任务在 SAP Data Services 里跑了一整天,日志里反复报连接超时,可 MySQL 客户端明明能连上。折腾半天才发现,问题出在 Data Services 走的是 ODBC 通道,而他那台机器上装的 MySQL ODBC 驱动版本和 Data Services 的位数对不上——32 位的 Designer 配了 64 位的驱动,界面里点 Test 能过,真正跑作业就翻车。这个场景其实很典型:SAP Data Services 作为老牌数据集成工具,连接 MySQL 并不是点两下就完事,中间隔着 Data Store 配置、ODBC 数据源、驱动位数、元数据导入好几道关卡。这篇笔记就把这条链路拆开,从建 Data Store 到把表元数据导进来、再到验证数据能不能读,一步步走一遍,顺带把几个容易踩的坑标出来。适合正在用 Data Services 做数据抽取、需要把 MySQL 当源库或目标库的从业者,新手可以照着复现,熟手可以对照检查自己的配置边界。
2. 建 Data Store 之前:先把 ODBC 这条链路理清楚
2.1 为什么 Data Services 连 MySQL 要绕道 ODBC
SAP Data Services 原生支持的数据库接口里,MySQL 并不是一等公民。它连接外部数据库的主流方式是通过 ODBC 驱动做桥接,也就是说 Data Services 本身不直接跟 MySQL 的通信协议打交道,而是把连接请求交给操作系统里的 ODBC 驱动管理器,再由驱动管理器转给 MySQL 的 ODBC 驱动。这个设计带来的直接后果是:你在 Data Services 界面里填的服务器地址、端口、用户名密码,最终都要落到一个 ODBC 数据源(DSN)上,DSN 配错了,界面里填得再对也白搭。
理解这一点很关键,因为它决定了排错的顺序。很多人一上来就在 Data Services 的 Data Store 属性页里反复改参数,改完点 OK 报错,再改再报,其实问题根本不在那一页,而在操作系统的 ODBC 管理器里。常见做法是先把 ODBC 数据源单独配好、单独测通,再回到 Data Services 里引用它。这个顺序反了,就会陷入“界面报错但不知道错在哪一层”的黑匣子状态。
还有一个容易被忽略的点是位数匹配。Data Services Designer 有 32 位和 64 位两种安装形态,ODBC 驱动管理器也分 32 位和 64 位两个入口。32 位的 Designer 只能看到 32 位 ODBC 管理器里配的 DSN,64 位的同理。如果你在 64 位管理器里配了 DSN,却用 32 位 Designer 去连,界面上可能根本找不到那个 DSN,或者找到了但测试时报驱动加载失败。这个坑我在不同环境里见过不止一次,血泪经验就是:动手之前先确认 Designer 的位数,再去对应的 ODBC 管理器里操作。
2.2 动手前要确认的三件事
第一件是 MySQL 服务本身的状态。听起来像废话,但实际排错时确实遇到过服务没起、端口被防火墙挡、或者只监听了 localhost 导致远程连不上的情况。在服务器上先用命令行客户端连一次,确认库和表都在,账号有对应权限,这一步花两分钟,能省掉后面半小时的瞎猜。
第二件是 ODBC 驱动的版本。MySQL 官方提供 Connector/ODBC 驱动,安装时要注意选对位数,并且尽量选和 Data Services 版本兼容的驱动版本。驱动太新或太旧都可能出现握手失败、字符集乱码、或者某些数据类型识别不了的问题。我一般会先在测试机上用官方驱动装一遍,确认 Data Store 能正常建、表能正常导入,再推到生产环境,避免直接在生产机上试错。
第三件是账号权限。Data Services 导入元数据时需要读取 information_schema 里的表结构信息,跑作业时还需要对目标表有增删改查权限。如果只给了某几张业务表的 SELECT 权限,元数据导入阶段可能就卡住,或者导进来之后发现字段类型映射不对。稳妥的做法是给 Data Services 单独建一个账号,按最小权限原则授权,但要把元数据读取所需的权限留足。
提示:ODBC 数据源分“用户 DSN”和“系统 DSN”两种。用户 DSN 只对当前登录用户可见,系统 DSN 对所有用户可见。如果 Data Services 是以服务方式运行的,建议配系统 DSN,否则服务账号可能看不到你配的用户 DSN。
3. 一步步建 Data Store 并导入表元数据
3.1 创建 MySQL 类型的 Data Store
打开 Data Services Designer,输入连接信息登录后,在主界面右下方找到 Data Store 标签页。在空白处右键新建,或者从菜单里走创建流程,都会弹出 Data Store 的配置窗口。这里第一件要选对的是数据库类型,下拉里选 MySQL,选错类型后面填的参数项都会对不上。
配置窗口里需要填的典型参数包括 Data Store 名称、服务器地址、端口、数据库名、用户名和密码。名称建议按“源库_业务域”这种规则起,后面在作业里引用时一眼能认出来。服务器地址填 MySQL 所在主机的 IP 或主机名,端口默认 3306,如果改过就填实际端口。数据库名填你要连的那个 schema,不要填成实例名。用户名密码就是前面准备好的那个专用账号。
填完之后先别急着点 OK,因为这一页的参数最终要跟 ODBC 数据源对齐。有些版本的界面里会有一个 ODBC 数据源名称的字段,需要填你在 ODBC 管理器里配好的 DSN 名字;有些版本则是通过后面的 ODBC Admin 按钮跳转过去配。不管哪种形态,核心逻辑是一样的:Data Store 这一层是逻辑配置,ODBC 那一层是物理连接,两边必须指向同一个 MySQL 实例和同一个库。
3.2 配 ODBC 数据源并做连通性测试
在 Data Store 配置窗口里找到 ODBC Admin 入口,点进去会打开操作系统的 ODBC 数据源管理器。切到对应的标签页(用户 DSN 或系统 DSN),点 Add,从驱动列表里选 MySQL 的 ODBC 驱动。如果列表里没有,说明驱动没装或者位数不对,回到 2.1 节说的位数问题去排查。
添加 DSN 的窗口里要填 Data Source Name、TCP/IP Server、Port、User、Password、Database。Data Source Name 就是前面说的 DSN 名字,建议和 Data Store 名称保持一致或有关联,方便对照。TCP/IP Server 填 MySQL 主机地址,Port 填 3306 或实际端口。User 和 Password 填专用账号。Database 填目标 schema。填完点 Test,弹出连接成功的提示才算这一步过了。
这里有个细节值得说:Test 成功只代表 ODBC 这一层通了,不代表 Data Services 一定能用。因为 Test 走的是驱动自己的握手流程,而 Data Services 在导入元数据和跑作业时还会做额外的类型探测和字符集协商。所以 Test 过了之后,还要回到 Data Store 页面点 OK,看 Data Services 自己能不能接受这套配置。如果 ODBC Test 过但 Data Store 点 OK 报错,问题多半在字符集或驱动版本兼容性上,可以试着在 DSN 的高级选项里调整字符集参数。
# 在 Linux 环境下可以用 isql 或 odbcinst 检查 DSN 是否注册成功 odbcinst -q -d # 列出已安装的 ODBC 驱动 odbcinst -q -s # 列出已配置的数据源 isql -v <DSN_NAME> <USER> <PASSWORD> # 用命令行直接测 DSN 连通性上面这几条命令适合在服务器端排查。odbcinst -q -d看驱动装没装、名字对不对;odbcinst -q -s看 DSN 注册在哪个配置文件里;isql -v直接拿 DSN 名字、账号、密码去连,能连上会进到 SQL 交互界面,连不上会打印具体的驱动错误码。比起在图形界面里反复点 Test,命令行给出的错误信息更细,定位问题更快。参数上注意isql的 DSN 名字要和odbcinst -q -s列出来的一致,大小写敏感。
3.3 导入表元数据并验证数据可读
Data Store 建好、点 OK 通过之后,在 Data Store 节点上双击展开,能看到 Tables 这一层。双击 Tables,右侧面板会列出 MySQL 库里已有的表。如果这里列不出来,说明元数据读取权限不够,或者库名填错了,回到 2.2 节检查账号权限。
选中需要导入的表,右键选 Import,Data Services 会把这些表的元数据(表名、字段名、字段类型、长度、是否可空等)拉进本地仓库。导入完成后,在 Data Store 的 Tables 下面就能看到这些表节点。双击其中一张表,比如示例里的 dimcustomer,能看到字段设计信息;右键选 View data,能直接预览表里的数据行。View data 这一步很关键,它是端到端验证的最后一环:元数据导入成功只说明结构读到了,View data 能出数据才说明连接、权限、字符集整条链路都通了。
导入时有个选择要注意:是导入全部表还是只导需要的表。表多的时候全导会让本地仓库膨胀,后续找表也费劲;只导需要的表则要确保作业里引用的表都在。我一般按业务域分批导,一个 Data Store 对应一个业务域,表数量控制在可维护的范围内。另外,元数据导入是一次性快照,MySQL 那边表结构改了之后,Data Services 里不会自动同步,需要重新 Import 一次,这一点在表结构频繁变更的项目里要提前约定好流程。
4. 连接建好之后:作业里怎么用、参数怎么调
4.1 在数据流里引用 MySQL 表
Data Store 和元数据准备好之后,真正干活是在数据流(Data Flow)里。新建一个数据流,从左侧对象库把 MySQL 的表拖进来当源,或者把目标表拖进来当写入口。拖进来的时候 Data Services 会校验这个表属于哪个 Data Store,如果 Data Store 连接失效,这里会直接报错,所以数据流跑不通时先回头检查 Data Store 状态。
源表和目标表的字段映射要注意类型对应关系。MySQL 的某些类型在 Data Services 里没有完全等价的映射,比如无符号整数、枚举、JSON 类型,导入元数据时可能被映射成字符串或近似类型。如果作业里对这些字段做数值计算或条件判断,映射不对会导致结果偏差。稳妥的做法是导入元数据后逐字段核对一遍,尤其是参与计算的字段,必要时在数据流里加转换步骤做显式类型转换。
4.2 批量作业的连接参数与性能取舍
跑批量抽取时,连接层面的参数对性能影响不小。ODBC 驱动通常有行预取(row prefetch)相关的选项,适当调大能减少网络往返次数,但调太大又占内存。Data Services 侧的数据流也有提交频率、并行度这些参数,跟 MySQL 的连接数要匹配。如果并行度开得高但 MySQL 的 max_connections 不够,作业跑到一半就会报连接数超限。
一个实用的做法是先在测试环境用小批量数据跑通,观察作业日志里的连接建立次数和单批耗时,再逐步调并行度和预取参数。不要一上来就在生产环境开高并行,连接风暴打满数据库的后果比慢一点严重得多。另外,抽取大表时建议在 MySQL 侧按时间或主键做分批,Data Services 侧配合增量条件,避免单次全表扫描把源库拖慢。
-- 在 MySQL 侧确认账号权限和表结构,导入元数据前先跑一遍 SHOW GRANTS FOR 'etl_user'@'%'; SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'your_schema' AND TABLE_NAME = 'dimcustomer';上面两条 SQL 用来做导入前的自查。SHOW GRANTS确认账号有没有元数据读取和业务表访问权限;查information_schema.COLUMNS能看到字段的实际类型和长度,拿这个结果跟 Data Services 导入后的元数据对照,能快速发现类型映射偏差。参数上把your_schema和表名换成实际值,etl_user换成你的专用账号。这一步在接手别人配好的环境时尤其有用,能避免在错误的权限假设上继续往下走。
5. 避坑清单:连接 MySQL 时最容易翻车的五个地方
5.1 现象:ODBC Test 通过,Data Store 点 OK 报驱动错误
原因多半是位数不匹配或驱动版本不兼容。32 位 Designer 配了 64 位 DSN,或者驱动版本比 Data Services 支持的版本新太多,Test 走的是驱动自身流程能过,Data Services 做类型探测时握手失败。解决办法是先确认 Designer 位数,到对应位数的 ODBC 管理器里重建 DSN,驱动版本回退到与 Data Services 版本匹配的稳定版。
5.2 现象:Tables 展开后列表为空
原因通常是账号缺少 information_schema 的读取权限,或者 Data Store 里填的数据库名和实际 schema 不一致。解决办法是用 4.2 节的SHOW GRANTS确认权限,用information_schema.COLUMNS确认库名拼写,必要时给账号补上元数据读取权限后重新展开 Tables。
5.3 现象:View data 能出数据,但作业跑起来报字符集错误
原因是 ODBC 连接和 Data Services 会话的字符集设置不一致,中文或特殊字符在传输过程中被错误解码。解决办法是在 DSN 的高级选项里显式指定字符集(如 utf8mb4),并确认 MySQL 库和表的字符集一致。如果作业里涉及多语言数据,导入元数据后抽查几个含特殊字符的字段,确认 View data 显示正常再往下做转换。
5.4 现象:元数据导入成功,但字段类型和 MySQL 里对不上
原因是 MySQL 的某些类型(无符号整数、枚举、JSON、时间戳精度)在 ODBC 层被映射成了近似类型。解决办法是导入后逐字段核对,对参与计算的字段在数据流里加显式类型转换,不要依赖默认映射。表结构变更后要重新 Import,旧元数据不会自动更新。
5.5 现象:作业跑一段时间后报连接数超限或连接超时
原因是数据流并行度高、连接未及时释放,或者 MySQL 的 wait_timeout 把空闲连接掐了。解决办法是降低并行度、调整数据流的提交频率,在 DSN 里配置连接池相关参数,并确认 MySQL 的 max_connections 和 wait_timeout 与作业规模匹配。批量作业尽量错峰跑,避免和其他系统抢连接。
6. 把连接配置固化成可复用的检查流程
连接建通只是第一步,真正省心的是把整套配置固化成可复用的检查流程。我现在的习惯是:每接手一个新环境,先按“位数确认 → ODBC 驱动版本核对 → DSN 单独测通 → Data Store 建好点 OK → 导入一张小表 View data 验证”这个顺序走一遍,五步全过再动正式作业。这个顺序的好处是每一层都有独立的验证点,出问题时能立刻定位到是哪一层,而不是在 Data Services 界面里盲目试错。
更进一步的做法是把 DSN 配置和 Data Store 参数整理成一份环境清单,记录驱动版本、DSN 名称、位数、字符集设置、账号权限范围。换机器或换环境时照着清单重建,比凭记忆重配靠谱得多。下面这张表是我常用的记录格式,字段不多但覆盖了排错时最常回查的信息。
| 记录项 | 示例值 | 用途 |
|---|---|---|
| Designer 位数 | 32 位 | 决定去哪个 ODBC 管理器配 DSN |
| ODBC 驱动版本 | 与 Data Services 匹配的稳定版 | 版本不兼容时回退依据 |
| DSN 名称与类型 | 系统 DSN | 服务方式运行时必须可见 |
| 字符集设置 | utf8mb4 | 排查乱码问题的第一入口 |
| 账号权限范围 | 元数据读取 + 业务表读写 | 权限不足时快速定位 |
| 验证表 | 一张小表 | 每次环境变更后做端到端验证 |
还有一点是元数据的维护节奏。MySQL 侧表结构变更在敏捷项目里很常见,Data Services 里的元数据是快照,不会自动跟着变。我的做法是在变更流程里加一个检查点:任何涉及被抽取表的 DDL 变更,都要触发一次重新 Import 和 View data 验证,确认字段映射没断。这个检查点花不了几分钟,但能避免作业跑到半夜才报字段不存在的错误。
从那以后我每次配新的 Data Store,都强制先走一遍 ODBC 命令行测试再进图形界面,宁可多花两分钟看isql的输出,也不在界面里反复点 Test 猜原因。希望这套流程能帮到你,少走几个我踩过的坑。
本文还有配套的精品资源,点击获取