微软BI 之SSIS 系列 - 使用 Row Count 记录从数据源写入目标表的条数

浏览: 3574

开篇介绍

假设在业务中也有这样的一个需求,再从数据源抽取数据到目标表比如 Staging 表时,需要记录每次抽取的条数改如何实现?实际上,实现的方式也很多种,这取决于你的日志系统的设计与架构。这个案例只是简单的用到 SSIS 中的一个可以记录行数的控件 Row Count 来实现一下这个需求。

Row Count 的使用

首先我们有一张记录表插入条数的日志表,功能非常简单,就是记录在哪一批次的执行下,位于哪个包的表插入日志记录。

IF OBJECT_ID('T039_ROWCOUNT_LOG','U') IS NOT NULL
DROP TABLE T039_ROWCOUNT_LOG
GO

CREATE TABLE T039_ROWCOUNT_LOG
(
EXECUTION_ID
NVARCHAR(255),
PACKAGE_NAME
NVARCHAR(255),
TABLE_NAME
NVARCHAR(225),
INSERTED_COUNT
BIGINT,
INSERTED_DATE
DATETIME
)

比如插入的测试结果如下:

实现过程

在包中先定义一个变量,这个变量就是用来记录插入的条数。

拖放一个 Row Count 控件到源与目标控件之间。

 

双击编辑 Row Count 控件,选择之前创建好的变量。这样当从 FF_SRC_INTERNET_SALES 文件数据源向 OLE_DST_INTERNET_SALES 目标写入数据的时候,ROW_COUNT 就会记录所有的条数。

当 DFT_LOAD_INTERNET_SALES 数据流结束之后,变量已经获取到插入的条数,因此可以直接通过 Execute SQL Task 向日志表中插入这次条数的信息。

编辑 EST_INSERT_TABLE_COUNT_LOG 的 SQL 语句,表的名称是 Hard Code 硬编码的,这一点要注意。也就是说,一个 Execute SQL Task 只为一个表负责,并且每一个 Execute SQL Task 只紧跟在当前需要记录表插入条数的 Data Flow Task 数据流之后。

参数的配置。

保存并运行包。

那么每次包运行抽取数据的记录都会被插入到日志表中,每次写入的条数也可以被记录下来了。

总结

这个例子比较简单,只是单纯的记录一下写入的条数,基于这个非常基础的案例可扩展的日志内容还有很多,实现的方式也有很多种,因为一个完整的数据仓库日志系统是包含很多方面的:

系统方面

  • 包执行状态,包中各层级任务执行状态(正常,错误,取消),时长等日志信息。
  • 数据源端数据变化日志信息,每天,每月重点数据源表,文件数据量变化日志信息。
  • 数据仓库维度,事实每天,每周,每月的数据量变化日志信息。
  • 数据库文件,每天,每周,每月的数据量变化日志信息。

业务方面

  • 重点业务数据的增长对数据仓库事实表,维度表的增长状态的关联信息。
  • 不同时间阶段业务数据的增长与数据仓库事实表,维度表在不同周期增长的关联信息。

报表方面

  • 不同业务报表的分布情况,访问量,周期性的访问频率等等。

有了这些体系,我们才能对我们的数据仓库了如指掌!可以更好的维护,管理,预判业务的增长量对数据仓库的影响等等有着非常至关重要的作用,包括对包,任务,报表的调优都可以起到非常大的作用,可以说是基于 BI 的 BI 系统。

推荐 0
本文由 BIWORK 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

1 个评论

执行任务的时长这个该怎么弄呢?如果多个任务并行的话,是不是要考虑用时最长的任务该放到什么时候跑之类的?防止某个任务太长时间拖延了往下流的任务?

要回复文章请先登录注册