导图社区 网店供应链线上仓库管理系统
网店供应链线上仓库管理系统梳理,主要包括ODS、DWD、DWS、ADS以及实时项目这几个部分。
编辑于2022-11-16 10:51:28 广东网店供应链线上仓库管理系统
ODS
用户行为数仓(含公共字段)
公共字段: `mid_id` string, `user_id` string, `version_code` string, `version_name` string, `lang` string, `source` string, `os` string, `area` string, `model` string, `brand` string, `sdk_version` string, `gmail` string, `height_width` string, `app_time` string, `network` string, `lng` string, `lat` string, `action` string,
启动日志表
启动日志的每一条数据是没有公共字段的,并且它的事件标签为start,时间戳信息也在其中 50+个字段,包含多个动态字段 { "action":"1" "report_time","134523523523", ...... } 建表语句: drop table if exists ods_start_log; CREATE EXTERNAL TABLE ods_start_log (`line` string) PARTITIONED BY (`dt` string) STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION '/warehouse/gmall/ods/ods_start_log'; 执行Sql: load data inpath '/origin_data/gmall/log/topic_start/$do_date' into table "$APP".ods_start_log partition(dt='$do_date');
广告表
dwd_ad_log( `mid_id` string, `user_id` string, `version_code` string, `version_name` string, `lang` string, `source` string, `os` string, `area` string, `model` string, `brand` string, `sdk_version` string, `gmail` string, `height_width` string, `app_time` string, `network` string, `lng` string, `lat` string, `entry` string, `action` string, `content` string, `detail` string, `ad_source` string, `behavior` string, `newstype` string, `show_style` string, `server_time` string) PARTITIONED BY (dt string) stored as parquet location '/warehouse/gmall/dwd/dwd_ad_log/' TBLPROPERTIES('parquet.compression'='lzo');
消息通知相关表
`mid_id` string, `user_id` string, `version_code` string, `version_name` string, `lang` string, `source` string, `os` string, `area` string, `model` string, `brand` string, `sdk_version` string, `gmail` string, `height_width` string, `app_time` string, `network` string, `lng` string, `lat` string, `action` string, `noti_type` string, `ap_time` string, `content` string, `server_time` string, `errorBrief` string, `errorDetail` string, `server_time` string)
商品相关表
`mid_id` string, `user_id` string, `version_code` string, `version_name` string, `lang` string, `source` string, `os` string, `area` string, `model` string, `brand` string, `sdk_version` string, `gmail` string, `height_width` string, `app_time` string, `network` string, `lng` string, `lat` string, `action` string, `goodsid` string, `place` string, `extend1` string, `category` string, `entry` string, `action` string, `goodsid` string, `showtype` string, `news_staytime` string, `loading_time` string, `type1` string, `category` string, `loading_time` string, `loading_way` string, `extend1` string, `extend2` string, `type` string, `type1` string, `server_time` string)
用户活跃相关表
push_id` string, `access` string, `active_source` string, `server_time` string
点赞收藏评论表
`id` string, `userid` string, `target_id` string, `type` string, `add_time` string, `comment_id` int, `userid` int, `p_comment_id` int, `content` string, `addtime` string, `other_id` int, `praise_count` int, `reply_count` int, `stars` string, `server_time` string
业务数仓
用户表
订单表
订单详情表
支付流水表
商品表
id skuId spu_id spuid price 价格 sku_name 商品名称 sku_desc 商品描述 weight 重量 tm_id 品牌id category3_id 品类id create_time 创建时间
商品一级分类表
id id name 名称
商品二级分类表
标签 含义 id id name 名称 category1_id 一级品类id
商品三级分类表
id id name 名称 Category2_id 二级品类id
退货申请表
关键字段: 用户id, 用户账号, 购买商品id, 退货原因, 提交日期
礼物提交表
关键字段: 用户id, 用户账号, 购买商品id, 礼物商品id 提交日期
国家表
DWD
日志类型解析表
启动日志表
广告表
dwd_ad_log( `mid_id` string, `user_id` string, `version_code` string, `version_name` string, `lang` string, `source` string, `os` string, `area` string, `model` string, `brand` string, `sdk_version` string, `gmail` string, `height_width` string, `app_time` string, `network` string, `lng` string, `lat` string, `action` string, `content` string, `detail` string, `ad_source` string, `behavior` string, `newstype` string, `show_style` string, `server_time` string) PARTITIONED BY (dt string) stored as parquet location '/warehouse/gmall/dwd/dwd_ad_log/' TBLPROPERTIES('parquet.compression'='lzo');
消息通知表
dwd_notification_log( `mid_id` string, `user_id` string, `version_code` string, `version_name` string, `lang` string, `source` string, `os` string, `area` string, `model` string, `brand` string, `sdk_version` string, `gmail` string, `height_width` string, `app_time` string, `network` string, `lng` string, `lat` string, `action` string, `noti_type` string, `ap_time` string, `content` string, `server_time` string ) PARTITIONED BY (dt string) stored as parquet location '/warehouse/gmall/dwd/dwd_notification_log/' TBLPROPERTIES('parquet.compression'='lzo');
错误日志表
dwd_error_log; CREATE EXTERNAL TABLE dwd_error_log( `mid_id` string, `user_id` string, `version_code` string, `version_name` string, `lang` string, `source` string, `os` string, `area` string, `model` string, `brand` string, `sdk_version` string, `gmail` string, `height_width` string, `app_time` string, `network` string, `lng` string, `lat` string, `errorBrief` string, `errorDetail` string, `server_time` string) PARTITIONED BY (dt string) stored as parquet location '/warehouse/gmall/dwd/dwd_error_log/' TBLPROPERTIES('parquet.compression'='lzo');
商品点击表
dwd_display_log( `mid_id` string, `user_id` string, `version_code` string, `version_name` string, `lang` string, `source` string, `os` string, `area` string, `model` string, `brand` string, `sdk_version` string, `gmail` string, `height_width` string, `app_time` string, `network` string, `lng` string, `lat` string, `action` string, `goodsid` string, `place` string, `extend1` string, `category` string, `server_time` string ) PARTITIONED BY (dt string) stored as parquet location '/warehouse/gmall/dwd/dwd_display_log/' TBLPROPERTIES('parquet.compression'='lzo');
商品详情表
dwd_newsdetail_log( `mid_id` string, `user_id` string, `version_code` string, `version_name` string, `lang` string, `source` string, `os` string, `area` string, `model` string, `brand` string, `sdk_version` string, `gmail` string, `height_width` string, `app_time` string, `network` string, `lng` string, `lat` string, `entry` string, `action` string, `goodsid` string, `showtype` string, `news_staytime` string, `loading_time` string, `type1` string, `category` string, `server_time` string) PARTITIONED BY (dt string) stored as parquet location '/warehouse/gmall/dwd/dwd_newsdetail_log/' TBLPROPERTIES('parquet.compression'='lzo');
商品列表页表
dwd_loading_log( `mid_id` string, `user_id` string, `version_code` string, `version_name` string, `lang` string, `source` string, `os` string, `area` string, `model` string, `brand` string, `sdk_version` string, `gmail` string, `height_width` string, `app_time` string, `network` string, `lng` string, `lat` string, `action` string, `loading_time` string, `loading_way` string, `extend1` string, `extend2` string, `type` string, `type1` string, `server_time` string) PARTITIONED BY (dt string) stored as parquet location '/warehouse/gmall/dwd/dwd_loading_log/' TBLPROPERTIES('parquet.compression'='lzo');
用户前台活跃表
dwd_active_foreground_log( `mid_id` string, `user_id` string, `version_code` string, `version_name` string, `lang` string, `source` string, `os` string, `area` string, `model` string, `brand` string, `sdk_version` string, `gmail` string, `height_width` string, `app_time` string, `network` string, `lng` string, `lat` string, `action` string, `push_id` string, `access` string, `server_time` string) PARTITIONED BY (dt string) stored as parquet location '/warehouse/gmall/dwd/dwd_foreground_log/' TBLPROPERTIES('parquet.compression'='lzo');
用户后台活跃表
dwd_active_background_log( `mid_id` string, `user_id` string, `version_code` string, `version_name` string, `lang` string, `source` string, `os` string, `area` string, `model` string, `brand` string, `sdk_version` string, `gmail` string, `height_width` string, `app_time` string, `network` string, `lng` string, `lat` string, `action` string, `active_source` string, `server_time` string ) PARTITIONED BY (dt string) stored as parquet location '/warehouse/gmall/dwd/dwd_background_log/' TBLPROPERTIES('parquet.compression'='lzo');
点赞表
dwd_praise_log( `mid_id` string, `user_id` string, `version_code` string, `version_name` string, `lang` string, `source` string, `os` string, `area` string, `model` string, `brand` string, `sdk_version` string, `gmail` string, `height_width` string, `app_time` string, `network` string, `lng` string, `lat` string, `id` string, `userid` string, `target_id` string, `type` string, `add_time` string, `server_time` string ) PARTITIONED BY (dt string) stored as parquet location '/warehouse/gmall/dwd/dwd_praise_log/' TBLPROPERTIES('parquet.compression'='lzo');
收藏表
dwd_favorites_log( `mid_id` string, `user_id` string, `version_code` string, `version_name` string, `lang` string, `source` string, `os` string, `area` string, `model` string, `brand` string, `sdk_version` string, `gmail` string, `height_width` string, `app_time` string, `network` string, `lng` string, `lat` string, `id` int, `course_id` int, `userid` int, `add_time` string, `server_time` string ) PARTITIONED BY (dt string) stored as parquet location '/warehouse/gmall/dwd/dwd_favorites_log/' TBLPROPERTIES('parquet.compression'='lzo');
评论表
dwd_comment_log( `mid_id` string, `user_id` string, `version_code` string, `version_name` string, `lang` string, `source` string, `os` string, `area` string, `model` string, `brand` string, `sdk_version` string, `gmail` string, `height_width` string, `app_time` string, `network` string, `lng` string, `lat` string, `comment_id` int, `userid` int, `p_comment_id` int, `content` string, `addtime` string, `other_id` int, `praise_count` int, `reply_count` int, `server_time` string ) PARTITIONED BY (dt string) stored as parquet location '/warehouse/gmall/dwd/dwd_comment_log/' TBLPROPERTIES('parquet.compression'='lzo');
好评表
关键字段: 用户id, stars, add_time, content, replycount, servertime
差评表
关键字段: 用户id, stars, add_time, content, replycount, servertime
维度退化
用户表
id 用户id name 姓名 birthday 生日 gender 性别 email 邮箱 user_level 用户等级 create_time 创建时间
订单表
id 订单编号 total_amount 订单金额 order_status 订单状态 user_id 用户id payment_way 支付方式 out_trade_no 支付流水号 create_time 创建时间 operate_time 操作时间 id 订单编号 total_amount 订单金额 order_status 订单状态 user_id 用户id payment_way 支付方式 out_trade_no 支付流水号 create_time 创建时间 operate_time 操作时间
订单详情表
id 订单编号 order_id 订单号 user_id 用户id sku_id 商品id sku_name 商品名称 order_price 商品价格 sku_num 商品数量 create_time 创建时间
支付流水表
id 编号 out_trade_no 对外业务编号 order_id 订单编号 user_id 用户编号 alipay_trade_no 支付宝交易流水编号 total_amount 支付金额 subject 交易内容 payment_type 支付类型 payment_time 支付时间
商品表
id skuId spu_id spuid price 价格 sku_name 商品名称 sku_desc 商品描述 weight 重量 tm_id 品牌id category3_id 品类id create_time 创建时间
用户退货表
用户id 用户邮箱 用户地址 用户联系方式 退货商品 退货数量 退货原因 申请时间
用户礼物表
用户id 用户账号 用户等级 用户邮箱 用户地址 用户联系方式 礼物名称 礼物数量 申请时间
国家表
国家id 国家编号
DWS
设备活跃新增宽表
`mid_id` string COMMENT '设备唯一标识', `user_id` string COMMENT '用户标识', `version_code` string COMMENT '程序版本号', `version_name` string COMMENT '程序版本名', `lang` string COMMENT '系统语言', `source` string COMMENT '渠道号', `os` string COMMENT '安卓系统版本', `area` string COMMENT '区域', `model` string COMMENT '手机型号', `brand` string COMMENT '手机品牌', `sdk_version` string COMMENT 'sdkVersion', `gmail` string COMMENT 'gmail', `height_width` string COMMENT '屏幕宽高', `app_time` string COMMENT '客户端日志产生时的时间', `network` string COMMENT '网络模式', `lng` string COMMENT '经度', `lat` string COMMENT '纬度', `create_date` string comment '创建时间' `retention_day` int comment '截止当前日期留存天数' `monday_date` string COMMENT '周一日期', `sunday_date` string COMMENT '周日日期' `mn` 月
日活设备明细表
周活设备明细表
月活设备明细表
每日新增设备表
每周设备新增表
每月设备新增表
每日留存用户表
市场表
市场渠道来源明细表
`mid_id` string, `user_id` string, `version_code` string, `version_name` string, `lang` string, `source` string, `os` string, `area` string, `model` string, `brand` string, `sdk_version` string, `gmail` string, `height_width` string, `app_time` string, `network` string, `lng` string, `lat` string, `action` string, `content` string, `detail` string, `ad_source` string, `behavior` string, `newstype` string, `show_style` string, `server_time` string, 国家id 国家编号)
宽表
用户行为宽表
CREATE TABLE `app_usr_interact`( `stat_dt` date COMMENT '互动日期', `user_id` string COMMENT '用户id', `nickname` string COMMENT '用户昵称', `register_date` string COMMENT '注册日期', `register_from` string COMMENT '注册来源', `remark` string COMMENT '细分渠道', `province` string COMMENT '注册省份', `pl_cnt` bigint COMMENT '评论次数', `ds_cnt` bigint COMMENT '打赏次数', `sc_add` bigint COMMENT '添加收藏', `sc_cancel` bigint COMMENT '取消收藏', `gzg_add` bigint COMMENT '关注商品', `gzg_cancel` bigint COMMENT '取消关注商品', `gzp_add` bigint COMMENT '关注人', `gzp_cancel` bigint COMMENT '取消关注人', `buzhi_cnt` bigint COMMENT '点不值次数', `zhi_cnt` bigint COMMENT '点值次数', `zan_cnt` bigint COMMENT '点赞次数', `share_cnts` bigint COMMENT '分享次数', `bl_cnt` bigint COMMENT '爆料数', `fb_cnt` bigint COMMENT '好价发布数', `online_cnt` bigint COMMENT '活跃次数', `checkin_cnt` bigint COMMENT '签到次数', `fix_checkin` bigint COMMENT '补签次数', `house_point` bigint COMMENT '幸运屋金币抽奖次数', `house_gold` bigint COMMENT '幸运屋积分抽奖次数', `pack_cnt` bigint COMMENT '礼品兑换次数', `gold_add` bigint COMMENT '获取金币', `gold_cancel` bigint COMMENT '支出金币', `surplus_gold` bigint COMMENT '剩余金币', `event` bigint COMMENT '电商点击次数', `gmv_amount` bigint COMMENT 'gmv', `gmv_sales` bigint COMMENT '订单数') PARTITIONED BY ( `dt` string)
用户购买商品明细表
user_id comment '用户 id', order_count comment '下单次数 ', order_amount comment '下单金额 ', payment_count comment '支付次数', payment_amount comment '支付金额 comment_count comment '评论次数'
退货明细表
关键字段: id 用户id name 姓名 birthday 生日 gender 性别 email 邮箱 user_level 用户等级 用户账号, 购买商品id, 退货原因, 提交日期 id skuId spu_id spuid price 价格 sku_name 商品名称 sku_desc 商品描述 weight 重量 tm_id 品牌id category3_id 品类id create_time 创建时间 create_time 创建时间
礼物明细表
id 用户id name 姓名 birthday 生日 gender 性别 email 邮箱 user_level 用户等级 create_time 创建时间 id skuId spu_id spuid price 价格 sku_name 商品名称 sku_desc 商品描述 weight 重量 tm_id 品牌id category3_id 品类id create_time 创建时间 礼物名称 礼物数量 申请时间
订单表拉链表
订单表拉链表 dwd_order_info_his `id` string COMMENT '订单编号', `total_amount` decimal(10,2) COMMENT '订单金额', `order_status` string COMMENT '订单状态', `user_id` string COMMENT '用户id' , `payment_way` string COMMENT '支付方式', `out_trade_no` string COMMENT '支付流水号', `create_time` string COMMENT '创建时间', `operate_time` string COMMENT '操作时间' , `start_date` string COMMENT '有效开始日期', `end_date` string COMMENT '有效结束日期'
ADS
活跃表
活跃设备数量表
思路: 在启动日志中统计不同设备id出现次数。
沉默用户数量表
思路: (登录时间为7天前,且只出现过一次) 按照设备id对日活表分组,登录次数为1,且是在一周前登录
流失用户数量表
思路: (登录时间为7天前) 按照设备id对日活表分组,且七天内没有登录过。
留存用户数量表
思路: 留存用户=前一天新增 join 今天活跃 用户留存率=留存用户/前一天新增
最近7天连续三天活跃
思路: 1)查询出最近7天的活跃用户,并对用户活跃日期进行排名 2)计算用户活跃日期及排名之间的差值 3)对同用户及差值分组,统计差值个数 4)将差值相同个数大于等于3的数据取出,然后去重(去的是什么重???),即为连续3天及以上活跃的用户
本周回流用户数量表
思路: 本周活跃left join本周新增 left join上周活跃,且本周新增id和上周活跃id都为null
连续三周活跃用户表
思路: 按照设备id对周活进行分组,统计次数大于3次。
用户累计访问次数
建表语句: create external table dws_user_total_count_day( `mid_id` string COMMENT '设备id', `subtotal` bigint COMMENT '每日登录小计' ) partitioned by(`dt` string) row format delimited fields terminated by '\t' location '/warehouse/gmall/ads/dws_user_total_count_day'; 思路: 按照日期与mid进行分组count
月活跃率
思路: 月活跃用户与截止到该月累计的用户总和之间的比例 create external table ads_mn_ratio_count( `dt` string COMMENT '统计日期', `mn` string COMMENT '统计月活跃率的月份', `ratio` string COMMENT '各个商品点击次数' ) row format delimited fields terminated by '\t' location '/warehouse/gmall/ads/ads_mn_ratio_count';
新增表
每日新增设备数量表
思路: 用活跃用户表 left join 用户新增表,用户新增表中mid为空的即为用户新增。 create external table ads_new_mid_count ( `create_date` string comment '创建时间' , `new_mid_count` BIGINT comment '新增设备数量' ) COMMENT '每日新增设备信息数量' row format delimited fields terminated by '\t' location '/warehouse/gmall/ads/ads_new_mid_count/';
每周新增设备数量表
思路: 本周活跃left join本周新增,且本周新增的mid为null
每月新增设备数量表
思路: 本月活跃left join本月新增,且本月新增的mid为null
Top表
Top10销量商品表
思路: 1)用户购买商品明细表按照日期,商品一级分类,二级分类,三级分类进行聚合 2)按照商品一级分类,二级分类,三级分类分区,支付金额倒序排序 3)取前10
各个商品点击次数Top3的用户
select '2019-02-10', goodsid, mid_id, display_count from ( select goodsid, mid_id, display_count from (select goodsid, mid_id, display_count, row_number() over(partition by goodsid order by display_count) rk from dws_user_action_wide_log where display_count>0)t1 where rk )t2;
每日各类别下点击次数Top10商品
select '2019-02-10', category, goodsid, count1 from ( select category, goodsid, count1, rank() over(partition by category,goodsid order by count1 desc) rk from ( select category, goodsid, count(*) count1 from dwd_display_log where action=2 group by category,goodsid)t1 )t2 where rk
点击次数最多的10个用户点击的商品次数Top10
create external table ads_goods_user_count( `dt` string COMMENT '日期', `u_ct` string COMMENT '用户总点击次数', `goodsid` string COMMENT '商品id', `d_ct` string COMMENT '各个商品点击次数' ) row format delimited fields terminated by '\t' location '/warehouse/gmall/ads/ads_goods_user_count';
Top1事业部销量表
公司分为不同的品牌事业部,根据不同产品所属事业部编号进行分组聚合取第一个(注意是否并列第一)
购买表
各国家用户复购率排行
tm_id string comment '品牌id', category1_id string comment '1级品类id ', category1_name string comment '1级品类名称 ', buycount bigint comment '购买人数', buy_twice_last bigint comment '两次以上购买人数', buy_twice_last_ratio decimal(10,2) comment '单次复购率', buy_3times_last bigint comment '三次以上购买人数', buy_3times_last_ratio decimal(10,2) comment '多次复购率', stat_mn string comment '统计月份', stat_date string comment '统计日期'
各国家购买率
思路: 不同国家销量与总销量的比率
各国家用户行为漏斗分析
create external table ads_user_action_convert_day( `dt` string COMMENT '统计日期', `total_visitor_m_count` bigint COMMENT '总访问人数', `order_u_count` bigint COMMENT '下单人数', `visitor2order_convert_ratio` decimal(10,2) COMMENT '访问到下单转化率', `payment_u_count` bigint COMMENT '支付人数', `order2payment_convert_ratio` decimal(10,2) COMMENT '下单到支付的转化率' ) COMMENT '用户行为漏斗分析' row format delimited fields terminated by '\t' location '/warehouse/gmall/ads/ads_user_action_convert_day/';
各国家订单数/订单总额/支付数/支付总额(GMV)
思路: 用户购买商品明细表按照国家进行聚合
每日GMV成交总额表
create external table ads_gmv_sum_day( `dt` string COMMENT '统计日期', `gmv_count` bigint COMMENT '当日gmv订单个数', `gmv_amount` decimal(16,2) COMMENT '当日gmv订单总金额', `gmv_payment` decimal(16,2) COMMENT '当日支付金额' ) COMMENT 'GMV' row format delimited fields terminated by '\t' location '/warehouse/gmall/ads/ads_gmv_sum_day/';
所有用户行为漏斗分析
create external table ads_user_action_convert_day( `dt` string COMMENT '统计日期', `total_visitor_m_count` bigint COMMENT '总访问人数', `order_u_count` bigint COMMENT '下单人数', `visitor2order_convert_ratio` decimal(10,2) COMMENT '访问到下单转化率', `payment_u_count` bigint COMMENT '支付人数', `order2payment_convert_ratio` decimal(10,2) COMMENT '下单到支付的转化率' ) COMMENT '用户行为漏斗分析' row format delimited fields terminated by '\t' location '/warehouse/gmall/ads/ads_user_action_convert_day/';
曝光率
亚马逊提供数据
点击-加购物车转化率
从漏斗分析取数据
加购物车-支付转化率
从漏斗分析取数据
售后表
物流退货率
思路: 退货数量/销量
产品不满退货率
思路: 退货明细中产品不满数量/退货总数
礼物转化率
思路: 昨日礼物明细表用户与今日订单用户join所得数量/昨日礼物数量
投诉率
思路: 退货明细中退货原因为客服,商品等原因投诉的个数/退货总数量
市场
市场推广率表
思路: 各国家推广费/总推广费
推广费用占比
思路: 推广费用/销售额
推广转化率
思路: 来自广告表的订单/总订单
实时项目
日活分时数
1. 把今日新增的活跃用户保存到redis中 2. 每条数据经过过滤,去掉redis中已有的用户 3. 去掉本批次重复的用户
新增用户分时数
交易额分时数
订单数分时数
Coupon风险预警
1) 从kafka中消费数据,根据条件进行过滤筛选,生成预警日志。 2) 预警日志保存到ElasticSearch中 3) 利用Kibana 快速搭建可视化图形界面
购买明细灵活分析
1) 利用canal抓取对应的数据表的实时新增变化数据,推送到Kafka 2) 在spark-streaming中进行转换,过滤,关联组合成宽表的结构。 3) 保存到ES中 4) 从ES读取数据发布接口,对接可视化模块。
实时热门商品统计
1)过滤点击事件 2)设置滑动窗口,统计点击量
实时流量分析
每隔5秒,输出最近10分钟内访问量最多的前N个URL。
恶意点击监控
CEP
订单支付实时监控
CEP
渠道来源用户数