热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据仓库分层设计(基于Hive)

1、数据仓库逻辑分层架构先来看数据仓库的逻辑分层架构:分层名称可能不一样,但基本是都是这样想要看懂数据仓库的逻辑分层架构,先要弄懂以下概念

1、数据仓库逻辑分层架构

       先来看数据仓库的逻辑分层架构: 分层名称可能不一样,但基本是都是这样

想要看懂数据仓库的逻辑分层架构,先要弄懂以下概念


  1. 数据源 : 数据来源,互联网公司的数据来源随着公司的规模扩张而呈递增趋势,同时自不同的业务员,比如埋点采集,客户上报,API等。
  2. ODS层 : 数据仓库源头系统的数据表通常会原封不动地存储一份,这称为ODS层,ODS层也经常会被称为准备层。这一层做的工作是贴源,而这些数据和源系统的数据是同构,一般对这些数据分为全量更新和增量更新,通常在贴源的过程中会做一些简单的清洗。
  3. DW层 :  数据仓库明细层和数据仓库汇总层是数据仓库的主题内容。将一些数据关联的日期进行拆分,使的其更具体的分类,一般拆分年,月,日,而ODS层到DW层的ETL脚本根据业务需求对数据进行清洗、设计,如果没有业务需求,则根据源系统的数据结构和未来规划去做处理,对这层的数据要求是一致,准确,尽量建立数据的完整性
    1. DWD层:是数据明细层,是基于业务上的数据明细,在这一步做了汇聚,去重,清洗,标准化处理
    2. DWS层:是汇总数据层,基于idm层的数据进行一些计算,生成一些指标报表类的数据
  4. DA应用层:基于 DWD/DWS 的数据做一些数据计算生成应用所需的数
    1. 业务产品CRM、ERP等,业务产品所使用的数据,已经存在于数据共享层,直接从数据共享层访问即可;
    2. 报表FineReport、业务报表,同业务产品,报表所使用的数据,一般也是已经统计汇总好的,存放于数据共享层
    3. 即席查询即席查询的用户有很多,有可能是数据开发人员,网站和产品运营人员,数据分析人员,甚至是部门老大,他们都有即席查询数据的需求
    4. OLAP:目前,很多OLAP工具不能很好的支持HDFS上直接获取数据,都是通过将需要的数据同步到关系型数据库中做OLAP,但如果数据量巨大的话,关系型数据库显然不行
    5. 其他数据接口:这种接口有通用的,有定制的。比如一个从Redis中获取用户属性的接口视通用的,所有的业务都可以调用这个接口来获取用户属性

2、为什么数据仓库要分层?

     我们对数据进行分层的一个主要原因就是希望在管理数据的时候,能对数据有一个更加清晰的掌控,详细来讲,主要有下面几个原因:


  1. 清晰的数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解(像电信业务中的流量域,公安业务中的户籍域等,都是为了我们更快的理解和使用数据)
  2. 清晰的数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解(就是在每张加工dws/dwd的表的时候都加上 ‘来源表’这个字段,方便出现数据问题查找源头)
  3. 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。比如在电信业务中流量域中,我们加工一张用户每天使用流量信息表,这样我们加工每月,近三月流量使用更加方便
  4. 把复杂问题简单话。讲一个复杂的任务分解成多个步骤来完成,每一层只处理单一步骤,比较简单和容易理解。
  5. 屏蔽原始数据的异常。就是把ods的脏数据清洗成我们需要的数据
  6. 屏蔽业务的影响,不必改一次业务就需要重新接入数据。

     数据体系中的各个表的依赖就像是电线的流向一样,我们都希望它是很规整,便于管理的。


3、怎么进行分层


3.1 理论

      我们已经知道数据仓库一般分为3个层,即:数据运营层,数据仓库层和数据产品层。

ODS层 数据运营层

        ‘面向主题的’,数据运营层,也叫ODS层,是最接近数据源中数据的一层,是数据源中的数据,经过抽取、洗净、传输,也就说传说中的ETL之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类系统的分类方式而分类的。


例如这一层可能包含的数据表为:人口表(包含每个人的身份证号、姓名、住址等)、机场登机记录(包含乘机人身份证号、航班号、乘机日期、起飞城市等)、银联的刷卡信息表(包含银行卡号、刷卡地点、刷卡时间、刷卡金额等)、银行账户表(包含银行卡号、持卡人身份证号等)等等一系列原始的业务数据。这里我们可以看到,这一层面的数据还具有鲜明的业务数据库的特征,甚至还具有一定的关系数据库中的数据范式的组织形式。


      但是,这一层面的数据却不同于原始数据。在源数据装入这一层时,要进行诸如去噪(列如去掉明显偏离正常水平的银行刷卡信息)、去重(列如银行账户信息、公安人口信息中均含有人的姓名,但是只保留一份即可)、提脏(列如有的人的银行卡被盗取,在十分钟内同时有两笔分别再中国和日本的刷卡信息,这便是脏数据)、业务提取、单位统一、砍字段(列如用于支撑前端系统工作,但是在数据挖掘中不需要的字段)、业务判别等多项工作。

DW 数据仓库层

  在这里,从ODS层中获得的数据按照主题建立各种数据模型。列如以研究人的旅游消费为主题的数据集中便可以结合航空公司的等级出现信息,以及银联系统的刷卡记录,进行结合分析,产生数据集。分为业务域和业务中心

