hive数仓的分层与建模

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


一、Hive 数据仓库分层

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

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

  • 作用:ODS 层是数据仓库的最底层,直接对接源系统,存储原始数据。

  • 特点

    • 数据与源系统保持一致,通常是未经过清洗和转换的原始数据。
    • 数据存储周期较短,可能是增量或全量数据。
    • 数据格式与源系统一致,可能包含冗余和不一致的数据。
  • 示例

    sql 复制代码
    CREATE TABLE ods_user_log (
        user_id BIGINT,
        action STRING,
        log_time STRING
    ) STORED AS ORC;

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

  • 作用:对 ODS 层的数据进行清洗、转换和整合,生成高质量的明细数据。

  • 特点

    • 数据经过清洗,去除了脏数据和不一致数据。
    • 数据按照业务需求进行标准化和规范化。
    • 数据粒度与 ODS 层一致,但质量更高。
  • 示例

    sql 复制代码
    CREATE TABLE dwd_user_log (
        user_id BIGINT,
        action STRING,
        log_time TIMESTAMP
    ) STORED AS ORC;

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

  • 作用:基于 DWD 层的数据,按照业务需求进行聚合和汇总,生成宽表或主题表。

  • 特点

    • 数据粒度比 DWD 层粗,通常是按天、周、月等时间维度或业务维度汇总。
    • 数据以宽表形式存储,便于后续分析和查询。
  • 示例

    sql 复制代码
    CREATE TABLE dws_user_daily_summary (
        user_id BIGINT,
        action_count INT,
        log_date STRING
    ) STORED AS ORC;

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

  • 作用:面向最终业务需求,提供高度聚合的数据,直接支持报表、分析和应用。

  • 特点

    • 数据粒度最粗,通常是高度聚合的结果。
    • 数据直接服务于业务需求,如报表、BI 工具等。
  • 示例

    sql 复制代码
    CREATE TABLE ads_user_monthly_report (
        user_id BIGINT,
        total_actions INT,
        month STRING
    ) STORED AS ORC;

二、Hive 数据建模

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

1. 维度建模的核心概念

  • 事实表(Fact Table)

    • 存储业务过程中的度量数据(如销售额、订单数量)。

    • 通常包含外键,关联到维度表。

    • 示例:

      sql 复制代码
      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)

    • 存储描述性数据(如产品、客户、时间等)。

    • 通常包含主键,用于与事实表关联。

    • 示例:

      sql 复制代码
      CREATE TABLE dim_product (
          product_id BIGINT,
          product_name STRING,
          category STRING
      ) STORED AS ORC;

2. 常见的维度建模方法

  • 星型模型(Star Schema)

    • 一个事实表与多个维度表直接关联。

    • 结构简单,查询性能高。

    • 示例:

      sql 复制代码
      -- 事实表
      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)

    • 维度表进一步规范化,形成多层关联。

    • 节省存储空间,但查询性能较低。

    • 示例:

      sql 复制代码
      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. 分区表:按时间或业务字段分区,提高查询效率。

    sql 复制代码
    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 和聚合操作。

    sql 复制代码
    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 开销。

    sql 复制代码
    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 数据仓库,满足业务需求并提升数据分析效率。

相关推荐
emmm...1 小时前
hive连不上,报错9000拒绝连接
数据仓库·hive·hadoop
野老杂谈1 小时前
Hive SQL 中的时间戳转换详解
hive·hadoop·sql
大数据CLUB1 小时前
基于hive和mapreduce的地铁数据分析及可视化_hive作为数据库
大数据·hive·hadoop·分布式·数据分析·mapreduce
嘉禾望岗5031 小时前
hive SQL查询与函数
hive·hadoop·sql
不吃饭的猪3 小时前
hive表元数据修复脚本
数据仓库·hive·hadoop
白日与明月5 小时前
对Hive表进行归档,减少小文件的影响
数据仓库·hive·hadoop
嘉禾望岗5035 小时前
hive窗口函数与自定义函数
数据仓库·hive·hadoop
67X6 小时前
数据仓库与数据挖掘课程设计
数据仓库·数据挖掘
风跟我说过她6 小时前
Hadoop HA (高可用) 配置与操作指南
大数据·hadoop·分布式·zookeeper·centos
沧澜sincerely6 小时前
WSL2搭建Hadoop伪分布式环境
大数据·hadoop·搜索引擎