数仓建设 - 维度建模 - DIM维度

该博客围绕数据仓库维度建模展开,先介绍准备数据库,接着详细阐述商品、优惠券、活动、地区、日期和用户维度表的设计,包括表结构设计、建表语句,还给出各维度表的ETL任务脚本,如授予执行权限、执行脚本等,日期维度表涉及数据文件上传和SQL执行。

前置:准备数据库

[hadoop@hadoop102 apache-hive-3.1.2-bin]$ bin/hive
create database dw_dwd;
use dw_dwd;

一、商品维度表

1.1 表结构设计

序号 字段名 字段类型 字段中文名 描述
1 id STRING SKU_ID 主键
2 price DECIMAL 商品价格 来自sku表
3 sku_name STRING 商品名称 来自sku表
4 sku_desc STRING 商品描述 来自sku表
5 weight DECIMAL 重量 来自sku表
6 is_sale INT 是否在售 来自sku表
7 spu_id STRING SPU编号 来自sku表
8 spu_name STRING SPU名称 来自spu表
9 category3_id STRING 三级品类ID 来自sku表
10 category3_name STRING 三级品类名称 来自base_category3表
11 category2_id STRING 二级品类id 来自base_category3表
12 category2_name STRING 二级品类名称 来自base_category2表
13 category1_id STRING 一级品类ID 来自base_category2表
14 category1_name STRING 一级品类名称 来自base_category1表
15 tm_id STRING 品牌ID 来自sku表
16 tm_name STRING 品牌名称 来自base_trademark表
17 sku_attr_values STRING 平台属性 JSON串
18 sku_sale_attr_values STRING 销售属性 JSON串
19 create_time STRING 创建时间 JSON串

1.2 建表语句

use dw_dwd;

DROP TABLE IF EXISTS dim_sku_full;
CREATE EXTERNAL TABLE dim_sku_full (
    `id` STRING COMMENT '商品id',
    `price` DECIMAL(16,2) COMMENT '商品价格',
    `sku_name` STRING COMMENT '商品名称',
    `sku_desc` STRING COMMENT '商品描述',
    `weight` DECIMAL(16,2) COMMENT '重量',
    `is_sale` INT COMMENT '是否在售;1:是,0:否',
    `spu_id` STRING COMMENT 'spu编号',
    `spu_name` STRING COMMENT 'spu名称',
    `category3_id` STRING COMMENT '三级分类id',
    `category3_name` STRING COMMENT '三级分类名称',
    `category2_id` STRING COMMENT '二级分类id',
    `category2_name` STRING COMMENT '二级分类名称',
    `category1_id` STRING COMMENT '一级分类id',
    `category1_name` STRING COMMENT '一级分类名称',
    `tm_id` STRING COMMENT '品牌id',
    `tm_name` STRING COMMENT '品牌名称',
    `sku_attr_values` ARRAY<STRUCT<attr_id:STRING,value_id:STRING,attr_name:STRING,value_name:STRING>> COMMENT '平台属性',
    `sku_sale_attr_values` ARRAY<STRUCT<sale_attr_id:STRING,sale_attr_value_id:STRING,sale_attr_name:STRING,sale_attr_value_name:STRING>> COMMENT '销售属性',
    `create_time` STRING COMMENT '创建时间'
) COMMENT '商品维度表'
PARTITIONED BY (`dt` STRING)
STORED AS ORC
LOCATION '/warehouse/dw_dwd.db/dim_sku_full/'
TBLPROPERTIES ("orc.compress"="snappy");

msck repair table dim_sku_full;

1.3 ETL任务脚本

[hadoop@hadoop102 ~
### 数据仓库维度建模的工作流程 数据仓库中的维度建模是一种以业务为导向的方法,用于构建易于理解和查询的据结构。以下是关于数据仓库维度建模的最佳实践与工作流程: #### 1. 理解业务需求 在开始任何技术实施之前,理解业务目标和需求至关重要。这一步骤涉及与利益相关者沟通,明确他们希望从据分析中获得哪些洞察。自下而上的开发方法强调从业务过程中提取需求,并以此为驱动进行建模[^1]。 #### 2. 定义粒度 定义事实表的粒度是维度建模的核心之一。粒度决定了事实表中每条记录所代表的具体事件或交易级别。例如,在电子商务场景中,可以选择订单级别的粒度或者产品级别的粒度。这一决策直接影响后续分析的精确性和灵活性。 #### 3. 构建维度表 维度表用来描述事实表中的上下文信息。为了使维度表尽可能详尽,可以从现有的业务实体表以及事务处理后的统计据中抽取属性[^2]。这些属性不仅限于静态特征(如商品名称、类别),还可以包括动态计算的结果(如最近七天内的销售趋势)。 #### 4. 主维表的选择 主维表是指那些能够提供最全面、最准确维度据的基础表格。通常情况下,它来源于日常运营活动中频繁更新的关键业务系统。比如在一个电商平台里,如果存在专门针对用户的注册管理系统,则该系统的用户资料可被视作主维表的一部分[^3]。 #### 5. 辅助维度表补充 除了主维表之外,还需要考虑引入辅助维度表来增强模型的表现力。这些辅助维度可能来自于不同的子系统或是外部接口所提供的额外信息层面上的支持。 #### 6. 判断字段角色 对于某些模糊不清的情况——某个值型字段既可以当作衡量指标也可以视为分类标签时,可以通过观察其特性来进行判断:如果是具有大量不同值并且经常参与到复杂运算当中去的话就将其设为事实;反之则应归类至维度范畴内[^4]。 ```sql -- 创建一个简单的星型模式示例 CREATE TABLE sales_fact ( sale_id INT PRIMARY KEY, product_key INT, -- 外键指向product_dim date_key DATE, -- 外键指向time_dim quantity_sold DECIMAL(8,2), revenue DECIMAL(10,2) ); CREATE TABLE product_dim ( product_key INT PRIMARY KEY, product_name VARCHAR(255), category VARCHAR(50), brand VARCHAR(50) ); ``` 以上SQL语句展示了如何基于上述原则创建基本的事实表和维度表关系。 ### 结论 综上所述,成功的数据仓库维度建模依赖于清晰的理解业务逻辑、合理的设计方案执行以及持续优化调整的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值