数据仓库设计

7 篇文章 0 订阅
6 篇文章 0 订阅

目录

一、HUE工具介绍使用

二、数仓介绍(了解)

2-1 数仓特征

2-2 OLTP和OLAP

2-3 ETL

三、主题和主题域(了解)

3-1 主题和主题域介绍

3-2 主题域的划分

四、数据仓库和数据集市(理解熟悉)

五、数仓设计(了解)

5-1 定义规范设计

5-2 数仓分层设计

5-3 数仓建模设计

六、DIM维度层数据处理(掌握)

6-1 维度表介绍

6-2 DIM层表数据处理

I-hive表的中文问题解决

II-创建DIM层表

III-导入dataxweb任务

IV-执行datax任务导入ods原始表数据

V-处理维度表数据

分类表

商品表

门店商品表

门店日清商品表处理

门店表处理

交易类型表

时间维度表


一、HUE工具介绍使用

HUE是CDH提供一个hive和hdfs的操作工具,在hue中编写了hiveSQl也可以操作hdfs的文件

http://hadoop01:9870 hdfs的web访问端口

hdfs://hadoop01:8020 hdfs的程序访问端口

进入hue

二、数仓介绍(了解)

数据仓库是由一整套体系构成,包含数据采集,数据存储,数据计算,数据展示等

数据仓库主要作用对过往的历史数据进行分析处理,为公司决策停供数据支撑。

2-1 数仓特征

  • 面向主题

  • 集成性

  • 非易失性

  • 时变性

2-2 OLTP和OLAP

OLTP(On-Line Transaction Processing)即联机事务处理,也称为面向交易的处理过程,

OLAP(On-Line Analytical Processing)即联机分析处理,有时也称为决策支持系统(DSS)

idnameaddressdt
1张三北京2023-5-7
2张三上海2024-2-2

2-3 ETL

ETL(Extra, Transfer, Load)包括数据抽取、数据转换、数据导入三个过程。

三、主题和主题域(了解)

3-1 主题和主题域介绍

主题 是对数据进行归类,每个分类是一个主题

主题域 根据分析的领域,将联系较为紧密的数据主题的集合在一起

主题域下面可以有多个主题,主题还可以划分成更多的子主题,主题和主题之间的建设可能会有交叉现象

3-2 主题域的划分

  • 按照系统划分

    • 生产系统 生产主题域

      • 商品原材料库存核销数据 商品主题

      • 订单主题

    • 财务系统

      • 商品原材料库存核销数据 商品主题

      • 销售主题

    • 人力系统

  • 按照部门划分

    • 人力部门 人力主题域

      • 员工主题 员工数据

      • 招聘主题 招聘数据

    • 生产部门

    • 销售部门

    • 后勤部门

  • 按照业务划分

    • 门店零售业务

    • 批发业务

    • 团购业务

  • 按照行业经验

    • 银行证券业

      • 当事人、产品、协议、事件、资产、财务、机构、地域、营销、渠道

黑马甄选是按照业务功能划分主题域

核销 、售卖、会员、库存、订单

公司由数据分析师和数据产品经理根据公司业务场景设计主题,搭建分析的指标体系,形成指标文档

四、数据仓库和数据集市(理解熟悉)

数据集市就是数据仓库的一个子集,它主要面向部门级业务,并且只面向某个特定的主题

数据集市由业务部门定义、设计和开发,业务部门进行管理和维护

五、数仓设计(了解)

5-1 定义规范设计

  • 表命名

    • 分层_主题_实体+业务+维度_分区

分层 ods,dw,dwd

主题 sale(销售主题) user(用户主题)

实体+业务+维度

  • 示例:

    • store_goods_statistics_day

    • store_member_statistics_day

    • mysql中的表名+计算维度

ods_sale_store_goods_statistics_day_dt

