ETL(Extract-Transform-Load)与 ELT(Extract-Load-Transform)在数据处理顺序上的差异,直接影响了测试策略的侧重点。ETL 强调在加载前完成转换与清洗,适合合规要求严格的场景;ELT 则利用目标系统(如 Snowflake/BigQuery)的计算能力在加载后转换,灵活性更高。
| 维度 | ETL 测试重点 | ELT 测试重点 |
|---|---|---|
| 转换时机 | ETL 中间层转换逻辑验证 | 目标端 SQL/dbt 模型验证 |
| 数据质量 | 在管道入口处拦截脏数据 | 加载后再清洗,需测试清洗覆盖度 |
| 错误处理 | 转换失败隔离 + 重试机制 | 原始数据保留,可随时重跑 |
| 性能 | ETL 服务器资源优化 | 数仓计算资源 + 查询优化 |
| 回滚 | 需完整的回滚方案 | 原始数据不变,重跑转换即可 |
| 校验类型 | 方法 | 示例 |
|---|---|---|
| 行数校验 | 源端 COUNT(*) vs 目标端 COUNT(*) | 源表 100w 行 → 目标表 100w 行 |
| 汇总校验 | SUM/AVG/MIN/MAX 聚合值对比 | 源 SUM(amount) = 目标 SUM(amount) |
| 抽样比对 | 随机抽取 N 条逐字段比对 | 抽取 1000 行,80 列逐列校验 |
| 哈希校验 | 按分区计算 MD5/SHA256 后对比 | 每日分区 hash 一致 = 数据一致 |
| 业务规则 | 断言数据满足业务约束 | order_date ≤ ship_date |
| 空值检查 | NOT NULL 字段空值率 | customer_id NULL 率 = 0% |
dbt(data build tool)内置了强大的测试能力,推荐在 ELT 场景中采用:
unique、not_null、accepted_values、relationships(外键检查)SELECT * FROM orders WHERE amount < 0dbt build,测试失败阻止合并