【数据仓库设计基础(四)】数据仓库实施步骤

文章目录

  • 1.定义范围
  • 2.确定需求
  • 3.逻辑设计
    • 1)建立需要的数据列表
    • 2)识别数据源
    • 3)制作实体关系图
  • 4.物理设计
    • 1)性能优化
    • 2)数仓的拓展性
  • 5.装载数据
  • 6.访问数据
  • 7.管理维护

实施一个数据仓库项目的主要步骤是:

  • 定义项目范围
  • 收集并确认业务需求和技术需求
  • 逻辑设计
  • 物理设计
  • 从源系统向数据仓库装载数据
  • 使数据可以被访问以辅助决策
  • 管理和维护数据仓库

1.定义范围

项目范围定义了一个数据仓库项目的边界。典型的范围定义是组织、地区、应用、业务功能的联合表示。

定义范围时通常需要权衡考虑资源(人员、系统、预算等)、进度(项目的时间和里程碑要求)、功能(数据仓库承诺达到的能力)三方面的因素。

项目范围是设定正确的期望值、评估成本、估计风险、制定开发优先级的依据。

 

2.确定需求

数据仓库项目的需求可以分为业务需求和技术需求。

1)定义业务需求

  • 建立数据仓库的主要目的是为组织赋予从全局访问数据的能力。数据的粒度必须能够满足用户执行分析的需求,并且数据应该被表示为用户能够理解的业务术语。
  • 对数据仓库中数据的分析将辅助业务决策:数据仓库的设计者应该清楚业务用户是如何做决策的,在决策过程中提出了哪些问题,以及哪些数据是回答这些问题所需要的。
  • 在为数据仓库收集需求的过程中,还要考虑设计要能适应需求的变化。

2)定义技术需求

  • 数据来源
    数据仓库的数据来源是操作型系统,这些系统日复一日地处理着各种事务活动。操作型系统大都是联机事务处理系统。数据仓库会从多个操作型源系统抽取数据。
  • ETL
    操作型系统里的数据需要一个中间处理过程,这就是所谓的ETL过程。需要知道如何清理操作型数据,如何移除垃圾数据,如何将来自多个源系统的相同数据整合在一起。
  • 数据的更新频率
    例如,如果需要进行长期的或大范围的数据分析,可能就不需要每天装载数据,而是每周或每月装载一次。注意,更新频率并不决定数据的细节程度,每周汇总的数据有可能每月装载。

 

3.逻辑设计

接着进行逻辑设计:需要定义特定数据的具体内容,数据之间的关系,支持数据仓库的系统环境等,本质是发现逻辑对象之间的关系。

1)建立需要的数据列表

很多情况下,为了得到所需的全部数据,需要适当扩展用户需求或者预测未来的需要,一般从主题域涉及的业务因素入手。

例如,销售主题域的业务因素可能是客户、地区、产品、促销等。然后建立每个业务因素的元素列表,依据也是用户提出的需求。最后通过元素列表,标识出业务因素之间的联系。

这些工作完成后,应该已经获得了如下的信息:

  • 原始的或计算后的数据元素列表
  • 数据的类型
  • 合理的数据分组,比如国家、省市、区县等分成一组,因为它们都是地区元素;
  • 数据之间的关系,比如国家、省市、区县的包含关系等。

 

2)识别数据源

现在已经有了需要的数据列表,现在考虑:从哪里可以得到这些数据,以及要得到这些数据需要多大的成本。需要把上一步建立的数据列表映射到操作型系统上

从哪里获取:

应该从最大最复杂的源系统开始,在必要时再查找其他源系统。数据的映射关系可能是直接的或间接的,比如销售源系统中,商品的单价和折扣价可以直接获得,而折扣百分比就需要计算得到。

通常维度模型中的维度表可以直接映射到操作型源系统,而事实表的度量则映射到源数据在特定粒度级别上聚合计算后的结果。

成本:

某些数据的获得需要较高的成本,例如,用户想要得到促销相关的销售数据就不那么容易,因为促销期的定义从时间角度看是不连续的。

 

3)制作实体关系图

逻辑设计的交付物是实体关系图(entity-relationship diagram,简称ERD)和对它的说明文档(数据字典)。实体对应关系数据库中的表,属性对应关系数据库中的列。

在维度模型的ERD中,实体由事实表和维度表组成,关系体现为在事实表中引用维度表的主键。因此先要确认哪些信息属于中心事实表,哪些信息属于相关的维度表。维度模型中表的规范化级别通常低于关系模型中的表。

 
 

4.物理设计

物理设计指的是将逻辑设计的对象集合,转化为一个物理数据库,包括所有的表、索引、约束、视图等。

1)性能优化

