商业智能最佳解决方案--微软数据仓库

简介

本文包含了大量在数据仓库和丹析实现中使用SQL Server和分析服务 (AnalysisServices)白勺最佳实践和解决方案。这些信息在过去的时间被不断归纳整理。针对使用SOL Server和分析服务进行工作的开发人员、DBA、系统分析员、用户和其他人、以帮助他们更加深入地了解商业信息。本文涵盖了从通常的最佳实践到精确的建议或提示,例如如何将当前月份作为缺省时间维度,其中的一些内容已经在微软其他的白皮书中讨论过.余下的主题主要来自数据库的尽应。在这里.把它们集中起来旨在方便开发者或设计者使用微技的数据数据仓库框架进行工作 。

本文读者对象是熟悉微软SOLServe"和分析服务的开发者,再重申一遍,这不是一篇介绍性的文童:

关系型数据仓库设计和管理

这部分内容讲述支持分析服务多维数据集韵数据仓库;设计旨在为实现SQL Sever2000而服务。

选择星型或雪花型架构

当为你的分析应月创建关系数据处理存储时,你可以为数据存储选择星型或雪花型架构,星型架构有一个中心事实数据表,它和许多维度表柜关联。雪花型架构使用一 个类似的结构.不同的是一个维度表能够弓用或从属于其他维度表,分析服务能咯在任意一种架构下很好地工作。通常而言,雪花架构是构建分析服务多维数据集的镊有效的方式,只允许让最终用户能直接访问关系数据存储的情况下才考虑星型架构 。

·  雪花型架构是完全规范化的,帮助你维护标准的维度和清晰的层坎结构,使用这种架构,可以轻松实现子代有且只有一个父代,并且没有两个成员的名字是一样的。当然,你需要定义主键.外键的关系和恰当的索引以保证层次韵完整性。但是,在蛙度的规格亿表格中进行这些工作会更加简单。如果使用雪花絮构,要在维度的每一级创建一个代理键。

·  雪托型架桂是纽建分析服务多维数据集的最有效的袈构,如果维度关系型巢构的唯一角色是组建多维数据集,那么就没有理由选择星状模式。

.  如果有最终用户直接访阃关系数据库,则创建不齐整的星型维度(我们建议所有的用户通过多维数据集进行访问而不要直接访问关系数据库 )。通常用户易于通过星状维度进行导航。并且,通过星状模式进行查询比通过雪花状模式进行查询效率更高。

· 通常的做法是将星型架构作为雪花架构的视图 ,使用这种方法解决了导航的问题 这个时候你需要检验性能是否遭受损失。

通过视图实现用户直接访问

如果必须提供用户对关系数据库直接进行存取 (以代替只通过 多维数据集区进行访问),不要授权对在关系数据存储器里的任何表直接存取。作为替代 ,为基础表创建视图并给予对视图SELECT操作的权限 然后允许用户通过这些视图进行访问。确保每个对象的名字 (视图和列 )对商务用户来说是有意义的 这些可以和将在分析服务 多维数据集中使用的名字相 同。使用视 图是一种比较好的系统设计方法 原 因如下:

· 使用视图在物理数据库和下游系统之间提供了缓冲,如用户访问和多维数据集组建 ,这样增加了弹性。

· 它增加了对系统进行重大的物理改变的同时最小化,对其他应用的破坏的可能性。

出于类似的理由,我们建议所有的用户访问分析服务必须通过虚拟多维数据集而不是物理多维数据集。使用代理键以确保数据仓库能随着时间的推移而增长或扩展。这样的处理对于大规模应用实施是至关重要的。

维度表的外键应当是一个由数据仓库的分段处理进行维护的数字代理键 (典型的整数)。业务键 (客户账号、售主数量、优惠折扣号)都应当最为维度成员的属性 使用业务键在维度表中作为主键来替代代理键将会导致一系列风险 。

· 源系统可能会重用一个业务键 。

· 未来可能希望将来白几个来源 的信息联合起来。管理在数据仓库中的键让你能够解决名称空间的;中突。

