有不少没涉及过数仓的同学问我一些比较基础的问题,为了更好的理解前面讲到的一些理论,写一个小小的demo体会一下~~
我们要构建一个订单主题,构建订单明细,订单sku,订单粒度三张表。(假设我们只有一个数据域,单纯的为了举个例子,有一个大概的理解)
模型设计及概念可阅读《数仓基础入门》系列历史文章,三言两语就打发了,具体深意自己体会~😝
ods层表
日志表:ods_order_detail_logs_di
| 字段 | 字段含义 | 字段类型 |
|---|---|---|
| dt | 日期 | string |
| log_time | 日志时间 | string |
| order_id | 订单id | string |
| user_id | 用户id | string |
| store_id | 店铺id | string |
| sku_detail | 商品列表 | string |
| address | 地址 | string |
| order_price | 结算金额 | decimal(28,6) |
| dicount_price | 折扣金额 | decimal(28,6) |
user库下user_info表:ods_user_user_info_di
| 字段 | 字段含义 | 字段类型 |
|---|---|---|
| dt | 日期 | string |
| user_id | 用户id | string |
| name | 用户昵称 | string |
| gender | 性别 | tinyint |
| age | 年龄 | int |
sku库下sku_detail表:ods_sku_sku_detail_di
| 字段 | 字段含义 | 字段类型 |
|---|---|---|
| dt | 日期 | string |
| sku_id | 商品id | string |
| name | 商品名称 | string |
| category_id | 分类id | string |
| category_name | 分类名称 | string |
| unit_price | 单价 | decimal(28,6) |
shop库下shop_detail表:ods_shop_shop_detail_di
| 字段 | 字段含义 | 字段类型 |
|---|---|---|
| dt | 日期 | string |
| shop_id | 商铺id | string |
| name | 商铺名称 | string |
| industry_id | 行业id | string |
| industry_name | 行业名称 | string |
| phone | 联系电话 | string |
模型设计如下:
模型设计
每张表的结构及逻辑如下:
dwd层表
表:dwd_order_detail_logs_di
处理点:
- 修改store_id 为shop_id,统一字段
- 解析address结构 国家,省份,城市,街道详细信息
- 解析sku_detail,分摊每个sku价格
| 字段 | 字段含义 | 字段类型 |
|---|---|---|
| dt | 日期 | string |
| log_time | 日志时间 | string |
| order_id | 订单id | string |
| user_id | 用户id | string |
| shop_id | 店铺id | string |
| sku_id | 商品id | string |
| country_id | 国家id | string |
| province_id | 省份id | string |
| city_id | 城市id | string |
| street_address | 街道详细地址 | string |
| order_price | 结算金额 | decimal(28,6) |
| dicount_price | 折扣金额 | decimal(28,6) |
dim层表
1.dim_user_info
- 处理点:字段name修改
| 字段 | 字段含义 | 字段类型 |
|---|---|---|
| dt | 日期 | string |
| user_id | 用户id | string |
| user_name | 用户昵称 | string |
| gender | 性别 | tinyint |
| age | 年龄 | int |
2.dim_sku_info
- 处理点:字段name,unit_price修改
| 字段 | 字段含义 | 字段类型 |
|---|---|---|
| dt | 日期 | string |
| sku_id | 商品id | string |
| sku_name | 商品名称 | string |
| category_id | 分类id | string |
| category_name | 分类名称 | string |
| sku_unit_price | 商品单价 | decimal(28,6) |
3.dim_shop_info
- 处理点:字段name,phone修改
| 字段 | 字段含义 | 字段类型 |
|---|---|---|
| dt | 日期 | string |
| shop_id | 商铺id | string |
| shop_name | 商铺名称 | string |
| industry_id | 行业id | string |
| industry_name | 行业名称 | string |
| shop_phone | 商铺联系电话 | string |
dws层
dws_order_detail_di
- 处理点:退化维度到事实表,删掉不必要字段log_time
- 唯一键:concat(order_id,sku_id)
| 字段 | 字段含义 | 字段类型 |
|---|---|---|
| dt | 日期 | string |
| order_id | 订单id | string |
| user_id | 用户id | string |
| user_name | 用户昵称 | string |
| gender | 性别 | tinyint |
| age | 年龄 | int |
| shop_id | 店铺id | string |
| shop_name | 商铺名称 | string |
| industry_id | 行业id | string |
| industry_name | 行业名称 | string |
| shop_phone | 商铺联系电话 | string |
| sku_id | 商品id | string |
| sku_name | 商品名称 | string |
| category_id | 分类id | string |
| category_name | 分类名称 | string |
| sku_unit_price | 商品单价 | decimal(28,6) |
| country_id | 国家id | string |
| province_id | 省份id | string |
| city_id | 城市id | string |
| street_address | 街道详细地址 | string |
| order_price | sku结算金额 | decimal(28,6) |
| dicount_price | sku折扣金额 | decimal(28,6) |
dws_order_di
- 处理点:聚合粒度到订单粒度,聚合指标
- 唯一键:order_id
| 字段 | 字段含义 | 字段类型 |
|---|---|---|
| dt | 日期 | string |
| order_id | 订单id | string |
| user_id | 用户id | string |
| user_name | 用户昵称 | string |
| gender | 性别 | tinyint |
| age | 年龄 | int |
| shop_id | 店铺id | string |
| shop_name | 商铺名称 | string |
| industry_id | 行业id | string |
| industry_name | 行业名称 | string |
| shop_phone | 商铺联系电话 | string |
| country_id | 国家id | string |
| province_id | 省份id | string |
| city_id | 城市id | string |
| street_address | 街道详细地址 | string |
| order_price | 订单结算金额 | decimal(28,6) |
| dicount_price | 订单折扣金额 | decimal(28,6) |
如有疑问,可关注公众号私信我猴~
-------------------------------------------------------------------------------------------------
更多资源共享,请关注公众号吼~