简单搞定数仓搭建:数仓模型(DIM)

数据仓库中的维度建模:公共维度汇总层DIM设计
本文介绍了如何在数据仓库中构建公共维度汇总层(DIM),通过维度建模确保企业数据一致性。以A电商公司的营销业务为例,详细阐述了如何定义商品和地域维度,并给出了维表设计的注意事项,包括数据稳定性、垂直拆分、水平拆分等。同时,展示了具体的维表建表语句,强调了维表命名规范和生命周期管理。

公共维度汇总层DIM(Dimension)基于维度建模理念,建立整个企业的一致性维度。

公共维度汇总层(DIM)主要由维度表(维表)构成。维度是逻辑概念,是衡量和观察业务的角度。维表是根据维度及其属性将数据平台上构建的物理化的表,采用宽表设计的原则。因此,公共维度汇总层(DIM)首先需要定义维度。

定义维度

在划分数据域、构建总线矩阵时,需要结合对业务过程的分析定义维度。本教程以A电商公司的营销业务板块为例,在交易数据域中,我们重点考察确认收货(交易成功)的业务过程。

在确认收货的业务过程中,主要有商品和收货地点(本教程中,假设收货和购买是同一个地点)两个维度所依赖的业务角度。从商品角度可以定义出以下维度:

  • 商品ID
  • 商品名称
  • 商品价格
  • 商品新旧程度

    0表示全新,1表示闲置,2表示二手。

  • 商品类目ID
  • 商品类目名称
  • 品类ID
  • 品类名称
  • 买家ID
  • 商品状态

    0表示正常,1表示用户删除,2表示下架,3表示从未上架。

  • 商品所在城市
  • 商品所在省份

从地域角度,可以定义出以下维度:

  • 买家ID
  • 城市code
  • 城市名称
  • 省份code
  • 省份名称

作为维度建模的核心,在企业级数据仓库中必须保证维度的唯一性。以A公司的商品维度为例,有且只允许有一种维度定义。例如,省份code这个维度

基于Hive搭建数据仓库及构建电商多维分析系统可按以下方式进行: ### 数据仓库搭建 #### 了解数据仓库特性 数据仓库数据库不同,不满足第三范式,存在较多冗余,目的是为数据挖掘服务。数据挖掘能直接调取宽表,便于进行多维分析和探索分析。数据仓库主要包含事实表(如销售数据、订单数据)和维度表(提供看问题的角度,如用户、地区、产品、时间维度等) [^1]。 #### 利用Hive特性与功能 Hive基于大数据Hadoop平台,有大数据平台的特点,不擅长update操作,主要用于查询,契合数据仓库特点。它为数据仓库管理提供了诸多功能,包括数据ETL(抽取、转换和加载)工具、数据存储管理以及大型数据集的查询和分析能力 [^1]。 #### 数据公共层(CDM)构建 - **DIM维度表**:进行维度建模,设置维度和算法风险,维级别表为一一对应逻辑维表 [^4]。 - **DWD(细粒度事实层)**:依据业务流程进行ETL清洗,处理空值、重复值、异常值等,对部分维度表降维,保留事实表中的某些字段,该层的表也叫逻辑事实表 [^4]。 - **DWS(服务层)**:构造粗粒度事实表,提供命名标准和统计指标,进行轻度聚合,针对一个维度进行分析,构建多个维度的事实宽表 [^4]。 #### 数据应用层(ADS)构建 ADS层针对某一个特定的维度对CDM和DWS层进行汇总,开展统计报表和指标分析 [^4]。 ### 电商多维分析系统构建 #### 数据采集 按照电商数据分析框架,首先要进行数据采集,可运用合适的算法和工具将电商相关数据收集起来 [^3]。 #### 数据存储 把采集到的数据存储起来,利用Hive的数据存储管理功能,将数据存于合适的表结构中,可分为事实表和维度表 [^1][^3]。 #### 数据处理 对存储的数据进行处理,在DWD层根据业务流程进行ETL清洗等操作,去除空值、重复值、异常值等,并对部分维度表降维 [^4]。 #### 数据分析 利用Hive的查询和分析能力,结合数据仓库中的事实表和维度表,进行多维分析。例如,从用户、地区、产品、时间等不同维度对销售数据、订单数据等进行分析 [^1]。 #### 分析结果可视化 使用Python可视化等技术,将分析结果以直观的图表、报表等形式展示出来,为电商决策提供支持 [^2]。 #### 决策应用与反馈 将可视化的分析结果应用于电商决策,决策结果又会影响数据采集,形成一个闭环 [^3]。 ```python # 示例:使用Hive进行简单的销售数据查询分析 # 假设存在销售事实表sales_fact和时间维度表time_dim # 查询每个月的销售总额 from pyhive import hive # 连接Hive conn = hive.Connection(host='localhost', port=10000, database='your_database') cursor = conn.cursor() # 执行查询 query = """ SELECT time_dim.month, SUM(sales_fact.sales_amount) FROM sales_fact JOIN time_dim ON sales_fact.time_id = time_dim.time_id GROUP BY time_dim.month """ cursor.execute(query) # 获取结果 results = cursor.fetchall() for row in results: print(f"Month: {row[0]}, Total Sales: {row[1]}") # 关闭连接 conn.close() ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值