使用实时数据填充数据仓库的高效解决方案,第 1 部分: 集成 InfoSphere Replication Server 与 InfoSphere DataStage

逐步填充您的数据仓库

用源数据的增量填充数据仓库可能会花费巨大代价。如果只用 SQL 提取,根本无法确定发生变化的行。IBM® InfoSphere® Replication Server 可以通过只读取数据库日志就检测出变化的数据。该 系列 文章将演示如何使用 InfoSphere Replication Server 来高效提取发生变化的数据,然后将增量传送给 IBM InfoSphere DataStage® 以填充数据仓库。该系列分为两部分。在第 1 部分中,将会简要介绍产品及使用方法。在第 2 部分中,将探索两个不同的集成选项:使用临时表或使用 MQ 消息。

Anand Krishniyer, 资深软件工程师,InfoSphere Replication, IBM

Anand Krishniyer 的照片Anand Krishniyer 是 InfoSphere Replication 开发机构的资深工程师。作为管理团队的一员,他的职责包括开发项目,以及为用户提供 Replication Server 安装、设置和配置相关的技术支持。在担任本职务之前,Anand 是一家流程管理公司 Savvion(现在是 Progress Software 的一部分)Integration and Tools 团队的项目主管。



Tony Lee, 高级认证 IT 专家,InfoSphere Replication, IBM

Tony Lee 的照片Tony Lee 是 InfoSphere Replication 开发机构内的 InfoSphere Replication Center of Competency (COC) 团队中的高级认证 IT 专家。作为 COC 的成员,Tony 为用户和业务伙伴提供 InfoSphere replication 技术支持。Tony 具有多年关于各种 IBM 复制技术的咨询经验,包括 SQL 复制、Q 复制,还有最近的 InfoSphere Change Data Capture。在担任此职务之前,Tony 近二十年从事为客户和伙伴提供 Information Management 技术咨询,其中包含多个方面,有 DB2 调优、Information Server 和 Master Data Management。在成为顾问之前,Tony 从事过 Information Management 领域多项工作,从管理到开发。



James Yau, 技术解决方案架构师,InfoSphere Information Server, IBM

James Yau 的照片James Yau 是 InfoSphere Information Server DataStage 产品的认证高级解决方案架构师。目前,他在 InfoSphere Technology Enablement 机构负责 Information Server Boot Camp 内容开发和发布。James 具有多年 Information Server Suite 产品的顾问经验,包括 InfoSphere DataStage、QualityStage、Information Analyzer 和 FastTrack。在担任本职务之前,James 是 Business Partner Technical Enablement 团队的一员,InfoSphere Information Server 的技术项目经理。他的任务包括课程内容开发和发布,这其中包含教师指导、在线观看、自主学习等多种形式。此前,James 在 IBM 公司内外担任过多种角色,从软件开发到营销经理。



2010 年 11 月 10 日

简介

在如今这快节奏的世界里,应对变化的速度通常会影响一个企业的成败。无论是能对库存水平变化动态响应的零售商店还是对利率变化快速反应的金融机构,能够最快察觉变化并应对的企业将具有竞争优势。商务智能(BI)传统方法,即定时(比如,每天)将事务数据收集、转换,然后批量放入数据仓库,这种方式将不能满足企业的实时需要。此外,随着事务数据量上升,执行传统数据仓库加载的窗口缩小,这使得批处理实时数据的需求更难以实现。

填充数据仓库的方法通常包含三个过程:E(提取)、T(转换)和 L(加载)。

提取
从各种事务数据源中读取源数据,如 IBM DB2®、Oracle 和普通文件。传统方法通常需要读取整个事务数据库,筛选出从上一次填充后所需的数据。这意味着,如果事务数据有 100GB,如果上次加载后只有 5% 数据(5GB)发生变化,提取阶段仍然需要读取所有的 100GB 数据,只为了提取 5GB 变化的数据。
转换
将通常极不规范的事务数据转换成可用于 BI 分析的数据仓库格式,如星型模式。这包括在各事务系统中查找代码、连接数据、清理数据、将数据转换成维度数据等。(见 参考资料 中数据仓库 IBM Redbooks® 出版资料。)
加载
数据转换后,填充数据仓库,通常使用 SQL 或数据仓库数据库的自有导入/加载工具。

本文将考虑使用 InfoSphere Replication Server 如何能大幅减少提取过程的时间,这通过将 Replication Server 的输出与 InfoSphere Information Server(这里主要使用的部件是 DataStage)集成,以执行转换和加载过程。整个 ETL 过程可以大大缩短,并实现实时 BI。