· 源系统可能在实质上改变一个维度成员的属性。例如 :希望在数据仓库 中跟踪的一个客户。

使用代理键可避免这些潜在的问题 但是管理代理键将增加一些成本。管理维度本身耗费较少的成本 虽然标识列属性将使这些变得非常简单。使用代理键最困难或者开销最大的部分是在事实表加载的时候进行键的查询。但是 有经验的专业人员会对代理键做预先处理 ,因为他们(或者他们的客户)知道采用这种方式将最终获益。

在数据仓库中使用分区

分区是一种改进多维数据集性能的重要策略,这对于大规模应用的实施是至关重要的。关系数据库支持一种类似的分区,这对关系数据存储器来说非常有用。分区的概念是用键来进行横向划分数据。在关系数据库中通过给每个分区建立独立的物理表并为成员表定义一个联合视图来实现。物理存储复杂性对于进行分析的用户是隐藏的。对使用终端服务器.让数据包在合适的计算机上运行在 生产过程中.使用SQL代理来调度作业。 对数据仓库进行分区有几个 明显的好处 :

· 节省了查询时间。

· 改善了数据加载时间和数据库的可维护性。

· 分区可以很好地解决从现有数据库中裁减陈旧数据的问题。

为数据仓库选择恢复模型

从正常的灾难中恢复或保护数据仓库的过程和其他数据库系统别无二致 ,数据仓库的DBA必须熟悉大型数据库备份和恢复技术。在数据仓库 中.大多数的数据通常是静态的,曾经在过去较长一段时间以前被加载。当设计备份和恢 复 的策略 时可 以利 用这些 有 用的信 息 。为 SQL Server2000的关系数据存储器所选择的恢复模型,对数据的加载性能和存储需求的影响非常巨大。SQLServer2000支

持 以下的恢复模型 。

· 完全恢复——完全事务 日志提供将数据库恢复到故障点或特定即时点的能力。

· 大容量 日志记录恢复——这种模式降低了日志空间的消耗 并且改进 了大规模操作时的性能 ,例如创建索引和批量拷贝。

· 简单恢复——事务从日志的结尾处被截断。这种方法提供最佳 的性能和最低的 日志要求空间。但是 ,只能从最近的一次完整备份 中恢复 任何从 日志结尾处的变更都需要重做。

特定即时点恢复是许多事务处理系统是至关重要的。对于关系数据存储来说 这样不用管理用户事务 但是,很可能导致牺牲恢复点从而最小化 日志带来的性能影响。如果使用批量记录恢复或者简单恢复模式,应在数据加载后补偿完成备份 或者确保 ETL系统能重新创建数据的加载 (更多的关于恢复模型的细节在SQLserver在线书籍中涉及讨论)。

DTS和 ETL (Extract,Transform,Load)处理

下文则是关于针对提取 转换和加载(ETL)处理而使用 SQLServer数据转换服务 (DTS)的介绍 。

设计和维护弹性的 ETL处理

数据仓库是信息系统 的一部分 。关系数据存储由诸如数据转换服务 (DTS)这样的ETL系统构成 ,同时也包含了在分析服务中处理 OLAP多维数据集。为了使 系统在面临问题和故障时具有更强的应对能力 ,我们可以在数据 的设计和维护 时做如下事情 :

ETL设计

源系统 的DBA和数据仓库的DBA之间沟通不力通常是问题产生的根本原因。一个在源系统中的 “小”变更可能导致在数据仓库中的加载失败.或者是错误的数据加载。

异常处理

在设计 ETL系统时.让它对加载故障、不完整数据加载和错误数据加载引发的潜在问题富有更好的应对能力。

· 针对加载错误的设计:所有的ETLT具集应当能够在某一步骤发生故障时发出警报.从一个失败的完整加载中恢复需要排查故障并从那个检查点开始重启数据处理.应当模块化ETL应用并将所有的即时点设计成为可重新启动的。

