美文网首页
DWB宽表建立之地址和地区三级联动问题

DWB宽表建立之地址和地区三级联动问题

作者: Eqo | 来源:发表于2022-05-19 13:08 被阅读0次

DWB-数据基础层,功能是把数据降维成跟主题相关的宽表

  • 在进行维度退化的时候,需要将各个表的==核心字段==退化到事实表中形成宽表,明显不需要的可以不退化 另外拿捏不住 “==宁滥勿缺==”。
  • 退化维度(Degenerate Dimension,DD),就是那些看起来像是事实表的一个维度关键字,但实际上并没有对应的维度表。退化维度技术可以减少维度的数量(降维操作)

以下以店铺明细表为例子:
我们在创建宽表的时候,可能会遇到地址,和区域分块的情况,需要区域表三级联动 然后加上具体地址才能获得完整的店铺地址

建表分析:店铺明细宽表

image.png

店铺明细宽表主要有

  • 店铺表dim_store(核心表)(绝大部分字段)
  • 商圈表dim_trade_area 记录商圈相关信息,店铺需要归属商圈中(ID主键是店铺表中的外键)
    其中 店铺的地址信息 主要有两张表负责 省市县 具体地址
  • 地址信息表dim_location
    记录了type 地址类型( 1:商圈地址;2:店铺地址;3.用户地址管理;)
    code 县的code 与 行政区域表的code 相关联
    address 具体的地址
  • 行政区域表 dim_district (id code name pid ) 区域id 区域父id 区域主要有省市县 省的pid 没有
    分析

只需要 dim_location join dim_district on adcode = code 把俩表关联起来
然后把区域表自连接 逻辑上化成三个表 县的pid = 市id, 市的pid = 省的id
然后查出县的name,市的name 省的name

地质类信息如何设计存储.png

代码实现

--  创建宽表

CREATE TABLE yp_dwb.dwb_shop_detail(
--  店铺dim_store
  id string,
  address_info string COMMENT '店铺详细地址',
  store_name string COMMENT '店铺名称',
  is_pay_bond tinyint COMMENT '是否有交过保证金 1:是0:否',
  trade_area_id string COMMENT '归属商圈ID',
  delivery_method tinyint COMMENT '配送方式  1 :自提 ;3 :自提加配送均可\; 2 : 商家配送',
  store_type int COMMENT '店铺类型 22天街网店 23实体店 24直营店铺 33会员专区店',
  is_primary tinyint COMMENT '是否是总店 1: 是 2: 不是',
  parent_store_id string COMMENT '父级店铺的id,只有当is_primary类型为2时有效',
--  商圈
  trade_area_name string COMMENT '商圈名称',
--  区域-店铺
  province_id string COMMENT '店铺所在省份ID',
  city_id string COMMENT '店铺所在城市ID',
  area_id string COMMENT '店铺所在县ID',
  province_name string COMMENT '省份名称',
  city_name string COMMENT '城市名称',
  area_name string COMMENT '县名称'
  )
COMMENT '店铺明细表'
row format delimited fields terminated by '\t'
stored as orc
tblproperties ('orc.compress' = 'SNAPPY');

-- 插入
insert into yp_dwb.dwb_shop_detail
select

        ds.id,
        address_info,
         ds.name  store_name,
        is_pay_bond,
        trade_area_id,
        delivery_method,
        store_type,
        is_primary,
        parent_store_id,
--商圈
        ta.name trade_area_name,
        province_id,
        city_id,
        area_id,
 -- 区域字典
        province.name province_name,
        city.name city_name,
        county.name  area_name
from yp_dwd.dim_store ds left join yp_dwd.dim_trade_area ta
    on ds.trade_area_id = ta.id and ds.end_date = "9999-99-99"

left join yp_dwd.dim_location  loca
    on ds.id =loca.correlation_id and loca.type=2 and loca.end_date = "9999-99-99"

left join yp_dwd.dim_district county on loca.adcode = county.code
left join yp_dwd.dim_district city on county.pid = city.code
left join yp_dwd.dim_district province on city.pid = province.code;

相关文章

网友评论

      本文标题:DWB宽表建立之地址和地区三级联动问题

      本文链接:https://www.haomeiwen.com/subject/sgktprtx.html