规范不是前置要求,不同公司可能根据业务设计表名

  • 字段类型规范

    • 数量类型整数为bigint

    • 金额类型为decimal(27, 2),表示:27位有效数字,其中小数部分2位

    • 数量类型小数为decimal(27, 3),表示:27位有效数字,其中小数部分3位

    • 字符串(名字,描述信息等)类型为string

    • 日期类型为string

    • 时间类型为timestamp

黑马甄选按照当前设计给进行设计

5-2 数仓分层设计

数据仓库最基础分层 ,分层本质就是创建不同的数据库,

原始数据层 ODS

  • 将数据源的数据导入数仓ods层

  • 创建一个ods的数据库,然后按照数据源中的表创建ods库下的hive表

数据仓库层 DW 数据处理

数据服务层 ADS 计算结果

数据分层设计到的有什么作用?

  • 简化复杂问题。

    • 通过将复杂的数据处理过程分解为多个步骤或层次,可以使问题更加易于理解和处理。

    • select sum(age) from tb1 join tb2 on tb1.id =tb2.id where age > 20 group by gender

  • 结构更清晰。

    • 每个数据层都有其明确的作用域,这有助于在使用表时方便地定位和理解。

  • 数据血缘追踪。

    • 分层结构使得数据血缘关系更加明确,便于追踪和调试。

  • 用空间换时间。

    • 通过预处理大量数据,可以提高应用系统的用户体验(效率),虽然这可能导致数据仓库中存在冗余数据。

  • 数据重复使用,减少重复开发。

    • 规范的数据分层可以促进数据和指标的统一,减少重复开发,并提高数据复用率。

  • 数据隔离和屏蔽原始数据异常。

    • 分层结构可以帮助隔离原始数据的异常或敏感性,保护真实数据与统计数据解耦。

  • 数据安全。

    • 通过分层,可以更方便地对不同层的数据进行权限管理,屏蔽敏感数据。

  • 增强扩展性和便于后期维护。

    • 不分层可能会导致整个数据清洗过程受到源业务系统规则变化的影响,而分层可以简化数据清洗过程,提高扩展性,便于后期维护。

每天金额月金额年金额
1002024-4-205001000
1502024-4-215001000
1002024-4-225001000

group by substr(2024-04-20,1,4)

在黑马甄选中,维度表数据比较多,单独创建了一个DIM层用来处理维度表数据

5-3 数仓建模设计

数仓建模本质就是在数仓中如何设计表存储计算数据

数仓一般采用维度建模方式来设计不同的表

维度模型是Ralph Kimall所倡导,他的《数据仓库工具箱》是数据仓库工程领域最流行的数仓建模经典。维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。

粗粒度 123819023809,3,5000,

细粒度 123819023809,小米手机 红色 12G+256G,3999,1

在DWD层确认维度表和事实表,然后将事实表和维度表数据进行管理

在DWM层进行主题宽表关联

星状模型

每个事实表都自己独立的维度表,会造成重复创建维度表

雪花模型

星座模型

多个事实表可以关联相同的维度表

项目中采用星座模型

六、DIM维度层数据处理(掌握)

6-1 维度表介绍

6-2 DIM层表数据处理

I-hive表的中文问题解决

在mysql中执行如下语句

use hive;
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

II-创建DIM层表

创建原始数据表,根据mysql中的维度表字段数据创建dim层中表数据

表需要进行分区,一天为单位进行分区保存数据

-- 查看建表语句
show create table 表名

III-导入dataxweb任务

启动服务

/export/server/datax-web-2.1.2/bin/start-all.sh

IV-执行datax任务导入ods原始表数据

V-处理维度表数据

hive的配置