数据产品层(APP),这一层是提供为数据产品使用能够的结果数据

  在这里,主要是提供给数据产品和数据分析使用的数据,一般会存放在es,mysql等系统中供线上系统使用,也可能会存在Hive或者Druid中供数据分析和数据挖掘使用 比如我们经常说的报表数据,或者说那种打宽表,一般都放在这里 。


3.2 技术路线

        这三层技术划分,相对来说比较粗粒度。这里仅仅简单介绍几个常用工具,侧重中开源界主流。

1、数据来源层 ---> ODS层


  1. 业务库,这里经常会使用sqoop来抽取,比如我们每天定时抽取一次,在实时方面,可以考虑用cannal监听msql的binlog,实时接入即可。
  2. 埋点日志,线上系统会打入各种日志,这些日志一般以文件的形式保存,我们可以选择用flume定时抽取,也可以用用spark streaming或者storm来实时接入,当然,kafka也会是一个关键角色

2.ODS、DW --> APP层  


  1. 每天定时任务型:比如我们典型的日计算任务,每天凌晨算前一天的数据,早上起来看报表。这种任务进程使用Hive、Spark或者生撸MR程序来计算,最终结果写入Hive、Hbase、Mysql、ES或者Redis中。
  2. 实时数据:这部分主要是各种实时的系统使用,比如我们的实时推荐、实时用户画像、一般我们会用Spark Streaming、Storm或者Flink来计算,最后会落入Es、Hbase或者Redis中。

 

 

 

 

 

 

 


推荐阅读
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • 初探性能优化:入门指南与实践技巧
    在编程领域,常有“尚未精通编码便急于优化”的声音。为了从性能优化的角度提升代码质量,本文将带领读者初步探索性能优化的基本概念与实践技巧。即使程序看似运行良好,数据处理效率仍有待提高,通过系统学习性能优化,能够帮助开发者编写更加高效、稳定的代码。文章不仅介绍了性能优化的基础知识,还提供了实用的调优方法和工具,帮助读者在实际项目中应用这些技术。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 如何在Oracle ASM_Diskgroup中重命名现有磁盘
    如何在Oracle ASM_Diskgroup中重命名现有磁盘 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • SSAS入门指南:基础知识与核心概念解析
    ### SSAS入门指南:基础知识与核心概念解析Analysis Services 是一种专为决策支持和商业智能(BI)解决方案设计的数据引擎。该引擎能够为报告和客户端应用提供高效的分析数据,并支持在多维数据模型中构建高性能的分析应用。通过其强大的数据处理能力和灵活的数据建模功能,Analysis Services 成为了现代 BI 系统的重要组成部分。 ... [详细]
  • 如何在MySQL中选择合适的表空间以优化性能和管理效率
    在MySQL中,合理选择表空间对于提升表的管理和访问性能至关重要。表空间作为MySQL中用于组织和管理数据的一种机制,能够显著影响数据库的运行效率和维护便利性。通过科学地配置和使用表空间,可以优化存储结构,提高查询速度,简化数据管理流程,从而全面提升系统的整体性能。 ... [详细]
  • 在计算机领域,锁机制的作用类似于现实生活中的锁,用于保护共享资源免受并发访问冲突的影响。对于Java开发人员而言,深入了解数据库锁定机制至关重要,因为这不仅能够确保数据的一致性和完整性,还能有效提升系统的性能和稳定性。常见的锁机制包括Java中的`Lock`和`synchronized`关键字,它们在多线程环境中发挥着关键作用,帮助开发人员更好地管理和控制资源访问。 ... [详细]
  • 在项目开发过程中,掌握一些关键的Linux命令至关重要。例如,使用 `Ctrl+C` 可以立即终止当前正在执行的命令;通过 `ps -ef | grep ias` 可以查看特定服务的进程信息,包括进程ID(PID)和JVM参数(如内存分配和远程连接端口);而 `netstat -apn | more` 则用于显示网络连接状态,帮助开发者监控和调试网络服务。这些命令不仅提高了开发效率,还能有效解决运行时的各种问题。 ... [详细]
  • 字节跳动深圳研发中心安全业务团队正在火热招募人才! ... [详细]
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
  • 数据结构与算法:HyperLogLog 统计、布隆过滤器应用、缓存机制挑战及解决方案、Redis 性能优化与监控、哨兵模式、版本控制工具 Git
    本文探讨了数据结构与算法在实际应用中的多个方面。首先介绍了HyperLogLog算法,用于高效地进行基数统计,能够准确估算大规模数据集中的唯一元素数量。接着讨论了布隆过滤器的应用,该过滤器在空间效率和查询速度上具有显著优势,适用于大数据场景下的快速成员检测。此外,文章分析了缓存机制面临的挑战及其解决方案,包括LRU和LFU等策略,并详细阐述了Redis的性能优化与监控方法,如使用哨兵模式实现高可用性。最后,介绍了版本控制工具Git的基本操作和最佳实践,帮助开发者有效管理代码版本。 ... [详细]
  • 本文通过复旦大学自然语言处理课程中的一个具体案例,详细解析了中文词汇分割技术的实现方法。该案例利用Java编程语言,结合词典和算法模型,展示了如何高效地进行中文文本的词汇分割,为相关研究和应用提供了宝贵的参考。 ... [详细]
author-avatar
ngdongran_638070
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有