这次故事的主角还是小D,小D工作在一家传统公司的信息部门,负责数据仓库系统的运维和开发。

话说有一天,小D被教导老板的office,老板给布置了一个任务,让小D在现有数据仓库里接入刚上线的两个系统的数据。

于是小D找到了对应系统的开发团队。可能是对方刚上线的缘故,最终也没有人搭理小D,于是直接把数据库只读权限open给了小D,让小D需要什么数据自己去抓取,如果一个查询不知道怎么写再单独去发邮件问。

话说其中一个系统还好,是SQL Server,这个跟小D的数据仓库一致,直接抽取就行。

但是另外一个系统就麻烦了,是Oracle,于是小D查阅了很多资料,安装Oracle相应的组件在数据仓库中,然后磕磕绊绊的终于连接到了这个数据库。

收集完报表的需求,确认了用户需要看到的每一个原子数据在界面上的位置,然后在开发平台通过抓取的方式也获取到了相应的查询方式,有些实在抓取不到的就发邮件问,虽然对方很忙但邮件回复的也还算及时。(数据建模的故事这里暂且不谈,话题太大。)

但是随后问题就来了,小D发现这两个接口经常报错,多数错误集中在源端数据结构的变更,比如名字变了,类型变了,长度变了,是否允许为空变了。

这个也可以理解,因为对端源系统用的是敏捷开发方式,几个礼拜上线一个变更是家常便饭。而对于源端系统团队,下游到底拿了哪些数据,他们也无法获知,所以也不能在第一时间通知到下游受影响的部门。

所以小D想到一个方法,就是把他所要的数据,提交给源端系统,让源端系统负责帮忙组织这些数据,放在一个平面文件里,在这个平面文件中,所有的字段名都是提前约定好的。

这样一来,源端系统知道了下游系统需要什么数据,在每次做变更的时候,就会有一个地方知晓,这个变更对于下游的影响。而对于有些变更,完全在可以不改变这个接口的情况下实现,减少了下游系统的开发和测试成本。

小D对于这个方法还是很满意的,只是对于那个Oracle的系统,操作系统是Linux,他们只支持用SFTP的连接,而这个工具在Windows下是没有微软自带工具解决的,不过还好通过第三方工具都可以搞定,而且第三方工具也都支持ETL接口编程,调度起来也都还方便。

这个方法确实方便了小D,但源端系统如果得不到实惠其实也是很难推动的,而这里对于源端系统来说,最主要的一个实惠就是,对于同一份数据,可能下游好几个系统都需要,相比先前的方案,他们只导出一次就可以了,避免先前的数据库直连,同样的数据要被访问多次,影响系统的性能。

小D同时也发现,相比先前的数据库直连,这个方法有效的避免了,数据仓库由于某些特殊原因失败,错过数据的加载的时间的问题。先前有好几次就是由于小D的数据仓库后半夜莫名其妙的打补丁重启,然后错了了约定的数据加载时间,结果等问题被发现的时候,源端业务系统已经开始新一天的业务运营,先前的数据根本追不回来。

于是,接口顺利的运行了好长时间。

再后来,报表的需求越来越多,更多的明细数据提了出来,而此时通过平面文件的导出就显得很笨拙,跟传统数据库直连的方法来比较,这个方法多出了额外的IO开销,以及序列化和反序列化成本,直接导致的问题就是直到第二天上班的时候,要么是文件还没有导出完毕,要么是文件还没有加载完毕。

于是,通过中间数据库的方法被小D提起。就是在源系统和数据仓库间,建立另外一个单独的数据库,每天源系统会把下游系统系统需要的数据送到这里,下游系统随后直接从这个中间库加载数据。

就这样,系统平稳的运行了好久好久。

再后来,随着大数据的火热,好多部门都搭建起来了自己的大数据平台。突然有一天小D被通知道:请求的数据可以直接从大数据平台里获取,就不需要再走中间库了。

于是小D做了一番研究,发现源端系统每次是把数据发送给大数据平台存储,他们主要是方便自己部门报表平台,主要是Tableau系统的对接。

就这样,小D也跟着踏上了大数据之路。。。

