用途
该技能把 MS SQL Server 的源代码(存储过程、视图、T-SQL 脚本)转换为面向 Snowflake 的 dbt 模型。整体流程为:选择分层架构 → 清点源对象 → 转换 → 确认 → 构建到隔离 schema → 数据一致性(parity)校验 → 验证 → 看板。
主要能力
- 分层选择:在 Medallion(bronze → silver → gold)与 Data Vault 2.0(hubs / links / satellites)之间选择;用户在一轮交互内未答复时默认 Medallion。
- 源对象清点:通过 altimate-code 连接实时 MS SQL 清点表、视图、存储过程(返回名称、类型、行数);或扫描仓库中的 .sql 转储文件。
- 对象映射:Medallion 下,源表映射为 sources.yml 条目 + models/bronze/stg_<name>.sql;视图/简单 SELECT 映射为 models/silver/int_<name>.sql;报表型存储过程映射为 models/gold/<name>.sql(按体量选择 table 或 incremental)。Data Vault 下按业务键、关系、描述属性生成 hub/link/satellite 模型。
- T-SQL 改写对照:覆盖 GETDATE()、ISNULL、TOP、方括号标识符、DATEADD、两参数 CONVERT、临时表、CROSS APPLY、OUTER APPLY、字符串拼接、大小写敏感比较、整数除法、MERGE、IDENTITY、DATETIME 精度、游标/WHILE 循环、动态 SQL 等,并对会静默改变数据的场景单独标注 TRAP。
- 编译检查:部署前执行 dbt deps、dbt parse、dbt compile;编译失败则先修复。
- 隔离 schema 部署:通过脚本提供两种隔离方式(profiles.yml 专用 target + DBT_SCHEMA 环境变量,或读取 var('target_schema') 的自定义 generate_schema_name 宏),并执行隔离检查:从 run_results.json 读取 unique_id,在 manifest.json 查 relation_name,覆盖 model/snapshot/seed,前缀为空或检查数为 0 时直接失败。
- 一致性校验(强制硬停):对已物化关系与源 MS SQL 对象做行数、逐列聚合、1000 个随机键的键控样本差异检查,逐对象标记 PASS/FAIL,首次 FAIL 即停止并给出行级差异。
使用方式
前置检查:
command -v altimate-code # strongly preferred — carries MS SQL + Snowflake adapters and data-parity
command -v dbt # required for the deploy phase
command -v git # required
必须具备:面向 Snowflake 的 dbt 项目;目标数据库上可 CREATE SCHEMA、warehouse 可用 USAGE 的 Snowflake 角色;profiles.yml 中带 schema override 的专用迁移 target;安装 dbt_utils(用于 NULL 安全的代理键);源端可通过 altimate-code 的 MS SQL 连接访问,或仓库内已有 .sql 转储;一致性校验要求源行可从 Snowflake 读取(已复制或可经 stage + COPY INTO 落地)。缺少 altimate-code 且无转储、或未安装 dbt 时应停止并告知用户。
时间预算:≤10 个对象目标端到端 ≤7 分钟(420 秒),硬上限 10 分钟(600 秒);各阶段有独立上限(Phase 0 ≤20s、1 ≤45s、2 ≤120s、3 ≤15s、4 ≤15s、5 ≤90s、6 ≤90s、7 ≤25s)。
运行状态由脚本管理:在分层决定后立即执行 scripts/init_run.sh <Medallion|DataVault> '<migrated_models_selector>' <dbt_root> 初始化;清点后可原地更新 selector(source scripts/state.sh load 后 source scripts/state.sh set SCOPE_SELECTOR '<updated_selector>'),不应重跑 init_run.sh。部署使用 scripts/deploy_isolated.sh method1 [<non_prod_target>] 或 method2,脚本依次执行 dbt deps、dbt build 与隔离检查。
注意:资料中的示例说明还包含通过 heredoc 与 altimate-code run 传提示词的做法,完整命令细节见原始资料。
适用场景
- 将 SQL Server 的存储过程、视图和 T-SQL 脚本迁移为 Snowflake 上的 dbt 模型,并需要先构建到隔离 schema、再做数据一致性校验的迁移任务。
- 需要明确分层(Medallion 或 Data Vault)并保留业务逻辑的批量转换。
限制
- 源不是 T-SQL(PostgreSQL / MySQL / Oracle / BigQuery)时不适用,应使用 migrating-sql-to-dbt。
- 目标不是 Snowflake 时不适用,应使用 migrating-sql-to-dbt 加相应仓库技能。
- 仅单个 T-SQL 片段、无隔离部署或一致性要求时不适用,应使用 migrating-sql-to-dbt。
- 增强现有 dbt 模型应使用 dbt-model-enhancement。
- 无法访问源且无 .sql 转储、未安装 dbt、一致性校验时源数据无法从 Snowflake 读取,均应停止。
- 资料提及的收费、平台支持与效果等未明确说明的内容,暂未提供。