技术概览

本文将讨论的两项关键技术是 InfoSphere Replication Server 和 InfoSphere DataStage(InfoSphere Information Server 的一个组件)。InfoSphere Replication Server 提供提取功能;InfoSphere DataStage 提供转换和加载功能。

InfoSphere Replication Server

使用 InfoSphere Replication Server 达到提取数据的高性能的关键是所有主要相关数据库都使用日志来记录数据库变化。例如,如果有记录插入表,则保存插入数据的日志记录就会写入数据库日志中,以便可用于恢复。同样,更新和删除也会被记录,并保存足够数据用于恢复。InfoSphere Replication Server 知道如何读取日志以获取数据库中变化数据(它现在支持 DB2 和 Oracle 原生日志读取)。因此,与扫描整个数据库(例如,100GB 数据库)查找插入/更新/删除记录不同的是,InfoSphere Replication Server 只要读取变化的日志数据(如上例,如果只有 5% 变化,那么就是 5GB 日志数据)。

InfoSphere Replication Server 架构的主要组件

  • Capture:该组件负责读取数据库日志,抽取增量。通常该组件在源数据库所在的机器上运行,但对于有些数据库,也存在远程运行。
  • Apply:该组件负责使用由抽取组件获得的增量,然后写进目标数据库。可以进行各种转换(例如行和列的子集)。支持多种目标表格式(例如,目标表可以看上去与源表一样),或者可以指定一个目标表为每个增量插入新的一行(例如,当源行被删除,不是删除目标行,而是插入一个标记为 “删除” 的新行,其中记录已删除的数据)。
  • Admin:该组件提供接口配置和管理 InfoSphere Replication Server。可以用 UI 接口和命令行接口。

架构选项

  • SQL 复制:这是自有的复制架构。SQL Capture 使用临时表,称为 Changed Data (CD) 表,来保存从日志中读到的抽取增量。SQL Apply 发出 SQL 命令读取 CD 表,然后发出 SQL 命令将增量写到目标表中。虽然性能上有点慢,但是 SQL Replication 在一些场景下表现良好,例如将源数据分配到大量目标库中。

    图 1 显示 Capture 使用 CD 表存储来自日志的抽取增量,Apply 读取表,然后将增量写入目标表中。

    图 1. InfoSphere SQL 复制架构
    Capture 使用 CD 表保存来自日志的抽取变量,Apply 读取表,然后将增量写入目标表
  • Q 复制:这是新式的架构,与 Q Capture 将抽取数据放入 CD 表中不同的是,它将抽取的数据写入 WebSphere MQ 队列。MQ 队列成为传输机制,在此,Q Apply 运行在目标机器上,从接收端队列读取数据,将重放事务并将增量写入目标中。因此,Q Replication 是实时复制,具有更高的性能、次秒级延时和极高的吞吐量。

    图 2 显示 Q Capture 获取来自日志的数据,写入 MQ 队列,Q Apply 读取队列,将增量写入目标表中。

    图 2. InfoSphere Q Replication 架构
    Q Capture 获取来自日志的数据,写入 MQ 队列,Q Apply 读取队列,将增量写入目标表中
  • 事件发布:事件发布本质上只要运行 Q Capture,无需 Q Apply。换句话说,与运行 Q Apply 来读取增量队列接收端不同,抽取增量被 Q Capture 以文档格式写入(XML 或 CSV,逗号分隔值),因此可以编写自己的程序直接从接收队列读取输出。本文稍后将讨论将其作为集成 InfoSphere DataStage 的可用选项,因为 InfoSphere DataStage 可直接使用来自 MQ 接收队列的增量,并避免 Q Apply 开销。

    图 3 显示一个用户应用程序读取 MQ 队列,并写入用户文件或用户表。

    图 3. InfoSphere 事件发布架构
    用户应用程序读取 MQ 队列,并写入用户文件或用户表

查看 参考资料 一章,获取关于 InfoSphere Replication Server 的更多信息。

InfoSphere DataStage

InfoSphere DataStage 是功能强大的 ETL 工具,它能够以图形方式创建执行 ETL 功能的作业,无需编写任何代码。该产品打包成 InfoSphere Information Server 产品的一部分。InfoSphere DataStage 有很多的内置转换功能,称为阶段。例如,有一个阶段是读取数据库表,一个阶段连接数据,一个阶段转换输入数据,一个阶段清理数据,等等。能以图形方式将一个阶段从面板拖到设计区,然后连接不同阶段,将一个阶段的输出作为另一个的输入。每个阶段都提供自定义属性(例如,输入表名、列定义、转换公式,等等)。然后编译一个作业,以 InfoSphere DataStage 专有语言生成可执行作业 。在每个阶段的定义中,当作业被执行使,数据就被提取、转换并加载。InfoSphere DataStage 的一个最显著的特点是,它是架构在高度可配置并行引擎上,同时具有专用文件结构。这些并行特性能让 DataStage 实现高性能。

