能否在SSIS中通过DQS实现数据质量检测并生成质控日志表?
SSIS结合DQS实现数据质量日志表的方案
完全可以通过SSIS结合DQS实现你需要的数据质量日志表生成,同时完成数据标记和报表层加载。以下是具体操作步骤:
1. 预创建数据质量日志表
首先在你的数据仓库中创建用于存储错误信息的表,SQL示例如下:
CREATE TABLE dbo.DataQualityLog ( LogID INT IDENTITY(1,1) PRIMARY KEY, SourceTableName NVARCHAR(128) NOT NULL, RecordID VARCHAR(64) NOT NULL, -- 对应业务记录的唯一ID,根据实际字段类型调整 ErrorMessage NVARCHAR(MAX) NOT NULL, ErrorOccurrenceTime DATETIME NOT NULL DEFAULT GETDATE() );
注意:RecordID的类型要和业务表主键类型匹配,比如主键是INT则改为INT类型。
2. 在DQS中配置数据质量规则
- 打开Data Quality Client,创建新的知识库,进入“域管理”模块,针对staging层表的字段定义校验规则:
- 字段非空约束、格式验证(如邮箱、手机号格式)、值域合法性(如性别只能为'男'/'女')、跨字段关联规则等
- 完成规则定义后,切换到“数据质量项目”模块,创建新项目并关联上述知识库,指定staging表作为数据源,运行校验确认规则生效后保存项目,供SSIS调用。
3. 在SSIS包中集成DQS校验任务
- 新建SSIS包,添加OLE DB数据源,连接到staging层数据库并选择要校验的表
- 添加Data Quality Services任务,双击打开配置界面:
- 配置DQS服务器连接
- 选择之前创建的DQS数据质量项目
- 映射staging表字段到DQS知识库对应的域
- 在“输出”选项卡勾选“创建错误输出”,将校验结果分为通过行和错误行两个输出路径
4. 处理校验结果:标记行状态+写入日志表
- 处理通过行:添加派生列组件,连接DQS任务的“通过行”输出,新增字段
IsValid并赋值为1,再通过OLE DB目标组件将数据加载到reporting schema的目标表 - 处理错误行:
- 添加派生列组件,连接DQS任务的“错误行”输出:
- 新增字段
IsValid赋值为0 - 新增字段
SourceTableName,可硬编码为当前staging表名(如'Staging_Customer'),或用SSIS变量实现动态赋值 - 直接使用DQS输出的
DQS_Message字段作为错误信息,多错误可通过表达式合并
- 新增字段
- 添加OLE DB目标组件,将错误行加载到reporting schema的目标表(与通过行同表,通过
IsValid区分) - 再添加一个OLE DB目标组件,将错误行的
SourceTableName、业务主键(如CustomerID)、DQS_Message、当前时间(使用GETDATE()或SSIS系统变量@[System::StartTime])写入DataQualityLog表
- 添加派生列组件,连接DQS任务的“错误行”输出:
5. 优化与自动化(可选)
- 如果需要批量处理多个staging表,可使用Foreach循环容器,通过变量动态指定staging表名、DQS项目名,实现全自动化校验和日志记录
- 可在SSIS包中启用内置日志,监控流程执行状态,与数据质量日志表形成互补
内容的提问来源于stack exchange,提问作者Pritesh singh
相关产品推荐
相关产品推荐