BI项目记(二):给我接套数据的更多相关文章

  1. BI项目记笔记索引

    这个笔记系列主要记录了在BI项目中,如何搭建环境进行源代码管理以及文档管理. 用到的产品包括: TFS Express Sharepoint Visual Studio SQL Server   配置 ...

  2. [BI项目记]-搭建代码管理环境之服务端

    上一篇介绍如何搭建环境进行文档版本的管理,这篇主要介绍搭建环境进行代码版本的管理. 即使是BI项目也要进行代码版本管理.代码版本管理的工具有很多,VSS, SVN等都是当下大家经常提起的,这里主要介绍 ...

  3. [BI项目记]-搭建代码管理环境之创建团队项目

    此篇主要介绍如何基于TFS环境创建团队项目来进行项目代码的版本管理工作,这一系列将侧重于BI项目,当然对于其它项目也同样适用. 在TFS里开始一个项目,我们首先需要创建一个团队项目. 在Team Ex ...

  4. [BI项目记]-搭建代码管理环境之签入代码

    此篇主要介绍如何基于TFS环境创建进行BI项目最简单的代码签入和签出工作. 首先介绍BI项目中的SSAS项目.SSAS项目主要包含Cube多维数据集和数据挖掘模型,是在微软BI产品体系中重要的一个组件 ...

  5. [BI项目记]-对项目文件进行规划

    BI项目中会有很多不同种类的项目,此篇会对这些项目进行一个总结,并且在TFS中进行分类. 根据笔者对BI项目的经验和理解,主要将BI项目中的项目类型进行如下分类: DB脚本 DB脚本是BI项目中重要的 ...

  6. [BI项目记]-DB脚本同步

    BI项目中会有很多不同种类的项目,其中比较比较大的一部分就是对DB脚本的处理.然而DB的脚本毕竟无法在项目中进行维护,所以这里介绍如何对DB的脚本进行版本上的维护. 数据库脚本本身没有项目模板支持,很 ...

  7. [BI项目记]-TFS Express备份和恢复

    在项目中对TFS进行备份操作是日常重要的工作之一,此篇主要描述如何对TFS Express进行备份,并且在另外一台服务器上进行恢复. 以下是操作的几个关键点: 备份数据库,在TFS管理工具中就可以完成 ...

  8. [BI项目记]-新任务处理

    上一篇主要介绍如何借助TFS创建一个新的工作项,此篇主要演示如何对其进行处理. 首先回顾下新工作项不同阶段的定义. 接下来进入到开发阶段,根据需求创建五个报表.打开SQL Server Data To ...

  9. [BI项目记]-新任务创建

    上一篇介绍了如何处理一个Bug工作,此篇主要介绍如何借助TFS对于一个新需求创建一个新的工作项. 这里假定,有一个新的需求,需要创建五个报表. 然后开发的工作流程如下: 这个流程总结起来大致如下: 首 ...

随机推荐

  1. paloalto防火墙版本升级

    1.准备工作:此部分不影响生产环境,可直接操作. 1)备份: 2)下载OS HA情况下,在主机下载完成后,选择 Sync To Peer(同步到对端)同步到备机. 2.安装更新 1)在备机上选择安装 ...

  2. python读取es中的所有数据并计算md5然后进行持久化

    #!/usr/bin/python import threading import json import time from elasticsearch import Elasticsearch f ...

  3. python基础(16)私有类,类,类变量

    1.私有类: class My: def test(self): self.__password = 123456 def say(self): print('password',self.__pas ...

  4. mvc @html.action() 跨area调用controller 中的action

    @{Html.RenderAction("ActionName", "ControllerName", new { area = "Manager&q ...

  5. HTML5学习路线导航

    一.基本标签元素 1.基础标签第一篇 2.基础标签第二篇 3.表单form的使用 4.新增表单验证 二.CSS样式表 4.CSS插入样式表的三种格式 5.六大选择器 6.样式内容详细讲解 7.背景渐进 ...

  6. vue2.0项目创建之环境变量配置

    安装node 传送门 <node安装步骤>关于环境的配置,百度一大把 安装淘宝镜像 npm install -g cnpm --registry=https://registry.npm. ...

  7. windows任务栏IDEA图标变白色快速解决方法

    方案1:同时按Windows键+R键打开运行对话框,输入ie4uinit.exe -show然后回车即可修复. 方案2:打开计算机(Win7),此电脑(Win10)或任意文件夹,然后在地址栏输入cmd ...

  8. 我的第一个flink_java程序

    之前看了视频学习第一个flink  word count使用,但是对于socket发送数据作为数据源我这里有点忘记了,加上最近有个项目要发布,一直在忙,所以迟迟无法完成: 1.首先我们要有数据源,因为 ...

  9. WCF系列_WCF如何选择不同的绑定

    内容转载自<WCF核心技术> 开发者不用直接操作信道范型,而是由WCF根据服务OperationContract来选择合适的信道范型.大多数信道范型都有无会话两种变体.有会话信道会在客户端 ...

  10. C#下载Url文件到本地

    protected void Page_Load(object sender, EventArgs e) { string filePath = Request.Params["FilePa ...