图 4 显示在 InfoSphere DataStage Designer 客户端的 InfoSphere DataStage 作业的示例。

图 4. 在 InfoSphere DataStage Designer 客户端的 InfoSphere DataStage 作业的示例
屏幕截图以图形化显示设计区中不同阶段之间的数据移动

除了支持数据流设计,InfoSphere DataStage 还支持可视化工作流设计,如图 5 所示:

图 5. InfoSphere DataStage 工作流序列示例
InfoSphere DataStage 工作流示例的屏幕截图

查看 参考资料 中有关 InfoSphere DataStage 的更多细节资料。


InfoSphere Replication Server 与 InfoSphere DataStage 集成

概述

尽管 InfoSphere DataStage 有不同的阶段用于访问不同数据库的数据,它却不能仅通过读取数据库日志获取增量数据。另一方面,InfoSphere Replication Server 具有从数据库仅获取增量的功能,但它不具有像 InfoSphere DataStage 一样强大的转换功能。接下来让我们探索这两项技术各种集成选项。

基本上有两种架构方法来集成 InfoSphere Replication Server 与 InfoSphere DataStage:

  • 实时:增量数据直接被 InfoSphere DataStage 使用,没有中间分级。
  • 分级数据:增量数据被装载,作为文件或关联表。然后 InfoSphere DataStage 读取装载数据。

InfoSphere Replication Server 能以其中任何架构与 InfoSphere DataStage 集成。

实时集成

通过实时集成,源表中的增量被 InfoSphere Replication Server 的 Q Capture 组件抽取,然后写入 MQ 队列。尽管如此,与使用 Q Apply 读取目标的 MQ 队列增量,然后装载增量到分级表不同的是,只要让 InfoSphere DataStage 作业使用 InfoSphere Replication Server 的事件发布特性直接读取 MQ 队列并处理增量。

事件发布支持两种 MQ 消息格式 — XML 或逗号分隔值(CSV)。尽管 XML 非常轻便灵活,但 CSV 提供更佳的性能。InfoSphere DataStage 有一个 MQ Connector 阶段,它可以在作业中使用,从队列中读出消息。 然后,作业可以根据所选的消息格式解析消息,并执行所需转换(本 系列 将讲解一个详细示例)。

如 6 所示,Q Capture 读取日志并发送增量到 MQ 队列。然后数据被发送到目标 DB(ODS),在这里,它被解析、写进数据库,转换并发送至数据仓库 DB。

图 6. 实时集成细节
Q Capture 读取日志并发送增量到 MQ 队列。然后数据被发送到目标 DB(ODS),在这里,它被解析,写进数据库,转换,并发送至数据仓库 DB。

查阅 参考资料 一章中更多关于 InfoSphere Replication Server 的细节信息。

实时集成提供了最佳性能,因为它避免了装载增量数据的 I/O 和处理开销。尽管如此,由于 Q Capture 不断将增量压入 MQ,InfoSphere DataStage 转换作业需要能足够快速地使用和转换抽取的增量,以免落后于 Q Capture。使用 MQ 作为 Q 复制传输机制的优势之一是如果 InfoSphere DataStage 作业跟不上,MQ 能缓存增量。但显然,作业最终必须跟上。实时集成也许不是最佳的集成选项,如果所需转换包含的数据多于实时可用部分(例如,有很多组的情况)。在这种情况下,转换作业可能需要以与复制技术无关的方式将数据分级。

分级数据集成

与让 InfoSphere DataStage 转换作业直接使用 MQ 队列增量不同的是,分级数据方法直接将增量写入目标表,然后由 InfoSphere DataStage 转换作业读取。该分级表可以驻留在如 ODS (Operational Data Store) 上,在这里保存有转换作业所需的其他数据。该分级表称为 InfoSphere Replication Server 中的 Consistent Changed Data (CCD) 表。(对于熟悉 SQL 复制 Capture 的人来说,CCD 目标表与源中的 CD 表一样,实际上,如果 InfoSphere DataStage 转换作业可以在 CD 表驻留的源服务器上运行,它也可用使用,从而不必运行 SQL Apply。)对于 CD 或 CCD 表,日志中的增量总是直接插入分级表,并且它有一列表示日志中的操作是插入、更新还是删除。此信息然后可以供 InfoSphere DataStage 作业使用,执行转换。

