数据仓库系列:初识数仓
数据仓库系列:初识数仓
本节是数据仓库系列文章的第一篇,本系列的目的在于快速的构建一套最小化可运行的基础数据体系,过程中也会涉及一些数仓的理论知识,但更偏重的是数仓的实现和背后的思考逻辑、所以在开发实施过程中会提供相对多的代码示例和具体的实现细节。 |
另外需要对数仓的界限做下限制,本系列所讨论的数仓是从数据接入后到数据结果表生成。
最后需要指明的是本系列只涉及离线数仓,不涉及实时数仓,有关实时数仓和离线数仓的区别等,请进一步阅读其它资料。
最后,本系列参考了很多前辈在数据仓库建设方面的经验文章,本系列将其纳入到体系中,部分相关的参考会在文中列出,但更多的会集结起来,在问题汇总章节或者以篇外的形式给出,请知悉。
本系列的大纲规划如下(实际执行可能会有调整)
1、初识数仓:什么是数仓、数仓的用途等
2、数仓规划:数仓矩阵、分层分线、分主题设计等
3、数仓设计:数仓模型、事实表(拉链表、累积表)、维表的设计等
4、数仓开发:数仓表初始化和更新方式、任务调度、数据处理的一些思想
5、数据计算:大盘指标(新增、活跃、留存、回流)的计算框架、LTV的计算框架等
6、数仓规范:元数据规范(表命名、存储周期等)、生成规范、调度规范、代码规范
7、数仓问题:数仓相关的技术问题、经验问题和发展问题汇总
首先会对数仓是什么和数仓建设包含哪些内容有基本的认知,并将数仓建设的内容分解成各个模块来讲解。需求强调的是,数仓建设虽然有套路和一些模式可遵循,但数据团队的组成不同、业务场景各异、需求也千变万化,数仓建设的成败取决于多种因素,需要根据自身的实际情况因地制宜。
通过以下方面的认知:
什么是数仓
为什么要建设数仓
怎样建设数仓
一 什么是数仓
先概览下数仓几个重要的相关概念:
数据仓库的定义:数据管理、存储、计算、建模的方法论,是一种过程处理方法论。
数据仓库的特点:面向主题的、集成的、稳定的、反映历史变化
数据仓库的组成:元数据、数据建模、实现代码、血缘关系、规范准则
数仓在整个数据体系中的位置:数据采集->数据接入->数据仓库->数据报表/数据分析/数据挖掘
为了加深对数仓的认识,我们以普遍熟悉的数据库和数据仓库的对比来看待什么是数仓:
数据库 | 数据仓库 | 备注 |
---|---|---|
用于记录状态,面向事务 | 用于分析决策,面向主题 | |
服务业务系统,作为数据源 | 服务数据分析师等 | |
一般存储最新状态的业务数据 | 存储历史数据 | 数据仓库存在部分清除机制,历史数据并不是永久保存 |
严格遵循范式,避免冗余 | 为了方便使用故意引入部分冗余 | |
数据量偏小 | 大数据量 | 分布式数据库也能存储大量数据 |
承载体一般为mysql、oracle等传统的关系型数据库 | 承载体一般为hive、greenplum等 | 也有部分使用oracle等传统数据库做数仓的 |
通过对比,可以发现数据库和数据仓库的本质区别在于传统的数据库是一个存储引擎,而数据仓库是一套数据组织和应用的方法论,是需要很多的支持系统来协助(包含类似数据库这样的存储系统),最后达到支持分析决策的目的。
到此你可能还不明白什么是数仓?
那举一个例子:
假设D盘中有一个1M左右的Excel文件F的Sheet1有2000行,每行记录的是深圳市福田区梅林街道用户User1-User10一周的消费记录,包含用户标识、消费时间、消费商铺、消费商品、消费金额、消费数量、消费方式等信息。
需求阶段1:
求User2当月最高消费金额是在那个商铺消费的,对于这个问题你简单地通过排序筛选和计算得到了想要的信息;
需求阶段2:
数据不再是D盘的上的一个文件A,而是深圳市所有用户得到一个月的消费的记录,每个区一个文件夹内有N个以街道名称命名的文件,每个文件内部记录的是该街道用户一个月的消费记录。而此时的数据需求是本月内同时消费过商品1和商品2的人的消费方式分布,或许此时你通过较强的Excel技能或者将数据转存到Oracle等关系数据库中借助SQL最后也完成了需求。
需求阶段3:
数据急剧扩展,线上消费数据存储在各自的手机上,线下消费数据存储在每个人的账簿本上,且每天的记录都在递增。此时需求也变得异常复杂,比如增量计算每天首次消费商品1的人的年龄、性别、职业分布,消费商品的间隔等。这种情况下数据仓库就登场了,其完成数据接入(数据采集之后)、数据清洗和转换、存放策略、数据字典的制定、自动执行的方式等
二 为什么要建设数仓
问题
无数仓或者数仓建设得不好常见的问题:
1.数据资产模糊
不知道有什么数据、该找谁要数据
数据如何生成和更新的
数据存储和计算资源评估缺乏必要的信息
2.数据质量低
字段命名不规范、口径不一致
条件的过滤和规则等的理解差异带来的算法不一致
3.重复建设
无中间表或中间表建设的差,每次从原始数据取,数据开发周期长
代码臃肿
最底层取数据,带来存储和计算资源的浪费,同时滋生数据口径不一致问题
4.底层轻微的改变对上层影响巨大
业务数据轻微改动
底层逻辑轻微改动
底层数据异常
5.问题定位难,周期长
上下游依赖混乱
任务上线容易,下线难,生命周期难以管理
复杂问题耦合在一起
频繁的临时性需求
多维度拆解:OLAP、培养提高需求提出人的能力
同质类似的小需求:即席查询、固化、详细自查、模板、培养提高需求提出人的能力
方案
建设数仓可以带来以下的好处:
方便沟通交流
提高排查问题的效率
提高数据开发的效率
代码复用、表复用等
复杂任务解耦(分散到各层或层内的不同表上)
提高数据质量,避免数据口径不一致等问题
减少存储成本和计算成本
问题痛点和解决方案
需要注意的是,虽然数仓建设能带来诸多的益处,但其是一个庞大复杂耗时的工程,需要一些支持系统的配合,比如说元数据管理系统、调度系统等,而且也并不是所有的业务一开始都要建设数仓,要根据业务发展所处的状态和未来的发展趋势以及分析决策的复杂性等综合评判。
虽然数仓可以不做,但是要做的话一定要提前规划和基本的规范制定,自由散漫野性生长的数仓有不如无。
三 怎样建设数仓
数仓建设的本质目的是支撑分析决策,那分析决策依赖什么样的数据,数仓建设是如何保障这些数据高效正确产出的。面向业务数据指标建设数仓,同时兼顾其它可能的扩展情况,是数仓建设的整体思路。
数仓对上层数据应用的支持主要体现在三个方面:业务监控数据(大盘数据洞察)、数据挖掘(用户画像、推荐等)、数据分析(业务诊断、提升优化等)。其中按支持的优先级来分,首先就是业务监控数据,然后是数据分析、再然后数据挖掘。这也是数据应用由浅到深的递进。
思路
业务监控支持
业务监控支持是数仓建设的主要也是最基础的服务对象。首先梳理业务,划分出业务主题,然后梳理指标体系,自顶向下的建设,主要体现在以下方面:
对指标体系进行分类,根据指标分类来建设数据主题集市
对维度进行抽象,根据抽象出的维度来建设维表,然后根据维表的生成方式配置调度策略、是线下录入还是线上生成,更新机制是日定时更新还是触发更新,以及维度的变化情况等
数据分析支持
业务监控搭建起来了数据体系的基本框架,然而还是框架外的灵活数据分析需求,比如OLAP多维分析、交叉分析等,从这个角度来讲,数仓建设的中间表的维度一定要足够丰富,模型的选择上为了兼顾使用的方便性,一般以星型模型为主,同时尽可能的采用维度退化的方式,另外单主题多行为阶段的漏斗宽表和多主题多行为的宽表也能为数据分析提供极大的便利。
数据挖掘支持
数据挖掘支持是在数据分析的基础上对用户行为宽表的要求更进步强化了,同时要兼顾维度的丰富性。
活动分解
数据仓库设计的具体流程,从业务需求分析、逻辑设计、物理设计、数仓的初始化方法以及更新方法
从数仓的组成上来分以下几个模块进行数仓的建设:
数仓规划策略
分层、分线、分主题(数据集市)
数仓模型思想
ER模型、雪花模型、星星模型、维度模型、、数据仓库
数仓设计原则
下沉、分区、扩展、融合、拆解、主题
数据开发实施
代码、调度
数仓规范建设
表命名规范、字段命名、表头规范、代码开发规范、任务调度规范
数据仓库系列:初识数仓相关推荐
- 系列 | 漫谈数仓第四篇NO.4 『数据应用』(BIOLAP)
点击上方蓝色字体,置顶/星标哦 目前10000+人已关注加入我们 本文目录CONTENTS ☞ 01.可视化BI工具 [ 开源BI,商业BI,传统BI ] ☞ 02.OLAP科普 [ ROLAP M ...
- 数据仓库介绍:什么是数据仓库、数据仓库功能、数据仓库价值、数仓领域职业发展方向规划
数据仓库介绍:什么是数据仓库.数据仓库功能.数据仓库价值.数仓领域职业发展方向规划 大家好,本次分享的主题是数据仓库,通过本次分享的目的,一个是帮助到初次接触大数据行业.或者想要了解大数据体系的伙伴, ...
- 系列 | 漫谈数仓第二篇NO.2 『数据模型』(维度建模建模工具)
点击上方"数据仓库与Python大数据",选择"置顶/星标" 本文导航 前言: model对于数仓是最核心的东西,数据模型是数据组织和存储方法,模型的好坏,决定 ...
- 数据仓库建设之数仓架构
大家好,不管是离线数仓与实时数仓,建设的时候都少不了架构设计,今天来学习一下常见的架构及发展演变过程. 一.离线数仓大数据架构 1.数仓架构 下面详细说明图中的各个组件及其所起的作用.图中显示的整个数 ...
- 数据治理系列:数仓建模之数仓主题与主题域
背景: 数据仓库之父 Bill Inmon 将数据仓库描述为一个面向主题的.集成的.稳定的.反应历史变化的数据集合,用于支持管理者的决策过程. 从上面的引言里面,我们其实可以知道主题在数仓建设里面绝对 ...
- 数据仓库面试题-数仓-五
1.理解维度数据仓库--事实表.维度表.聚合表 参考自 1.1 事实表 在多维数据仓库中,保存度量值的详细值或事实的表称为"事实表". 事实表中的每个列通常要么是键值列,要么是度量 ...
- Vertica系列:数仓优化
最近才开始接触数仓性能优化,好像走进迷宫,头上永远顶着两句话: 这个是啥,那个是啥 因为数仓好像没啥性能优化的,可能这是小白的一种自我良好认知 根据我们的业务,优化工具经常用到的有以下两个 1.和my ...
- ▼ 系列 | 漫谈数仓第四篇NO.4 『BI选型』
大数据时代商业智能(BI)和数据可视化诉求更为强烈,淘宝大屏更是风靡全球!数据可视化是大数据『最后一公里』,BI唤醒沉睡的数据. 传统型BI力求大而全的统一综合型报表和分析平台,侧重传统式报表开发,俨 ...
- 数据仓库系列(三)数仓分层的意义价值及如何设计数据分层
文章目录 一.前言 二.数仓建模 三.数仓分层 四.数仓的基本特征 五.数据仓库用途 六.数仓分层的好处 七.如何分层 一.前言 现在说数仓,更多的会和数据平台或者基础架构搭上,已经融合到整个基础设施 ...
最新文章
- 如何向学妹解释在地址栏中输入网址后发生了什么?
- 新闻发布项目——数据库脚本(直接导入即可)
- dubbo-admin安装和简单使用
- stderr java_如何使用Log4j将stdout和stderr写入/捕获到文件并使用Windows和Tomcat 5.5(Java)?...
- 干货集锦:200+生信范文、30+款软件、12类图片素材PPT,今年的SCI稳了!(附下载)...
- 数据结构期末复习(四)
- 使用CXF 来发布一个 service
- 直播视频app源码从零搭建流媒体服务器+obs推流直播
- STM8L EEPROM DATA数据读写
- Ubuntu19,新体验,无法识别移动硬盘以及硬盘修复
- 如何使用 OpenShift Container Platform 的命令行工具 OC
- cn.sample.mnn.detect A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid
- 37种传感器(十四)之循迹模块+Stduino NanoUNO
- c语言程序设计教程 许勇,C语言程序设计应用教程 教学课件 许勇 第3章 程序流程控制.pdf...
- T2080复位时序分析
- Java绝对/相对路径获取与getResourceAsStream()方法
- bem什么意思_BEM规范你应该了解
- 【车载开发系列】CAN总线通信---总线报文格式
- 计算机的起始时间 1970年1月1日
- 读《文明之光》第二册 吴军
热门文章
- wps怎么减少行间距_wps怎么设置行距_wps的行间距在哪怎么调整单倍行距及1.5倍行距_wps文字_office之家...
- windows 快捷键关闭屏幕
- 局域网添加DNS服务器进行域名解析
- Android音视频 - 学习路线概览
- 台湾省九齐NY8A051G 内置MOS版本6 I/O 8-bit EPROM-Based MCU
- JavaScript程序库jQuery学习笔记分享(二)jQuery对象和DOM操作,和其他js库冲突处理
- Unity3D引擎入门搭建一个FPS游戏Demo
- 移动设备管理(MDM)有哪些关键功能?
- 学习《python模拟测试机器人》笔记2
- 流量都去哪儿了? 流量不清零后“消耗快”