数据仓库的一般架构
Apache Iceberg
Apache Iceberg是一种用于大型分析数据集的开放表格,Iceberge向Trino和Spark添加了使用高性能格式的表,就像Sql表一样。
Iceberg为了避免出现不变要的一些意外,表结构和组织并不会实际删除,用户也不需要特意了解分区便可进行快速查询。
(1)Iceberg的表支持快速添加、删除、更新或重命名操作
(2)将分区列进行隐藏,避免用户错误的使用分区和进行极慢的查询。
(3)分区列也会随着表数据量或查询模式的变化而自动更新。
(4)表可以根据时间进行表快照,方便用户根据时间进行检查更改。
(5)提供版本回滚,方便用户纠错数据。
ApacheIceberg是为大表而建的,Iceberg用于生产中,其中单表数据量可包含10pb左右数据,甚至可以在没有分布式SQL引擎的情况下读取这些巨量数据。
(1)查询计划非常迅速,不需要分布式SQL引擎来读取数据
(2)高级过滤:可以使用分区和列来过滤查询这些数据
(3)可适用于任何云存储
(4)表的任何操作都是原子性的,用户不会看到部分或未提交的内容。
(5)使用多个并发器进行写入,并使用乐观锁重试的机制来解决兼容性问题
数仓的特点
(1)集成性
数仓中存储的数据来源于多个数据源,原始数据在不同数据源中的存储方式各不相同。要整合成为最终的数据集合,需要从数据源经过一系列抽取、清洗、转换的过程。
(2)稳定性
数仓中保存的数据是历史记录,不允许被修改。用户只能通过分析工具进行查询和分析。
(3)动态性
数仓的数据会随时间变化而定期更新,这里的定期更新不是指修改数据,一般是将业务系统发生变化的数据定期同步到数仓,和稳定性不冲突。不可更新是针对应用而言,即用户分析处理时不更新数据
(4)主题性
传统数据库对应的业务不同,数仓需要根据需求,将不同数据源的数据进行整合,即数据一般都围绕某一业务主题进行建模。例如“贷款”主题、“存款”主题等。
(5)扩展性
之所以有的大型数据仓库系统架构设计复杂,是因为考虑到了未来3-5年的扩展性,这样的话,未来不用太快花钱去重建数据仓库系统,就能很稳定运行。主要体现在数据建模的合理性,数据仓库方案中多出一些中间层,使海量数据流有足够的缓冲,不至于数据量大很多,就运行不起来了。
数仓的数据哪里来?
(1)业务数据
行业在处理事务过程中产生的数据。比如用户在电商网站中登录、下单、支付等过程中,需要和网站后台数据库进行增删改查交互,产生的数据就是业务数据。业务数据通常存储在MySQL、Oracle等数据库中。
(2)用户行为数据
用户在使用产品过程中,通过埋点收集与客户端产品交互过程中产生的数据,并发往日志服务器进行保存。比如页面浏览、点击、停留、评论、点赞、收藏等。用户行为数据通常存储在日志文件中。
数仓的维度建模和关系型建模的区别?
数仓的关系型建模严格遵守三范式理论(第一范式:属性不可分割,第二范式:不能有部分函数型依赖,第三范式:不能有传递性函数依赖),数据冗余度低,但在大数据的场景下,查询效率低。 维度模型相对清晰、简洁。以数据分析作为出发点,不遵循三范式,故数据存在一定的冗余。维度模型面向业务,将业务用事实表和维度表呈现出来,表结构简单,故查询简单,查询效率较高。
模型分层
ODS
ODS主要完成:
(1)保持数据原貌不做任何修改,保留历史数据,储存起到备份数据作用;
(2)数据一般采用lzo、Snappy、parquet等压缩格式;
(3)创建分区表,防止后续的全表扫描,减少集群资源访问数仓的压力,一般按天存储在数仓中。
DWD
DWD层是对事实表的处理,代表的是业务的最小粒度层。任何数据的记录都可以从这一层获取,为后续的DWS和DWT层做准备。还有对日志行为进行解析,以及对业务数据采用维度模型的方式重新建模(维度退化)。
DWD主要完成:
-
数据清洗 (1)空值去除 (2)过滤核心字段无意义的数据,比如订单表中订单 id 为 null,支付表中支付 id 为空 (3)将用户行为宽表和业务表进行数据一致性处理,清洗的手段包括Sql、mr、rdd、kettle、Python等等。
-
脱敏 对手机号、身份证号等敏感数据脱敏
-
维度退化 对业务数据传过来的表进行维度退化和降维。(商品一级二级三级、省市县、年月日)
-
压缩,LZO,列式存储 parquet
DWS
DWS层就是关于各个主题的加工和使用,这层是宽表聚合值,是各个事实表的聚合值。这里做轻度的汇总会让以后的计算更加的高效,如:统计各个主题对象计算7天、30天、90天的行为, 应对特殊需求(例如,购买行为,统计商品复购率)会快很多不必走ODS层反复拿数据做加工。这层会把每个用户单日的行为聚合起来组成一张多列宽表,以便之后关联用户维度信息后进行,不同角度的统计分析。涉及的主题包括:访客主题、用户主题、商品主题、优惠券主题、活动主题、地区主题等。
DWT
这层涉及的主题和DWS层一样包括:访客主题、用户主题、商品主题、优惠券主题、活动主题、地区主题等。只不过DWS层的粒度是对当日用户汇总信息,而DWT层是对截止到当日、或者近7日、近30日等的汇总信息。
以用户主题这个来举列: DWS层:用户主题层是记录某一个用户在某一天的汇总行为。 DWT层:用户主题层是记录某一个用户截止在当日的汇总行为。
ADS
ADS层数据是专门给业务使用的数据层,这层是面向业务定制的应用数据层。
ADS主要完成:
(1)提供为数据产品使用的结果数据、指标等。
(2)提供给数据产品和数据分析使用的数据,一般会存放在 ES、MySQL等系统中供线上系统使用,也可能会存在 Hive 或者 Druid 中供数据分析和数据挖掘使用。如报表数据,或者说那种大宽表。