图 7 显示包含日志标记和操作列的 CCD 表示例。

图 7. CCD 表示例的屏幕截图
包含日志标记和操作列的 CCD 表示例的屏幕截图

我们再仔细看看图 7 中的一些字段。

  • IBMSNAP_INTENTSEQ:这是一个不断增加的 LSN(日志序列号),它惟一确定各条日志记录。此信息被复制用于确认日志记录是否被处理过。
  • IBMSNAP_COMMITSEQ:每个事务都有惟一的 LSN。本例中,有四个事务,五项增量:最后两项更新属于同一事务(x'…1101213D')。InfoSphere Replication Server 保证目标中的事务一致性。因此,如果一个事务有多个操作,要么操作对应的所有行写入 CCD,要么一个也不出现。
  • IBMSNAP_OPERATION:它确定源中的记录是插入、更新还是删除。此信息可以用于 InfoSphere DataStage 作业内部以确定完成什么转换。例如,如果值是 ‘D’,则将信息写入审计文件中,记录此行已删除,但不删除数据仓库中的数据。

有了 CCD 中的分级数据,InfoSphere DataStage 作业可以安排定期(比如每个小时)读取 CCD 并执行转换,处理数据比实时 EP 集成多得多。尽管如此,由于 Apply 向 CCD 表插入新行与读取 CCD 的转换作业是异步的,您需要确保能够追踪 CCD 中哪些行已被处理过,哪些行是新进的。SQL 复制与 Q 复制中追踪增量的技术不同。

SQL 复制

使用 SQL 复制,要复制的表由 SQL Apply 使用的 “申请集” 定义。只有当申请集定期 “唤醒” 并执行复制处理周期时,SQL Apply 才复制数据。申请集可以配置为事件信号触发或定时启动(从一分钟到几个小时)。这意味着当申请集休眠时,CCD 表内容是静态的。如果将申请集配置为仅当 InfoSphere DataStage 作业不运行时执行订阅循环,则可以在 InfoSphere DataStage 作业中完成以下事项(请注意该作业安排定时运行):

  1. 读取整个 CCD 表
  2. 执行数据转换
  3. 删除 CCD 表所有内容
  4. 发送事件信号唤醒申请集以便它可以向 CCD 表填充新数据

另外,申请集可以预先安排为与 InfoSphere DataStage 作业运行时间不同。当然,这里会有危险,如果由于某些原因导致 InfoSphere DataStage 作业与复制循环同一时刻运行,可能结果会出错。

图 8. 分级数据集成,包括订阅循环
分级数据集成,包括订阅循环

(本 系列 第 2 部分将讲解一个详细示例)。

Q 复制