比较通用的数据仓库优化方法有位图索引和表分区。

位图索引对索引列的每个不同值建立一个位图。

  • 和普通的B树索引相比,位图索引占用的空间小,创建速度快。
    但由于并发的DML操作会锁定整个位图段的大量数据行,所以位图索引不适用于频繁更新的事务处理系统而数据仓库对最终用户来说是一个只读系统,其中某些维度的值基数很小,这样的场景非常适合利用位图索引优化查询。
  • 遗憾的是有些数据库管理系统如MySQL,还没有位图索引功能。

大部分数据库系统都可以对表进行分区。

  • 表分区是将一个大表按照一定的规则分解成多个分区,每个表分区可以定义独立的物理存储参数。将不同分区存储到不同的磁盘上,查询表中数据时可以有效分布I/O操作,缓解系统压力。
  • 分区消除:分区还有一个很有用的特性,叫做分区消除。查询数据的时候,数据库系统的优化器可以通过适当的查询条件过滤掉一些分区,从而避免扫描所有数据,提高查询效率。

 

2)数仓的拓展性

从技术上讲,可扩展性是一种通过增加资源,使服务能力得到线性扩展的能力。

  • 比方说,一台服务器在满负荷时可以为一万个用户同时提供服务,当用户数增加到两万时,只需要再增加一台服务器,就能提供相同性能的服务。
  • 随着时间的推移,数据量会越来越大,因此在做数据仓库物理设计时,出于可扩展性的考虑,应该把对硬件、软件、网络带宽的依赖降到最低。?

 

5.装载数据

这个步骤实际上涉及整个ETL过程。

需要执行的任务包括:

  • 源和目标结构之间建立映射关系;
  • 从源系统抽取数据;
  • 对数据进行清洗和转换;
  • 将数据装载进数据仓库;
  • 创建并存储元数据。

 

6.访问数据

访问步骤是要使数据仓库的数据可以被使用,使用的方式包括:数据查询、数据分析、建立报表图表、数据发布等。根据采用的数据仓库架构,可能会引入数据集市的创建。

访问步骤需要执行以下任务:

  • 为前端工具建立一个中间层。在这个中间层里,把数据库结构和对象名转化成业务术语,这样最终用户就可以使用与特定功能相关的业务语言同数据仓库交互。
  • 建立和管理数据仓库里的中间表和汇总表。建立这些表完全是出于性能原因。
    中间表一般是在原始表上添加过滤条件获得的数据集合,汇总表则是对原始表进行聚合操作后的数据集合。这些表中的记录数会远远小于原始表,因此前端工具在这些表上的查询会执行得更快。

 

7.管理维护

这个步骤涵盖在数据仓库整个生命周期里的管理和维护工作。
这步需要执行的任务包括:

  • 确保对数据的安全访问
  • 管理数据增长
  • 优化系统以获得更好的性能
  • 保证系统的可用性和可恢复性等

 
 
参考:《Hadoop构建数据仓库实战》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/90382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue封装全局SVG组件

