数仓建模-用户维表的构建(一)-map join和smb join

背景简介

在绝大部分场景中,用户维度都是一个必不可少的维度,而且随着业务发展和积累,相比其他维度,用户维度应该会是一数据量个比较大的维度。

由于历史原因,在我们这,用户维度的数据源来自于几个业务库,每个业务库记录了每个用户不同的信息。比如现在有两个业务A和B分别记录了各自业务系统里获取的用户信息,其中业务A产出的用户信息表userinfoA如下。这里的userid跟注册无关,而跟手机有关,这意味着一个手机上,如果出现我们app多个产品线,比如主版本,预装定制版,厂商定制版等等,虽然会是对应不同的app,但是userid是一样的,在后台会有一个产品id的字段加以区分。这里userinfo表记录的是跟产品无关的信息,比如系统平台(安卓,ios),系统版本等等。

                                             userinfoA
userid 用户id
infoA1 信息1,与产品无关的信息,如手机型号,平台版本等
ctime 记录创建时间
mtime 记录修改时间

业务B产出的用户信息表userinfoB如下,其中pid即之前说的产品id,用以区分不同产品。

                                         userinfoB
userid 用户id
pid 产品id
infoB 信息B,与产品有关的信息,如用户在某产品的激活时间等
ctime 记录创建时间
mtime 记录修改时间

两个表都是在业务上都进行了分表操作,数据量大约都在8亿条左右。当构建用户维表时,一种思路是为每个产品pid,创建一份维表,另一种是维护一个维表,加入产品id作为其中一列。考虑到实际场景,一方面产品id和用户id作为日志要求的必须字段,存在于绝大部分有效日志中,另一方面,主线产品其实占了绝大部分记录数,其余产品线多且杂,统计需求上也基本以主线产品为主。所以采用了第二种方式,这样在有必要的情况下,也能抽取特定的pid生成特定产品的用户维表。所以初步维表设计如下

<
                                                                                                   dim_userinfo
userid
pid
infoA
infoB
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值