背景

在工作中,我想对业务系统的日志信息进行分析,需要将日志信息抽取到另外一个表里,由于日志表的数据量庞大,我只需要从某一特定时间开始对业务系统产生的日志抽取出来,而且需要每5分钟(假定)进行抽取一次,把在这5分钟内产生的日志信息抽到我的表里面,产生一个增量抽取的效果。

解决过程

在网上找了很多的资料,关于SSIS数据抽取的有不少,但是增量抽取的解决方法不多,而且有的看起来比较复杂。下面分享下我的解决方法。

解决思路

1.      创建SSIS包

2.      在SSIS包中设置开始时间和结束时间的变量

3.      在数据库中创建一张时间表,里面记录开始时间

4.      在SSIS包中创建执行SQL任务,将时间表里的开始时间以及运算的结束时间赋给包中的开始和结束时间变量

5.      创建数据流任务

6.      在数据流任务中添加OLE DB源和 OLE DB目标

7.      在OLE DB源中执行带有参数的SQL语句,将包变量开始时间和结束时间赋给语句的参数

8.      连接OLE DB源和 OLE DB目标,完成数据流任务

9.      创建执行SQL任务,更新时间表中的开始时间

10.    连接各部分完成SSIS包并执行。

开发环境

1.      Windows 7 64位操作系统

2.      SQL SERVER 2008 R2 的SQL ServerBusiness Intelligence Development Studio

3.      使用的数据库自然是SQL SERVER 2008 R2啦。

关键点分析

1.      如何将时间表的时间取出来赋值给包的两个变量:开始时间和结束时间

2.      在OLE DB源如何执行带有包变量的SQL语句。

准备

1.      创建数据库BITest

2.      创建业务系统的日志表logs(模拟的)

insert into dbo.logs

select '日志信息','2014-11-14 23:00:00','正常'union all

select '日志信息2','2014-11-14 23:01:50','正常'union all

select '日志信息3','2014-11-14 23:05:20','正常'union all

select '日志信息4','2014-11-14 23:07:30','失败'union all

select '日志信息5','2014-11-14 23:10:30','正常'union all

select '日志信息6','2014-11-14 23:13:30','失败'union all

select '日志信息7','2014-11-14 23:16:30','正常'union all

select '日志信息7','2014-11-14 23:21:30','正常'union all

select '日志信息7','2014-11-14 23:24:30','正常'union all

select ' 日志信息 7', '2014-11-14 23:30:05', ' 失败 '

3.      创建时间表bi_startTime(假设初始时间是2014-11-14 23:00:00)

insert into dbo.bi_startTimevalues('2014-11-14 23:00:00')

4.        创建目标表logsbak

解决步骤

1.      创建SSIS包

选择新建【Integration Services项目】,输入项目【名称】以及选择项目存放的【位置】,点击【确认】。

2.      新建数据源

右键【数据源】单击【新建数据源】打开添加数据源向导,完成添加数据库。在连接管理器中右键选择【从数据源新建连接】,选择可用的数据源,然后确定。

3.       在SSIS包中设置开始时间和结束时间的变量

点击【SSIS】下的【变量】,在旁边的变量面板创建startTime和endTime。

4.      创建获取开始时间的执行任务

在工具箱中拖入执行SQL任务控件到控制流,双击该任务打开设置面板。在常规选项卡中设置数据库连接,【SQLSourceType】为直接输入,SQLStatements一项输入selecttimeasstartTime,DATEADD(MINUTE,+5,time)asendTime frombi_startTime。【ResultSet】一项选择单行。在结果集选项卡中【添加】,将结果赋给自定义时间变量,然后【确定】。

5.      创建数据流任务

将数据流任务控件拖入控制流,双击进入数据流设计面板。拖入OLE DB源和OLE DB目标到设计面板。双击OLE DB源进行编辑。

在编辑面板中选择数据源,【数据访问模式】选择SQL命令,【SQL命令文本】中输入select * from logs where endTime > ? andendTime < ?,注意这里是关键,用问好?来代替要替换的自定义时间变量,不能用@[user:startTime]这种引用变量。然后点击旁边的【参数】。按?的顺序来映射我们定义的时间变量。然后点击【确定】。同样,设置OLE DB目标为我们要将数据抽取到的表logsbak.

6.      创建更新数据表的SQL执行任务

拖入实行SQL任务到控制流,双击该任务进行设置。【SQLStatement】一项中输入update bi_startTimeset time = (select DATEADD(MINUTE,+5,time) as endTime from bi_startTime)【结果集】选择无。然后【确定】。至此,我们的包就设计完了。

运行

单击【调试】启动调试,可以看到包执行成功了。每执行一次包就将相应时间段的记录信息插入到目标表中。然后将SSIS包部署到服务器上开个定时任务就可以了。

总结

该方案或许只适合源数据表是静态的诸如日志这种流水账那样的增量抽取,对于原数据表中数据有变化如更新,删除等的增量抽取还需要做一些改动。当然,自定义的结束时间变量设为开始时间后5分钟也有点问题,如果服务器挂了,重新运行包的话,那目标表获取到的信息会滞后很多,可以把结束时间赋一个当前时间的值。