-- 开启动态分区方案
-- 开启非严格模式
set hive.exec.dynamic.partition.mode=nonstrict;
-- 开启动态分区支持(默认true)
set hive.exec.dynamic.partition=true;
-- 设置各个节点生成动态分区的最大数量: 默认为100个  (一般在生产环境中, 都需要调整更大)
set hive.exec.max.dynamic.partitions.pernode=10000;
-- 设置最大生成动态分区的数量: 默认为1000 (一般在生产环境中, 都需要调整更大)
set hive.exec.max.dynamic.partitions=100000;
-- hive一次性最大能够创建多少个文件: 默认为10w
set hive.exec.max.created.files=150000;
​
​
-- hive压缩
-- 开启中间结果压缩
set hive.exec.compress.intermediate=true;
-- 开启最终结果压缩
set hive.exec.compress.output=true;
-- 写入时压缩生效
set hive.exec.orc.compression.strategy=COMPRESSION;
分类表

分类表(ods_dim_category_f)拉平处理

商品表

商品表(ods_dim_goods_info_f)处理

将分类编号替换为一二三级分类ID、编码和名称

关联分类表,将商品表中的category_no 转为对应的分类信息

门店商品表

门店商品表(ods_dim_store_goods_f)处理

将分类ID替换为对应一二三级分类ID、编码和名称

统商品表逻辑一样

门店日清商品表处理

门店日清商品表处理

日清商品,不满足以下要求的商品需要清理掉不再入库,主要是一些生鲜类和现做的食物

  1. 一切以实物为标准,不允许变色、不新鲜产品入库。

  2. 骨类入库存放时间不得超过24小时。

  3. 上冰台的所有促销品当天尽量要做到日清,对于上冰台的当日未销售完的产品,未变色,不影响第二天销售的可以入库。

  4. 对于化冻的禽副产品当日必须销售完毕,猪副产品根据品相颜色以实物相论。

门店表处理

需要使用的表,将如下三张表的数据关联在一起

分店信息表 ods_dim_store_f

  • 需要表中的所有字段

分店面积明细表 ods_dim_store_area_info_f

  • store_no 门店编号

  • area_type_no 面积类型编号

  • area 面积类型名称

分店分组信息表 ods_dim_store_group_f

  • store_group_name 分组名称

1-门店面积信息可以从分店面积明细表中获取。先取实际经营面积,如果取不到(实际经营面积为空或0)再取经营面积。

2-区域名称信息从店组信息表中取,store_group_type_no = ‘04’即对应区域的编码和名称。

3-store_type_code和management_type_code 需要转换为整数类型

门店面面积获取逻辑讲解

create table tb_area_test(
 id int,
 store_no string,
 area_type_no int,
 area_type_name string,
 area int
);
insert overwrite table tb_area_test values(1,'T065',1,'合同面积',120),
                            (2,'T065',7,'经营面积',110),
                            (3,'Y291',7,'经营面积',98),
                            (4,'Y291',8,'实际经营面积',98),
                            (5,'T057',8,'实际经营面积',111),
                            (6,'T057',2,'外租面积',20),
                            (7,'T038',1,'合同面积',100),
                            (8,'T038',2,'外租面积',15);

完整的实际代码

 
交易类型表

不需要做任何处理

insert overwrite table dim.dwd_dim_source_type_map_i partition (dt)
select
    company,
    original_source_type,
    original_source_type_name,
    source_type,
    source_type_name,
    is_online,
    date_sub(current_date(),1) as dt

from dim.ods_dim_source_type_map_f ;
时间维度表

不需要做任何处理

insert overwrite table dim.dwd_dim_date_f
select
    trade_date,
    year_code,
    month_code,
    day_code,
    quanter_code,
    quanter_name,
    week_trade_date,
    month_trade_date,
    week_end_date,
    month_end_date,
    last_week_trade_date,
    last_month_trade_date,
    last_week_end_date,
    last_month_end_date,
    year_week_code,
    week_day_code,
    day_year_num,
    month_days,
    is_weekend,
    days_after1,
    days_after2,
    days_after3,
    days_after4,
    days_after5,
    days_after6,
    days_after7
from dim.ods_dim_date_f;
  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值