hive数仓的分层与建模

news/2025/2/12 2:50:14/

Hive 数据仓库分层和数据建模是一种常见的数据仓库设计方法,旨在通过分层的方式组织数据,提高数据的可维护性、可复用性和查询性能。以下是关于 Hive 数据仓库分层和数据建模的详细知识:


一、Hive 数据仓库分层

数据仓库通常采用分层架构,目的是将数据按照不同的处理阶段和用途进行划分,便于管理和优化。常见的分层架构包括以下四层:

1. ODS(Operational Data Store,操作数据存储层)

  • 作用:ODS 层是数据仓库的最底层,直接对接源系统,存储原始数据。
  • 特点
    • 数据与源系统保持一致,通常是未经过清洗和转换的原始数据。
    • 数据存储周期较短,可能是增量或全量数据。
    • 数据格式与源系统一致,可能包含冗余和不一致的数据。
  • 示例
    CREATE TABLE ods_user_log (user_id BIGINT,action STRING,log_time STRING
    ) STORED AS ORC;
    

2. DWD(Data Warehouse Detail,数据仓库明细层)

  • 作用:对 ODS 层的数据进行清洗、转换和整合,生成高质量的明细数据。
  • 特点
    • 数据经过清洗,去除了脏数据和不一致数据。
    • 数据按照业务需求进行标准化和规范化。
    • 数据粒度与 ODS 层一致,但质量更高。
  • 示例
    CREATE TABLE dwd_user_log (user_id BIGINT,action STRING,log_time TIMESTAMP
    ) STORED AS ORC;
    

3. DWS(Data Warehouse Summary,数据仓库汇总层)

  • 作用:基于 DWD 层的数据,按照业务需求进行聚合和汇总,生成宽表或主题表。
  • 特点
    • 数据粒度比 DWD 层粗,通常是按天、周、月等时间维度或业务维度汇总。
    • 数据以宽表形式存储,便于后续分析和查询。
  • 示例
    CREATE TABLE dws_user_daily_summary (user_id BIGINT,action_count INT,log_date STRING
    ) STORED AS ORC;
    

4. ADS(Application Data Store,应用数据层)

  • 作用:面向最终业务需求,提供高度聚合的数据,直接支持报表、分析和应用。
  • 特点
    • 数据粒度最粗,通常是高度聚合的结果。
    • 数据直接服务于业务需求,如报表、BI 工具等。
  • 示例
    CREATE TABLE ads_user_monthly_report (user_id BIGINT,total_actions INT,month STRING
    ) STORED AS ORC;
    

二、Hive 数据建模

数据建模是设计数据仓库的核心步骤,常见的建模方法包括 维度建模范式建模。在 Hive 中,通常采用 维度建模,因为它更适合分析型场景。

1. 维度建模的核心概念

  • 事实表(Fact Table)

    • 存储业务过程中的度量数据(如销售额、订单数量)。
    • 通常包含外键,关联到维度表。
    • 示例:
      CREATE TABLE fact_sales (sale_id BIGINT,product_id BIGINT,customer_id BIGINT,sale_amount DECIMAL(10, 2),sale_date STRING
      ) STORED AS ORC;
      
  • 维度表(Dimension Table)

    • 存储描述性数据(如产品、客户、时间等)。
    • 通常包含主键,用于与事实表关联。
    • 示例:
      CREATE TABLE dim_product (product_id BIGINT,product_name STRING,category STRING
      ) STORED AS ORC;
      

2. 常见的维度建模方法

  • 星型模型(Star Schema)

    • 一个事实表与多个维度表直接关联。
    • 结构简单,查询性能高。
    • 示例:
      -- 事实表
      CREATE TABLE fact_sales (sale_id BIGINT,product_id BIGINT,customer_id BIGINT,sale_amount DECIMAL(10, 2),sale_date STRING
      ) STORED AS ORC;-- 维度表
      CREATE TABLE dim_product (product_id BIGINT,product_name STRING,category STRING
      ) STORED AS ORC;CREATE TABLE dim_customer (customer_id BIGINT,customer_name STRING,city STRING
      ) STORED AS ORC;
      
  • 雪花模型(Snowflake Schema)

    • 维度表进一步规范化,形成多层关联。
    • 节省存储空间,但查询性能较低。
    • 示例:
      CREATE TABLE dim_product (product_id BIGINT,product_name STRING,category_id BIGINT
      ) STORED AS ORC;CREATE TABLE dim_category (category_id BIGINT,category_name STRING
      ) STORED AS ORC;
      
  • 星座模型(Galaxy Schema)

    • 多个事实表共享维度表。
    • 适用于复杂的业务场景。