或许你会问这样做的意义在哪里呢,将一个日志表的数据复制到另一个表去,直接分析源数据表就好了。可实际情况可能是业务系统的数据库是分布式的,每个数据库中的表结构相同,都有一个日志表,我需要将所有日志表的信息汇总到一个表上统一分析处理的话可能会有这样的需求。而且要做到实时同步各日志表的信息又不大可能,所以就设计成按一定的时间段将数据同步到一个表中啦。

ssis抽MySQL数据_SSIS探索之SSIS增量抽取数据相关推荐

  1. ssis 导入 mysql 引号_SSIS 遍历目录,把文件内容导入数据库

    最近接手一个项目,程序的基本框架是:程序A导出数据,以.tsv格式存储,数据列之间以tab间隔:程序B吃文档,把数据导入到数据库中,并把处理过的文档备份/移动到指定的目录中.为了快速开发,程序B设计成 ...

  2. MySQL从零到一解读增量同步数据到elasticsearch canal adapter方式(binlog)实现

    本文是作者在单机上面从零到一实现增量同步MySQL数据到elasticsearch canal adapter方式(binlog)实现. 实现步骤 (1)安装MySQL (2)开启MySQL binl ...

  3. hive随机抽取100条数据_用Excel进行随机抽取数据

    点击上面的蓝字"我的森林小屋",关注我,获取更多精彩内容!在Excel中,RANDBETWEEN是一个随机抽取数据函数,表示"返回大于等于指定的最小值,小于等于指定最大值 ...

  4. solr4 mysql自动更新_solr7.4 定时增量更新数据-Go语言中文社区

    准备 centos7 下solr7.4.0 配置mysql 数据源 可参考: https://blog.csdn.net/guyan0319/article/details/81203184 配置da ...

  5. mysql增量抽取方法_DataX增量抽取数据

    datax增量项目地址: datax作业配置文件 datax.json { "job": { "setting": { "speed": { ...

  6. 使用canal实现MySQL 8 增量同步数据到 ElasticSearch 7.15.2中 linux

    文章目录 一.清空控制台 1. 清空控制台 2. 修改数据 3. 监控数据 4. 数据变化 5. 索引查询 6. 预期性能评估 7. 增量同步分析 二.验证方案 2.1. 把shop索引删除 2.2. ...

  7. MySQL存储用户点赞的信息_点赞数据存储方法及设备与流程

    本申请涉及互联网技术领域,尤其涉及一种点赞数据存储方法及设备. 背景技术: 为了增加用户的互动性,许多社交平台为用户提供了投票/点赞,或反对/踩的功能.例如,在网络直播平台上,为了使用户和主播具有良性 ...

  8. 提取数据_基于众包的可视化图表数据提取

    Crowdsourcing-based Data Extraction from Visualization Charts 作者 Chengliang Chai† Guoliang Li† Ju Fa ...

  9. Sqoop增量抽取Oracle数据,最近8个小时的数据未被抽取

    在使用sqoop增量抽取数据时,在不指定m的情况下,导出日志中可以看到添加了截止时间,但这个时间并不是系统时间,经过多次比较发现,这个时间比当前系统时间早8个小时.因此怀疑是时区问题. 检查Oracl ...

最新文章

  1. MinGW+Lua环境配置小结
  2. 使用nginx代理跨域,使用nginx代理bing的每日一图
  3. 6升小米6——算法解题
  4. SAP收购的coresystem app的使用截图
  5. 每日一笑 | 史上最贴心的骗子
  6. 编程语言中,差、交、并、自然连接、选择、投影、笛卡尔积分别都是什么运算...
  7. springboot 读写分离_springboot +ShardingJDBC 读写分离
  8. 中移互联网副总:创新技术如何赋能企业变现突破
  9. 27muduo_net库源码分析(三)
  10. php7 opcode,php7最小化安装 vld扩展安装并查看php代码的opcode ast测试
  11. 语音识别揭秘,它与人工智能是什么关系?
  12. webfigure显示到网页上所踩过的坑--自写servlet
  13. python简单图片处理
  14. 云计算(期末复习题含答案)
  15. 有哪些好的科研工具软件?
  16. JSCH连接SFTP Algorithm negotiation fail
  17. 创建一个Rectangle类。 添加两个属性width、height,分别表示宽度和高度,添加计算矩形的周长和面积的方法。测试输出一个矩形的周长和面积。
  18. StrictMode总结
  19. js 中的evel 函数
  20. Unity3D学习记录——NGUI Sprit2

热门文章

  1. 安装plsql,一定要安装oracle客户端
  2. 友盟分享微信朋友圈图片太大调起微信慢的问题
  3. cmd命令中进入指定文件夹
  4. java简单代码测试用_TestQuestions
  5. 2021年全球合金钢收入大约143百万美元,预计2028年达到158百万美元
  6. 一天测血压的最佳时间_一天二十四小时,什么时候身体时间测量血压最准确?...
  7. 可以无线共享网络的好玩意
  8. 备战金三专题: 动态代理是基于什么原理?
  9. 求职陷阱:Lazarus组织以日本瑞穗銀行等招聘信息为诱饵的攻击活动分析
  10. Vue + 项目优化 通过externals加载外部CDN资源