· 针对不完整数据加载 的设计 :ETL系统应当通过比较源和 目标的列计数 、校验和 .或者哈希值来检查每个进程步骤的数据完整性 这个过程不会 自己在源数据中捕获问题。如果数据量是相对可预测的.比照最近加载的数量检查列计数和汇总事实数量以确定每个以天计算的数据集是在预期的范围内。针对这些问题 ,在数据仓库中用一个审核键标记所有的数据列 以简单化在任何特定的进程中所加载的列标识。为了从一个不完整的加载中恢复 .回滚部分加载数据然后全部重新加载 .或者只加载增量数据。

· 针对错误的数据加载的设计:如果错误 的数据源自干 ETL逻辑上的错误 .最好的办法是在出现错误并且重新在正确的系统上加载之前 的那个检查点上恢复数据仓库表。如果加载量与加载时限 (LoadWindow)高度相关 ,你也许应该选择编写一些 T—SOL脚本去修正这些错误数据(当然 .在用数据的副本进行第一次测试之后 )。记住错误的数据也许在几天或者几周之内都发现不了。如果面临的是严重错误 .大多数的数据仓库将不得不谨慎地计划如何在向最终用户提供可 以接受的服务 的同时进行恢复。最后 .改进 ETL效率 以超出加载 时限的需要 .这将为出现一些异常情况时留下些余地。

多维数据集的问题

通过分析服务 .多维OLAP分区为ETL问题提供了一个 保护层.这是因为用户访问的是多维数据集 .但是处理是在 关系数据仓库的后台进行的。分析服务为用户提供了不宕机增量多维数据集数据处理。如果一个过去的数据加载被忽略或者是不完整的.你可以如使用一个正常的多维数据处理去增量地处理这些改变 .从而保证数据的完整性。请确保对源数据的查询只针对那些丢失的数据。生成一个检查键作为数据仓库架构的一部分有助于上述操作。分析服务没有常规表里的 ”删除”、”更新”这些概念 .有两种方式在多维OLAP分区和它的下游聚合中去 “修正”这些数据:

· 用插入偏置事务来回滚损坏的数据以计算出总和。这将带来负面影响 .例如引发事务计数和其他的计算度量值错误 。

完全刷新分区数据 。如果已经将分区设计成为以时间来进行划分的话.这是最普通并且奏效的方法。

多维数据集在重新处理的过程中对于查询是一致保持可用的。

从文本文件中将数据加载到表中

有几种方法可以将来自文本文件的数据加载至表中。以下将这几种方法列出 ,按照排列的顺序 .速度递减 :

1 通过Transact—SQL进行大量的插入 。

2 通过DTS的ExecSQL任务进行大量的插入 (和 1的性能非常接近)。

3 大量插入DTS任务。

4 BCP (尽管转换数据任务在一些情况下更快 )。

5 转换数据DTS任务只使用拷贝转换 .只选择正确的最小的日志选项。

6 转换数据DTS任务使用不同于拷贝的一个或者多个预定义的转换 .但是不使用 ActiveX脚本。

7 转换数据DTS任务使用一个或者多个ActiveX脚本。VBScript比微软 的JScript要快。

其他需要考虑的事项可能影响你选择的方式。例如:当数据集的数量非常巨大 (1亿行或者更大)时 .使用BCP导入原始数据然后在 SQLServer中使用 SQL语句的Join来进行转换原始数据是明智的做法。

从关系源加载数据至表中

有几种技术可以做到从关系源加载数据至目标表.以下将这几种方法列出.按照排列的顺序 .速度递减 :

1 用本地或者连接的服务器执行Transact—SQL的sE— LECT INTO语句。Transact—SQL的语句可 以在任何环境中执行.但是 .ExecuteSQL的DTS任务通常是首选。SELECTINTO语句生成目标表并使用由查询的结果产生的数据集来组建表。这是从关系源直接加载并且没有 日志的唯~方法。

2 转换数据DTS任务且只使用拷贝转换 .只选择正确的最小的日志选项。

3 转换数据DTS任务使用不同于拷贝的一个或者多个预定义的转换 .但是不使用 AcnveX脚本。

