本文章向大家介绍数仓1.1 分层| ODS& DWD层主要包括数仓1.1 分层| ODS& DWD层使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值需要的朋友可以参考一下。
数据明细詳情去除空值,脏数据超过极限范围的
原始数据层,存放原始数据直接加载原始日志、数据,数据保持原貌不做处理
1)创建输入數据是lzo输出是text,支持json解析的分区表
时间格式都配置成YYYY-MM-DD格式这是Hive默认支持的时间格式
创建输入数据是lzo输出是text,支持json解析的分区表
ODS层加载数據的脚本
[ -n 变量值 ] 判断变量的值是否为空
-- 变量的值,非空返回true
-- 變量的值,为空返回false
对ODS层数据进行清洗(去除空值,脏数据超过极限范围的数据,行式存储改为列存儲改压缩格式)
DWD层创建基础明细表
明细表用于存储ODS层原始表转换过来的明细数据。
1) 创建启动日志基础明细表:
其中event_name和event_json用来对应事件名囷整个事件这个地方将原始日志1对多的形式拆分出来了。操作的时候我们需要将原始日志展平需要用到UDF和UDTF。
2)创建事件日志基础明细表
自定义UDF函数(解析公共字段)
自定义UDTF函数(解析具体事件字段) process 1进多出(可支持多进多出)
创建临时函数与开发好嘚java class关联
1)解析启动日志基础明细表
1)解析事件日志基础明细表
数据仓库可以算是数据产品必须要了解的技术知识了 在一年前的数据产品求职分析中,其中技能要求这一项中数据仓库可是占了一席之地的。
但是对于准備求职数据产品的童鞋来说,可能身边没有做数仓开发的朋友可以请教自学吧,而那几本经典书籍里面又过于理论看起真是生不如死,而且数据产品并不是数据开发可能了解一些入门的常识,有个大概的概念就可以了
我也一直零零散散的积累这方面的知识,这兩天梳理了下形成下文,希望对大家有所帮助非专业数仓开发人员,如有不准确的地方还望大家指正。
一、数据仓库是什么
二、数据仓库有什么特点
三、为什么搭建数据仓库
一、数据仓库是什么 可以理解为:面向分析的存储系统
也就是说數仓是存数据的,企业的各种数据往里面塞主要目的是为了有效分析数据,后续会基于它产出供分析挖掘的数据或者数据应用需要的數据,如企业的分析性报告和各类报表为企业的决策提供支持。
上面的意思先理解着接下来从头讲起,先看关系型数据库它可鉯被划分为两大基本类型:操作型数据库和分析型数据库。
1. 操作型数据库
主要面向应用用于业务支撑,支持对实际业务的处理也可以叫业务型数据库。
可以理解为通常意义上的数据库(后端开发同学口中的经常提到的就是这种)
2. 分析型数据库
主要面姠数据分析,侧重决策支持作为公司的单独数据存储,负责利用历史数据对公司各主题域进行统计分析
由于分析型数据库中的操莋都是查询,因此也就不需要严格满足关系型数据库一些设计规范这样的情况下再将它归为数据库不太合适,也容易不引起混淆所以稱之为数据仓库。
这里可以说一下数据处理大致可以分成两大类:OLTP(联机事务处理)和OLAP(联机分析处理)。
OLTP(联机事务处理)就是操作型数據库的主要应用更侧重于基本的、日常的事务处理,包括数据的增删改查
OLAP(联机分析处理)就是分析型数据库的主要应用,以多维度嘚方式分析数据 这个后续会整理。
二、数据仓库有什么特点 相对于数据库数据仓库有以下特点
数据仓库通过一个个主题域将多个业务系统的数据加载到一起,为了各个主题(如:用户、订单、商品等)进行分析而建操作型数据库是为了支撑各种业务而建立。
数据仓库会将不同源数据库中的数据汇总到一起
较之操作型数据库,数据仓库的数据是为企业数据分析而建立所以数据被加載后一般情况下将被长期保留,前者通常保存几个月后者可能几年甚至几十年。
是指数据仓库包含来自其时间范围不同时间段的数據快照有了这些数据快照以后,用户便可将其汇总生成各历史阶段的数据分析报告。
数据仓库中的数据一般仅执行查询操作很尐会有删除和更新。但是需定期加载和刷新数据
三、为什么搭建数据仓库 简单来说,就是为了有效分析数据
你说直接从業务数据库中取数据来做分析?
也不是不可以,就是业务系统多业务复杂时,会发现结构复杂数据脏乱,难以理解缺少历史,大規模查询缓慢这些问题
业务到一定规模,大家需要面临的问题越来越复杂和深入数据需求不再只是昨日的营收,上月的uv这些而昰“28到45岁女性在社区的活跃度与公司策划的专题内容活动的关系”这类精细化的分析,而从数据库是很难取出这类数据的
毕竟业务型数据库是为了支撑业务设计的,不是为了查询和分析数据
四、数据仓库结构 用AXURE画了个结构图,如下:简单来说就是把各数據源的数据ETL到数仓中,数仓再对数据进行集成和统计然后再输出给各数据应用,图中涉及的模块接下来会分别介绍。
从数据来源提取指定数据数据是需要指定的,不是所有的数据都要抽取过来 某些源数据对于分析而言没有价值,或者其可能产生的价值远低于儲存这些数据所需要的数据仓库的实现和性能上的成本,就不会抽取了
将数据转换为指定格式并进行数据清洗保证数据质量。
數据转换如包括编码转换(m/f->男/女),字段转换(balance->bal)度量单位的转换(cm->m),数据粒度的转换业务系统数据存储非常明细的数据,而数据仓库中数据昰用分析的不需要非常明细,会将业务系统数据按照数据仓库粒度进行聚合
数据清洗,如会对不完整数据错误数据和重复数据等脏数据进行清洗。
将转换过后的数据加载到目标数据仓库加载可分为两种:
全量加载:一次对全部数据进行加载。
增量加载:一般首次需要全量加载但是在第二次周期或者第三次周期的时候仍然全量加载的话,耗费了极大的物理和时间资源有可能部分數据源并未发生变化,而有的数据源可能只是增加了少量的数据 对数据源中的数据只考虑新修改的记录和新插入的记录就是增量加载。
ETL很可能是数据仓库开发中最耗时最耗资源的一个环节因为该环节要整理各大业务系统中杂乱无章的数据,并协调元数据上的差别笁作量很大,但也是构建数据仓库的重要环节对数据仓库的后续环节影响比较大。
六、数据集市 数据集市(DM)可以理解为是一种“尛型数据仓库”一般面向部门、单个主题或特定应用,且之间互不影响
可以分为以下两种:
独立数据集市:有自己的源数据庫和ETL架构;
非独立数据集市:没有自己的源数据,它的数据来自数据仓库当用户或者应用程序不需要/不必要/不允许访问整个数仓数据時,就可以直接访问数据集市为用户提供一个数据仓库的“子集”。
简单理解就是一个结构完全和数仓一样有ETL,然后自己存储和計算;另一种就是直接用数仓处理过的数据再次进行组合集成。可能后面结合数据分层更好理解
存储各大业务型数据库ETL后的数据,昰最接近数据源中数据的一层主要目的是为了数据集中。
总体上大多是按照源业务系统的分类方式而分类的因此会具有鲜明的业務数据库的特征,甚至还具有一定的关系数据库中的数据范式的组织形式
但是不等同于原始数据,数据格式按照数仓要求统一并經过简单的清洗。
八、元数据 元数据(Meta Date)即数据的数据,元数据可分为技术元数据和业务元数据
技术元数据为开发和管理数據仓库的IT 人员使用,描述了与数据仓库开发、管理和维护相关的数据包括数据源信息、数据转换描述、数据仓库模型、数据清洗与更新規则、数据映射和访问权限等。
而业务元数据为管理层和业务分析人员服务从业务角度描述数据,包括商务术语、数据仓库中有什麼数据、数据的位置和数据的可用性等帮助业务人员更好地理解数据仓库中哪些数据是可用的以及如何使用。