三、Hive 数据仓库优化建议

  1. 分区表:按时间或业务字段分区,提高查询效率。

    CREATE TABLE fact_sales (sale_id BIGINT,product_id BIGINT,sale_amount DECIMAL(10, 2)
    ) PARTITIONED BY (sale_date STRING) STORED AS ORC;
    
  2. 分桶表:对数据进行分桶,优化 JOIN 和聚合操作。

    CREATE TABLE fact_sales (sale_id BIGINT,product_id BIGINT,sale_amount DECIMAL(10, 2)
    ) CLUSTERED BY (product_id) INTO 10 BUCKETS STORED AS ORC;
    
  3. 使用 ORC/Parquet 格式:提高存储和查询性能。

  4. 压缩数据:减少存储空间和 I/O 开销。

    SET hive.exec.compress.output=true;
    SET mapreduce.output.fileoutputformat.compress=true;
    SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
    

通过合理的分层和建模,可以构建高效、可扩展的 Hive 数据仓库,满足业务需求并提升数据分析效率。


http://www.ppmy.cn/news/1571303.html

相关文章

8种方法解决电脑QQ能上网但是浏览器不能上网问题

刚接触电脑的时候遇到过很多的问题,每次遇到都让我焦头烂额,特别是一些问题不知道怎么解决,忙活很久还是没进展。当时遇到的问题是电脑QQ能上网但是浏览器打不开网页。明明QQ、视频软件也能正常使用,但是浏览器就是打不开网页&…

使用 DeepSeek 进行图像描述:多模态 AI 技术实践

使用 DeepSeek 进行图像描述:多模态 AI 技术实践 背景介绍 在当今的人工智能领域,多模态技术正在rapidly发展,为图像理解和描述提供了前所未有的可能性。本文将详细介绍如何使用 DeepSeek 的多模态模型来实现图像智能描述。 技术原理 多模…

Jupyter Notebook 6/7 设置代码补全

设置的方法根据 Notebook 的版本而定,可以通过以下命令查看版本 jupyter notebook --version Notebook 7 在主界面打开 Settings (注意不是在 *.ipynb 中的) 打开以下开关即可 Notebook 6 pip install jupyter_contrib_nbextensions jupyter contrib nbextension…

【Flink源码分析】5. Flink1.19源码分析-异步编程(CompletableFuture)

5 CompletableFuture 实现异步编排;获取异步任务执行的结果。 CompletableFuture提供了几十种方法,辅助我们的异步任务场景。这些方法包括创建异步任务、异步任务回调、多个任务组合处理等方面。 5.1 supplyAsync 方法 supplyAsync 执行 Completable…

【Qt Creator】Qt Creator编辑器打开QT项目后,项目栏的文件全部呈现灰色的原因分析

目录 1、现象描述2、原因分析3、解决方法 1、现象描述 在学习QT过程中,常常会从网络(如GitHub)上下载QT项目进行学习或借鉴使用,但是使用Qt Creator编辑器打开项目后,往往会出现项目栏的文件全部呈现灰色的问题&#x…

【Uniapp-Vue3】UniCloud云数据库获取指定字段的数据

使用where方法可以获取指定的字段: let db uniCloud.database(); db.collection("数据表").where({字段名1:数据, 字段名2:数据}).get({getOne:true}) 如果我们不在get中添加{getOne:true},在只获取到一个数据res.result.data将会是一个数组&…

模型压缩中的四大核心技术 —— 量化、剪枝、知识蒸馏和二值化

一、量化 (Quantization) 量化的目标在于将原始以 32 位浮点数表示的模型参数和中间激活,转换为低精度(如 FP16、INT8、甚至更低位宽)的数值表示,从而在减少模型存储占用和内存带宽的同时,加速推理运算,特别适用于移动、嵌入式和边缘计算场景。 1.1 概念与目标 基本思想…

在Linux上部署Jenkins的详细指南

引言 在当今快速迭代的软件开发环境中,持续集成和持续交付(CI/CD)变得越来越重要。Jenkins作为一个开源自动化服务器,能够帮助开发者更高效地进行代码集成、测试和部署。本文将详细介绍如何在Linux系统上安装和配置Jenkins。 准…