1.SVG图标配置 1.安装插件 npm install vite-plugin-svg-icons -D 2.Vite.config.ts中配置 import { createSvgIconsPlugin } from vite-plugin-svg-icons import path from path export default () > {return {plugins: [createSvgIconsPlugin({// Specify the icon fo…

04. 人工智能核心基础 - 导论(3)

文章目录 人工智能和其他学科的关系为什么学习人工智能怎么学好人工智能?一些问题 Hi,你好。我是茶桁。 基于上一节课咱们的整体强度有点大,而且咱们马上也要进入高强度内容了,那么这一篇咱们就稍微水一篇吧。来聊聊天&#xff0…

FPGA 多路视频处理:图像缩放+视频拼接显示,HDMI采集,提供2套工程源码和技术支持

目录 1、前言版本更新说明免责声明 2、相关方案推荐FPGA图像缩放方案推荐FPGA视频拼接方案推荐 3、设计思路框架视频源选择IT6802解码芯片配置及采集动态彩条缓冲FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择 视频拼接算法图像缓存视频输出 4、vivado工程1&am…

【计算机网络】图解路由器(一)

本系列包含: 图解路由器(一)图解路由器(二) 图解路由器(一) 1、什么是路由器?2、什么是路由选择?3、什么是转发?4、路由器设备有哪些类型?5、根据…

创建vue3项目、链式调用、setup函数、ref函数、reactive函数、计算和监听属性、vue3的生命周期、torefs的使用、vue3的setup写法

1 创建vue3项目 # 两种方式- vue-cli:vue脚手架---》创建vue项目---》构建vue项目--》工具链跟之前一样- vite :https://cn.vitejs.dev/-npm create vuelatest // 或者-npm create vitelatest一路选择即可# 运行vue3项目-vue-cli跟之前一样-vite 创建的…

【小笔记】fasttext文本分类问题分析

【学而不思则罔,思维不学则怠】 2023.9.28 关于fasttext的原理及实战文章很多,我也尝试在自己的任务中进行使用,是一个典型的短文本分类任务,对知识图谱抽取的实体进行校验,判断实体类别是否正确,我构建了…

高级时钟项目(2)Json文件解析学习---C语言版本

笔者来介绍一下json文件解析 1、背景介绍 笔者在获取天气数据的时候,是通过MCU的WIFI去获取,但是获取到的数据json数据,需要解析,C语言没那么解析库,所以就需要找一些开源的解析库。 笔者找到cjson这个适用于C语言…

Vue - 组件递归

目录 组件递归子组件父组件 组件递归 当要渲染一个目录时,因为可能有嵌套数据,并且组件的层级未知,可以使用组件递归来解决 注意点: 1,使用递归时必须提供 name,也就是通过组件的 name 递归自己。 2&am…

Anaconda添加channels后出现unexpected urllib3 DEBUG logging from conda-build

1.问题描述 anaconda更新之后添加channels后出现bug: (base) ~/zlib-feedstock % conda build recipe 2>&1 | tee out ... INFO:conda_build.metadata:Attempting to finalize metadata for libzlib DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1):…

【c语言】通讯录【动态版本:有排序和文件操作】

目录 一、通讯录定义 二、通讯录的实现 1、test.c中菜单的实现 2、通讯录的创建逻辑 3、初始化 4、检查容量和添加 5、查找 6、删除功能 7、修改功能 8、打印 9、查找并打印 10、qsort排序 11、摧毁 12、保存数据到文件 13、从文件中读数据 完整代码: 一、通讯录定…

ABC310D Peaceful Teams

ABC310D Peaceful Teams 洛谷[ABC310D] Peaceful Teams 题目大意 有 n n n个运动员以及 m m m对数,每对数为 A i A_i Ai​和 B i B_i Bi​,表示 A i A_i Ai​和 B i B_i Bi​不能分在同一小组。你需要将这些人分为 t t t个小组,每个小组不…

【C++进阶(六)】STL大法--栈和队列深度剖析优先级队列适配器原理

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 栈和队列 1. 前言2. 栈和队列的接口函数熟悉3. …

《淘宝电商业务场景》API接口教程获得淘口令真实url

淘口令API接口的本质就是一款调用相关技术的应用程序接口,同时也是一种通过互联网传输数据的方式,可以实现各种各样的应用场景。比如企业运用在分享商品页面的过程中,可以简单组成一个淘口令,以便于分享淘口令。淘口令解析API接口…

java easyexcel 导出多级表头

maven <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>${easyexcel.version}</version> </dependency> 导出行的对象 import com.alibaba.excel.annotation.ExcelIgnore; import …

基础算法--KMP字符串

KMP 算法是一个快速查找匹配串的算法&#xff0c;它的作用其实就是本题问题&#xff1a;如何快速在「原字符串」中找到「匹配字符串」。 在朴素解法中&#xff0c;不考虑剪枝的话复杂度是 O(m∗n) 的&#xff0c;而 KMP 算法的复杂度为 O(mn)。 KMP 之所以能够在O(mn) 复杂度内…

leetCode 213. 打家劫舍 II 动态规划 房间连成环怎么偷呢?

213. 打家劫舍 II - 力扣&#xff08;LeetCode&#xff09; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 &#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#xff0c;相邻的房屋装…

websocket连接实例

websocket连接 此篇websocket是最简单的运用&#xff0c;虽然简单&#xff0c;但也是需要注意 还有其它方法货协议&#xff0c;比如socket.js等。今天时间不充裕虽然例子都写好了&#xff0c;下次更新websocket所有相关的东西。提前想了解的&#xff0c;可私信 前端 var webs…

Spring Cloud Stream Kafka(3.2.2版本)使用

问题 正在尝试只用Spring Cloud Stream Kafka。 步骤 配置 spring:cloud:function:definition: project2Building stream:kafka:binder:brokers: xxxx:9002configuration:enable.auto.commit: falsesession.timeout.ms: 30000max.poll.records: 30allow.auto.create.top…

PHP Web 开发基础

PHP是动态类型的Web开发的脚本语言&#xff0c;PHP以页面文件作为加载和运行的单元&#xff0c;PHP现在有了Composer作为开发包管理。 1.使用Composer管理依赖 自从.NET开发用了Nuget管理程序集依赖&#xff0c;我就再也离不开它了&#xff0c;幸亏Java中也有Maven管理jar包&…

如何定时备份使用Docker构建的MySQL容器中的数据库

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…