Q Apply 与 SQL Apply 不同,它连续运行。因此,没有预先安排 InfoSphere DataStage 作业在 CCD 表未被 Apply 改变时运行的选项。它有另外三个选项:

  • APPLYUPTO=CURRENT TIMESTAMP 运行 Q Apply( 97FP2 中的新选项)APPLYUPTO 参数是一个 Q Apply 选项,它告诉 Q Apply 只在特定时间应用 CCD 增量,然后就停止。

    InfoSphere DataStage 作业内有以下步骤:

    1. 读取整个 CCD 表。
    2. 执行数据转换。
    3. 删除 CCD 表所有内容。
    4. APPLYUPTO=CURRENT TIMESTAMP 启动 Q Apply,以便 Q Apply 能将自上次运行以来所抽取的增量放入 CCD 表。
    5. 等待 Q Apply 完成。
    6. 重复步骤 1。

    因此 Q Apply 只在转换作业结束时运行,并用新增量填充 CCD 表,以便在下一个 InfoSphere DataStage 作业循环中处理。请注意,这项技术只有在运行 InfoSphere DataStage 作业之间的循环足够小时才可用,这样这段时间累计的增量才能被 MQ 缓存(因为 Q Apply 将不运行)。

  • 停止/启动 Q Apply:这与上个选项相同,与 Q Apply 只在 InfoSphere DataStage 作业循环后运行一次这点不同,它要保持 Q Apply 运行,尽管它在转换作业过程中会被停止。
    1. 停止 Q Apply。
    2. 读取整个 CCD 表。
    3. 执行数据转换。
    4. 删除 CCD 表所有内容。
    5. 启动 Q Apply。

    这样就避免了 Q Apply 在 InfoSphere DataStage 作业循环中停下来的问题。Q Apply 将会持续运行,而不管 InfoSphere DataStage 作业循环之间的时间有多长。

  • 追踪 CCD 低/高标记:在 InfoSphere DataStage 作业开始时保存 IBMSNAP_COMMITSEQ 的最小值和最大值,只读取这些最小值和最大值之间的 CCD 内容,当作业完成时,更新这些最小/最大标记以读取下一个增量集。Q Apply 从不停止。在 InfoSphere DataStage 转换处理过程中,CCD 表将继续累计增量,但不会影响 InfoSphere DataStage 作业处理,因为新记录在处理范围之外。

    此方法复杂之处在于 InfoSphere DataStage(与 InfoSphere Information Server 一同发行的)不支持用全局变量追踪最小/最大值。为了保存这些值,要将它们写入文本文件或关联表中。如果使用关联表,这些值可在 DB2 Connector 阶段用作读取 CCD 表的依据。然而如果用文本文件,由于文本文件值无法在 DB2 Connector SQL 语句中使用( DB2 Connector 阶段的限制),需要使用不同的技术根据这些值读取 CCD 表。一个可行办法是使用 dsjob 调用 DataStage,并将同步点值作为运行时参数传入。

    1. 设置 CCD 表 GLOBAL_MINSYNCHPT=MIN(IBMSNAP_COMMITSEQ)-1(只初始化)。
    2. 设置 CCD 表 GLOBAL_MAXSYNCHPT=MAX(IBMSNAP_COMMITSEQ)
    3. 使用 IBMSNAP_COMMITSEQ >GLOBAL_MINSYNCHPT 和 <=GLOBAL_MAXSYNCHPT 读取 CCD 表所有行。
    4. 在读取数据是执行转换。
    5. 设置 GLOBAL_MINSYNCHPT=GLOBAL_MAXSYNCHPT
    6. 重复步骤 2。

    请注意:与其他选项不同,在运行 InfoSphere DataStage 作业时,不会删除 CCD 表内容。因此,清理 CCD 表是 InfoSphere DataStage 范围之外的单独的处理过程。当然,这样做有好处,CCD 现在可用于其他用途(例如审计)。

图 9. 数据流向数据仓库的实时集成,用 ODS 和没用 ODS 的
显示数据流向数据仓库的实时集成,用 ODS 和没用 ODS 的
表 1. 集成选项对比
注意事项实时分级数据
事件发布SQL 复制Q 复制
启动/停止 Q Apply追踪 CCD 中位置
延时(源中增量发生至到达 InfoSphere DataStage 作业的时间)最快,持续运行,没有 Q Apply 开销。但 InfoSphere DataStage 作业必须运行足够快以使用增量。如果是事件驱动,只有在触发事件时,InfoSphere DataStage 作业处理循环完成后增量才被复制。如果是时间间隔驱动,每隔一段事件增量就被复制。 增量不断被 Q Apply 复制,除了遇到 InfoSphere DataStage 作业正在处理。增量不断被 Q Apply 复制。
InfoSphere DataStage 作业未处理增量时,增量缓存在哪在 MQ 队列在 CCD 表在 CCD 表在 CCD 表
管理开销 1. MQ 监控 - 确保 MQ 队列不溢出
2. Q Capture 监控
1. SQL Capture 监控
2. SQLApply 监控
1. Q Capture 监控
2. MQ 监控
3. Q Apply 监控
1. Q Capture 监控
2. MQ 监控
3. Q Apply 监控
其他应用程序是否可以使用增量数据是。如果 InfoSphere DataStage 对队列非破坏性读取,其他应用程序就可以读取队列。 否。DS 作业处理后删除 CCD 数据。可以创建其他请用程序的独立申请。 否。DS 作业处理后删除 CCD 数据。可以创建其他请用程序的独立申请。 是。DS 作业处理后不删除 CCD 数据。
设置注意事项需要将 MQ 消息映射到列定义通常的 SQL 复制设置注意事项通常的 SQL 复制设置注意事项需要手工清理 CCD 表

结束语

本文讨论了 InfoSphere Replication Server 与 InfoSphere DataStage 产品的技术以及集成它们来填充数据仓库的不同方法。还涉及到各个集成选项的利弊。本系列第 2 部分将详细探讨两个具体集成选项:用分级表或 MQ 消息。还包括设置与配置,配以屏幕截图和分步指导。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=577357
ArticleTitle=使用实时数据填充数据仓库的高效解决方案,第 1 部分: 集成 InfoSphere Replication Server 与 InfoSphere DataStage
publish-date=11102010