Hive数据分层(ODS,DW,ADS)

本文详细解读Hive中的数据分层架构,包括ODS原始数据层(通过Sqoop或Kafka获取)、DWD和DWB数据清洗与规范化、DWS服务层的轻度聚合,以及ADS应用层的报表产出。了解如何从源头到服务的完整流程。

Hive中的数据分层

前言

这篇文章简单介绍一下hive的数据分层

理论上分为三层:ODS数据运营层,DW数据仓库层,ADS数据服务层,

数据运营层(ODS):原始数据
  ODS:Operation Data Store 数据准备区,也称为贴源层。数据仓库源头系统的数据表通常会原封不动的存储一份,这称为ODS层,是后续数据仓库加工数据的来源。
  ODS层数据的来源方式:
    1.业务库 : 经常会使用sqoop来抽取,例如每天定时抽取一次。实时方面,可以考虑用canal监听mysql的binlog,实时接入即可。
    2.埋点日志 : 日志一般以文件的形式保存,可以选择用flume定时同步可以用spark streaming或者Flink来实时接入
    3.kafka也OK消息队列:即来自ActiveMQ、Kafka的数据等.
数据仓库层(DW):数据清洗
  1. DWD:data warehouse details 细节数据层,是业务层与数据仓库的隔离层。主要对ODS数据层做一些数据清洗和规范化的操作。
数据清洗:去除空值、脏数据、超过极限范围的
   2. DWB:data warehouse base 数据基础层,存储的是客观数据,一般用作中间层,可以认为是大量指标的数据层。
   3. DWS:data warehouse service 数据服务层,基于DWB上的基础数据,整合汇总成分析某一个主题域的服务数据层,一般是宽表。用于提供后续的业务查询,OLAP分析,数据分发等。
用户行为,轻度聚合
数据服务层/应用层(ADS):出报表:
  ADS:applicationData Service应用数据服务,该层主要是提供数据产品和数据分析使用的数据,一般会存储在ES、mysql等系统中供线上系统使用。

Hive中实现数据分层通常是为了更好地组织和管理数据,提高数据处理效率和数据质量。数据分层可以帮助我们将数据按照不同的处理阶段进行分类,从而实现数据分层存储和管理。以下是实现数据分层的一些常见步骤和方法: 1. **数据源层(ODS,Operational Data Store)**: - 这一层主要用于存储从各个数据源(如数据库、日志文件、API等)采集过来的原始数据。 - 数据保持原始格式,不进行任何处理或转换。 2. **数据仓库层(DWData Warehouse)**: - 这一层主要用于存储经过清洗和转换的数据。 - 数据仓库层可以进一步分为多个子层,如基础数据层、明细数据层和汇总数据层。 3. **基础数据层(DWD,Data Warehouse Detail)**: - 这一层主要用于存储经过清洗和转换的明细数据。 - 数据在这一层被标准化,去除冗余和错误数据。 4. **汇总数据层(DWS,Data Warehouse Summary)**: - 这一层主要用于存储经过汇总和聚合的数据。 - 数据在这一层被进一步加工,形成报表和分析所需的数据集。 5. **应用层(ADS,Application Data Store)**: - 这一层主要用于存储面向具体应用的数据。 - 数据在这一层被定制化处理,以满足特定业务需求。 ### 实现数据分层的具体方法 1. **使用Hive表分区**: - 通过表分区将数据按日期、地区等维度进行分区存储,方便数据管理和查询。 2. **使用外部表和内部表**: - 外部表用于存储原始数据,内部表用于存储经过处理的数据。 - 外部表的数据文件可以存放在HDFS的任意位置,数据管理更加灵活。 3. **数据清洗和转换**: - 使用Hive的SQL语句进行数据清洗和转换,将原始数据转换为符合业务需求的数据格式。 4. **数据聚合和汇总**: - 使用Hive的聚合函数(如SUM、COUNT、AVG等)进行数据聚合和汇总,生成报表和分析所需的数据集。 ### 示例 假设我们有一个电商平台的销售数据,首先将原始数据存储在ODS层,然后进行清洗和转换,将清洗后的数据存储在DWD层,最后进行数据汇总,将汇总后的数据存储在DWS层。 ```sql -- 创建ODS层表 CREATE TABLE ods_sales ( sale_id STRING, product_id STRING, sale_date STRING, sale_amount FLOAT, sale_price FLOAT ) STORED AS PARQUET LOCATION 'hdfs://path/to/ods/sales'; -- 创建DWD层表 CREATE TABLE dwd_sales ( sale_id STRING, product_id STRING, sale_date DATE, sale_amount FLOAT, sale_price FLOAT ) STORED AS PARQUET LOCATION 'hdfs://path/to/dwd/sales'; -- 数据清洗和转换 INSERT INTO dwd_sales SELECT sale_id, product_id, CAST(sale_date AS DATE) AS sale_date, sale_amount, sale_price FROM ods_sales WHERE sale_date IS NOT NULL; -- 创建DWS层表 CREATE TABLE dws_sales_summary ( product_id STRING, total_sales FLOAT, total_amount FLOAT ) STORED AS PARQUET LOCATION 'hdfs://path/to/dws/sales_summary'; -- 数据汇总 INSERT INTO dws_sales_summary SELECT product_id, SUM(sale_amount) AS total_sales, SUM(sale_amount * sale_price) AS total_amount FROM dwd_sales GROUP BY product_id; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值