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

2022-05-19  本文已影响0人  Eqo

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

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

建表分析:店铺明细宽表

image.png

店铺明细宽表主要有

只需要 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;

上一篇 下一篇

猜你喜欢

热点阅读