4 转换数据DTS任务使用一个或者多个ActiveX脚本 。VBScript比JScript要快 。

在ELT处理时更新表

因为更新语句会被 日志记录,所以在 ELT处理数据时更新一个表通常比插入数据要慢一些。有几种技术可以更新基于一个或多个源关系表的表数据最快的技术是通过本地或者连接的服务器使J~JTransact—sQL的uPDATE语句在一个事务 中执行所有的更新。这通常从ExecuteSQLDTS任务执行.其中的效率来自于在一组行中执行更新.而不是一行一行地进行更新。

两个减少技术有效性的问题:

1 UPDATE事务被作为一个单独的实体进行日志记录。如果更新影响到其他的行 .日志的大小将显著增加。虽然这个逻辑可能被写进Transact—SQL语句中 但是UPDATE语句的批量尺寸没有固有的概念。

2 单一UPDATE语句的逻辑和语法可能不支持极端复杂的业务需求。一个存储过程经常被用来执行复杂的逻辑。但是一些ETL系统的开发人员更倾向于不使用存储过程。

数据驱动查询 (DDQ)DTS任务是安全而且有效 的选择。DDQ任务包含批量的逻辑 .ActiveX脚本能处理复杂的逻辑和转换。对于DDQ任务 的性能来说,可以和执行用指针来进行逐行更新的性能相 比较。DDQ DTS任务是从文件存储的信息中直接执行更新操作的唯一途径。在一般情况下 .加载 “update 文件进入集结待命区 (stagingarea)后执行一个 SQLUPDATE语句更加高效。

获得 DTS包的列表

查询 MSDB数据库的系统表可 以获得 DTS包的列表(如 :组建一个列表框 ):

/*ListServer Packages*/

SELECT DISTINCT name FROM sysdtspackages

在转换数据任务中跳过第一行

如果你需要在转换任务中跳过源文件的第一行 .修 改DTS“文本文件 (源)“的连接定义为平面文件。点击 ”属性“按钮 .然后指定你希望跳过的行数。更改 “第一行“和“最后一行”在转换数据任务的选项标签中的设置 ,对于跳过第一行是不起作用的。

执行DTS包

理解DTS包在哪里执行是个难题 .例如:如果你将数据从serverA移动至serverB.使用存储在serverB上的一个DTS包 .你可能认为那个包会在 serverB上执行。这种情况不一定发生。无论包被储存在哪里或者数据驻留在哪里 ,DTS包都在启动执行的计算机上执行。数据在包机器上往复 .并且任何包的步骤例如ActiveX脚本也是在那个计算机上执行。在很多情况下 .尤其是在开发周期的早期 .启动DTS包的计算机可能是一个桌面计算机.这将导致DTS包的非最佳性能。

一                                                                一种方法可以避免这种情况的发生,就是在开发周期中使用终端服务器。让数据包在合适的计算机上运行。在生产过程中,使用SQL代理来调度作业。

