SSIS 迁移至 Databricks ― 加速器

Table of Contents
SSIS → Databricks 迁移加速器
― 不是“换个运行环境”,而是把十几年的 ETL 资产重新梳理一遍
阅读本指南,你将了解
- 为什么现在是迁移 SSIS 的合适时间点
- Databricks 免费工具 Lakebridge 能自动完成哪些部分,哪些仍需人工
- SSIS 组件与 Databricks 的对照关系,以及最容易出错的五类场景
- 并行运行与对账的判定标准
- 联系邮箱:Admin@innovationalofficesolution.com
一、时间窗口
SQL Server 2016 的扩展支持已于 2026 年 7 月 14 日结束,SQL Server 2017 也将在 2027 年 10 月 12 日到期。SSIS 随 SQL Server 一起发布,很多企业的 SSIS 包至今仍运行在这两个版本上。继续使用意味着要么购买付费的扩展安全更新(ESU),要么升级到更新的 SQL Server 版本——而后者通常还要连带改造包的部署方式和连接配置。
如果企业的分析负载本来就计划向湖仓迁移,那么与其为 SSIS 再升级一次,不如借这个窗口把 ETL 一并迁走。
二、Lakebridge 与本加速器的分工
Databricks 提供免费的迁移工具 Lakebridge,其中 SSIS 转换基于 BladeBridge 转换器,可以把 .dtsx 包转换为 Databricks Notebook。根据官方文档,该功能目前标注为“实验性”,支持 SQL Server 2012 至 2022 以及 ADF 的 SSIS 集成运行时,覆盖 50 个 SSIS 组件中的 38 个。脚本任务和脚本组件中的 C# / VB.NET 代码无法自动转换,需要用 Python 重写;Analysis Services 处理、FTP、Send Mail、Web Service、XML 等任务也需要手工处理。
| 环节 | Lakebridge | 本加速器 |
|---|---|---|
| 包与依赖关系评估 | 支持 | 支持,并结合执行历史和业务重要度排定迁移批次 |
| 标准控制流 / 数据流转换 | 支持(实验性) | 支持 |
| C# / VB.NET 脚本任务 | 保留结构,需人工重写 | AI 解析脚本意图并生成 PySpark,专家逐段复核 |
| 不支持的组件 | 需人工处理 | 提供标准替代模式(见第四节) |
| 包配置、项目参数、环境变量 | 部分 | 映射为作业参数与密钥范围(Secret Scope) |
| 业务口径对账 | 结构、行、列级校验 | 生成业务可签字确认的 KPI 级对账报告 |
两者可以组合使用:先用 Lakebridge 完成标准部分,再由本加速器处理“剩下的难点”。
三、迁移步骤
1. 导出与盘点
从 SSISDB 目录或文件系统导出全部 .dtsx 包,结合 SQL Server 代理作业历史,识别长期未运行或重复的包。
2. 依赖关系梳理
解析“执行包任务”的父子调用链、优先约束(成功 / 失败 / 完成分支)以及表级读写关系,生成血缘图。
3. 自动转换
- 数据流任务 → Spark SQL / PySpark DataFrame
- 执行 SQL 任务 → Spark SQL 语句;T-SQL 存储过程 → Databricks SQL 或 PySpark
- Foreach / For 循环容器 → 参数化 Notebook 或文件通配读取
- 包变量与表达式 → 作业参数与 Python 变量
初始自动转换准确率为 70%~90%。
4. 编排与运维
将 SQL Server 代理作业与包之间的调用关系转换为 Lakeflow Jobs 的任务依赖;失败重试、告警通知改用作业内置机制。
5. 并行运行与对账(PulseQA)
新旧两套流程使用相同的源数据运行,自动比对目标表的行数、合计值、主键差异和拒绝记录数量。
四、最容易出错的五类场景
① 脚本任务 / 脚本组件(C#、VB.NET)
常用于调用接口、解析非标准文件、写日志。建议先归纳“这段脚本到底做了什么”,再用 Python 重新实现,而不是逐行翻译。
② 慢变维(SCD)组件
SSIS 自带的 SCD 向导生成的是逐行处理逻辑,性能较差。迁移时统一改为 Delta Lake 的 MERGE INTO,一次性处理。
③ 排序规则与字符串比较
SQL Server 默认排序规则通常不区分大小写、忽略尾随空格,而 Spark 默认区分。这是迁移后“查不到数据”“关联不上”的常见原因,需要在关联键上统一处理。
④ 中文编码
从旧系统导出的平面文件常用 GBK / GB18030 编码,SSIS 的平面文件连接管理器里设置了代码页 936。迁移到 Spark 后必须显式指定编码,否则会出现乱码。
⑤ 整数除法与数据类型
T-SQL 中两个整数相除结果仍为整数,而 Spark SQL 默认返回小数。涉及比率、单价计算的字段需要逐一核对。
五、组件对照表
| SSIS | Databricks |
|---|---|
| 数据流任务 | Spark SQL 临时视图 / DataFrame |
| OLE DB / ADO.NET 源 | spark.read(JDBC) |
| 派生列 / 条件拆分 | withColumn / when / filter |
| 查找(Lookup) | join / 广播关联 |
| 聚合 / 排序 | groupBy().agg() / orderBy |
| 合并联接 / 全部合并 | join / unionByName |
| 慢变维(SCD) | Delta Lake MERGE INTO |
| 执行 SQL 任务 | Spark SQL 语句 |
| 执行包任务 | dbutils.notebook.run() / 作业任务依赖 |
| Foreach 循环容器 | 参数化 Notebook / 通配读取 |
| 脚本任务(C# / VB.NET) | PySpark / Python 函数 |
| 包配置 / 项目参数 | 作业参数 / 密钥范围 |
| SQL Server 代理作业 | Lakeflow Jobs |
六、中国区部署提示
在由世纪互联运营的 Azure 中国区使用 Azure Databricks 时,根据 Azure 中国文档,Lakeflow Connect 的托管连接器目前不可用。从 SQL Server 增量抽取数据,可改用 JDBC 读取配合变更跟踪(Change Tracking)或时间戳字段的增量方案。设计前请以所选区域的功能清单为准。
七、应用示例:Emulus Consulting
Emulus Consulting 使用本加速器对 280 个 SSIS 包进行了盘点,下线和合并了其中 35%,其余迁移至 Databricks。
- 迁移周期:8 周
- 夜间批处理时长:5.5 小时 → 25 分钟
- 运维服务器数量:8 台 → 0 台
- TCO 降低 45%
先拿最难的包试一试
挑选 5 个包含脚本任务和 SCD 的 SSIS 包,我们免费提供转换代码与对账结果。
- 免费 POC:免费 POC(Pulse Convert)
- 官网:innovationalofficesolution.com
- 邮箱:Admin@innovationalofficesolution.com
将 SSIS 包与 ETL 迁移至 Databricks
SQL Server 2016 停止支持后的现代化首选。把 .dtsx 控制流、数据流、脚本任务转换为高可靠的 PySpark / Spark SQL。初始自动转换准确率 70%~90%。