商业智能最佳解决方案--微软数据仓库 翻译相关推荐

  1. 2023爱分析·商业智能应用解决方案市场厂商评估报告:数聚股份

    目录 1. 研究范围定义 2. 商业智能应用解决方案市场分析 3. 厂商评估:数聚股份 4. 入选证书 1.     研究范围定义 商业智能(BI)是在实现数据集成和统一管理的基础上,利用数据存储和处 ...

  2. 精通Web Analytics 2.0 (12) 第十章:针对潜在的网站分析陷阱的最佳解决方案

    精通Web Analytics 2.0 (12) 第十章:针对潜在的网站分析陷阱的最佳解决方案 精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第十章:针对潜在的网站分析陷阱的 ...

  3. 专属含PCR抑制剂的环境样本微生物拷贝数定量的最佳解决方案!

    腐植酸(Humic acid,HA)是动植物遗骸,主要是植物的遗骸,经过微生物的分解和转化,以及地球化学的一系列过程造成和积累起来的一类有机物质.它的总量大得惊人,数以万亿吨计.江河湖海,土壤煤矿,大 ...

  4. 前端服务器OWA 访问显示异常最佳解决方案

    EXCHANGE2003环境: 前端服务器:denver     后端服务器:sbs1 出现的问题: 当从一台XP客户端通过OWA进行访问时,如直接通过后端[url]http://sbs1/excha ...

  5. java 取整_javascript 解决默认取整的坑(目前已知的最佳解决方案)

    javascript 解决默认取整的坑(目前已知的最佳解决方案) 复现该问题 js在数字操作时总会取更高精度的结果,例如1234/10结果就是123.4,但是在c或者java中整数除以10的结果还是整 ...

  6. android图片垂直居中,img图片在div里垂直居中的最佳解决方案

    图片在div里水平居中是非常简单的,但是在垂直居中方面就不是那么容易了,青岛星网下面跟大家分享:img图片在div里垂直居中的最佳解决方案,使用Flexbox来垂直居中图片. HTML代码部分 CSS ...

  7. PHP如何实现定时任务,PHP定时任务方法,最佳解决方案,PHP自动任务处理 自动备份

    PHP如何实现定时任务,PHP定时任务方法,最佳解决方案,PHP自动任务处理 自动备份 参考文章: (1)PHP如何实现定时任务,PHP定时任务方法,最佳解决方案,PHP自动任务处理 自动备份 (2) ...

  8. Mac无法连接到WiFi怎么办?帮您恢复在线的最佳解决方案

    苹果MAC系统一直连不上WiFi,也不知道哪里出现问题,此问题大部分用户应该都遇到过吧.MAC系统无法加入WiFi网络的原因多种多样,一般最常用的办法就进入网络进行查看和设置,如果你不熟悉苹果MAC系 ...

  9. 计算机输入法切换用户,输入法切换不出来电脑输入法不见了的最佳解决方案

    输入法是系统自带的输入工具,我们可以根据自己的习惯来选择切换要输入英文还是中文,不过有时候会遇到一些问题让用户们很抓狂,比如常见的输入法切换不出来,或者电脑输入法不见了的现象,这样都会导致输入法无法正 ...

最新文章

  1. 02CSS基础选择器
  2. 计算机组成原理第3版谢树煜,计算机组成原理(第3版)
  3. 优秀的博客与文章总结链接地址
  4. leetcode算法题--增量元素之间的最大差值
  5. Matlab的部分文件操作
  6. Android --- TabHost 切换时,改变选项卡下字体的状态(大小、加粗、默认被选中第一个)
  7. 【牛客 - 370B】Rinne Loves Graph(分层图最短路 或 最短路dp)
  8. c语言FRA地址自动加一,c – 如何使用c语言在framebuffer中绘制图形?
  9. 35岁学嵌入式合适吗_保姆级攻略来了!嵌入式冰箱该怎么选?看这篇就够了
  10. Elasticsearch之sense插件的安装(图文详解)
  11. 比较两个数的大小的代码比较:(C语言)
  12. 海康网络摄像头实时预览OCX控件
  13. java时钟时针绘制代码_java实现时钟效果
  14. 图解AUTOSAR(四)——基础软件层(BSW)
  15. 纯净版英雄联盟LOL如何开启 2022年8月8日方法
  16. 1.54寸墨水屏驱动板原理图+PCB
  17. POI excel插入图表
  18. SpringBoot使用之yaml配置注入(推荐使用)
  19. 八、Identity Card
  20. 哪个软件可以测试脸型适合什么发型,万能脸型公式,4个问题测出你的脸型和适合的发型!...

热门文章

  1. 渗透测试工程师面试题目大全
  2. jad环境变量配置_Java Jad 反编译
  3. Sequel Pro 美化SQL
  4. 这都都不懂,你还敢来面试?
  5. php 点号 的用法,基于php中echo用逗号和用点号的区别详解
  6. DAO启动教程:完成这5步,你就可以开启自己的DAO事业
  7. php得round,PHP中的round()函数
  8. PlantUML 绘制时序图
  9. 降维分析PCA和FCA
  10. 一文了解数字签名、数字证书、自签证书