新零售数据中台:如何将SKU和SPU粒度数据表融合到一张表

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 作为新零售行业从业者,最常见的问题就是以何种粒度在数据仓库存储订单交易数据表。常见的粒度有三类:(1)以商品SKU为粒度存储订单数;(2)以商品SPU为粒度存储订单数据;(3)以交易订单为粒度存储订单数据。其中,第3种方式以交易订单为粒度存储订单数据,更加适合交易明细数据表,对于数据仓库存储方式不是很合适。因此,本文重点阐述如何将SKU粒度数据表与SPU粒度数据表进行融合。

1、新零售行业数据分析背景介绍

作为新零售行业从业者,最常见的问题就是以何种粒度在数据仓库存储订单交易数据表。常见的粒度有三类:(1)以商品SKU为粒度存储订单数;(2)以商品SPU为粒度存储订单数据;(3)以交易订单为粒度存储订单数据。其中,第3种方式以交易订单为粒度存储订单数据,更加适合交易明细数据表,对于数据仓库存储方式不是很合适。因此,本文重点阐述如何将SKU粒度数据表与SPU粒度数据表进行融合。
为什么会出现两种不同粒度的数据表存储方式呢? 通常有两种决定因素:第1种因素与零售行业数据分析业务特性有关系;第2种因素与数据量大小有关系。

零售行业数据分析业务特性
 如果需要分析近期的商品销售情况,决策者往往会需要看到商品最细粒度的销量,商品最细粒度就是SKU。对于零售行业,SKU = 货号(SPU) + 规格/颜色。哪款货号商品最畅销? 具体某款货号的哪种规格/颜色最畅销? 今年流行什么款式、什么装饰、什么颜色? 这些商品销售数据分析都需要细化到商品SKU粒度。
 如果需要分析最近五年、十年甚至历史累计商品销售情况,决策者往往不需要细化到SKU粒度,通常SPU(货号)粒度足够满足分析需求。

数据量大小
 分析近期的商品销售情况,比如最近15天、最近一个月、最近三个月等情况,汇总得到的SKU粒度销售数据量往往小于百万条,利用常规BI工具即可快速分析得到结果。
 分析最近几年、或者历史累计销售情况,如果还是采用SKU粒度存储数据,数据量往往过亿、甚至数十亿,常规BI工具很难快速得到分析结果。

以上从行业特性、数据量大小两个角度分析为什么同一家公司往往存在SKU、SPU两种粒度的商品销售数据表。除此之外,往往还存在库存采用SPU粒度、销售采用SKU粒度;统配采用SPU粒度、发货采用SKU粒度等诸多情况。
但是,在数据仓库分析领域,很多时候需要将不同粒度的数据表进行融合,进而得到统一的分析结果。比如:将本年商品销售数据 与 历史累计商品销售数据 进行融合分析; 将本年商品销售数据 与 本年库存数据进行关联分析。 这些情况往往都需要将SKU粒度数据表 与 SPU粒度数据表做融合分析,或者做关联分析。
本文介绍一种简单的数据预处理方法,将SKU粒度数据表与SPU粒度数据表融合到一张表,希望思路可以提供给大家参考。

2、 SKU和SPU粒度数据融合方法

假设有两张数据表: sku_table 和 spu_table,分别按照sku粒度和spu粒度存储商品销售数据。

2.1 查看表结构

--建表语句
create table if not exists test_project.sku_table (
        shopno string comment '门店代码',
        prodno string comment '产品代码',
        sizeno string comment '规格代码',
        rtam_lastyy Double  comment '某款sku商品的本年销售金额'
) comment 'sku粒度的数据表' PARTITIONED BY (ds string comment '分区日期') lifecycle 200;

create table if not exists test_project.spu_table (
        shopno string comment '门店代码',
        prodno string comment '产品代码',
        rtam_lishileiji Double  comment '某款spu粒度商品的历史累计销售金额'
) comment ' spu粒度的数据表' PARTITIONED BY (ds string comment '分区日期') lifecycle 200;

注意:上述数据表中,prodno就是货号,也就是常说的SPU, prodno与sizeno组合就成为SKU。
对于sku_table,以 shopno + prodno + sizeno为联合主键表示1条数据。1条商品销售数据,以 “门店 + 商品货号代码 + 规格/颜色”记录1条销售数据,这种情况常见于新零售行业的数据仓库。
对于spu_table,以shopno + prodno 为联合主键表示1条数据。1条商品销售数据,以 “门店 + 商品货号代码”记录1条销售数据,这种情况常见于新零售行业的数据仓库。

2.2 查看数据

select * from test_project.sku_table where ds = '20200417';

1.jpg

select * from test_project.spu_table where ds = '20200417';

2.jpg

2.3 将sku_table 与 spu_table融合到一张表

首先建立一张数据表,用于存储融合之后的数据:

create table if not exists test_project.sku_spu_merge_table (
                    shopno string comment '门店代码',
                    prodno string comment '产品代码',
                    sizeno string comment '规格代码',
                    rtam_lastyy Double  comment '某款sku商品的本年销售金额',
                    rtam_lishileiji Double  comment '某款spu粒度商品的历史累计销售金额'
) comment '将sku粒度数据(本年销售表)与spu粒度数据(历史累计销售表)整合到一张表' PARTITIONED BY (ds string comment '分区日期') lifecycle 200;

然后将两张表导入到test_project.sku_spu_merge_table数据表:

insert overwrite table 
    test_project.sku_spu_merge_table partition (ds = '20200417')
    select
        COALESCE (v1.shopno, v2.shopno) as shopno,
        COALESCE (v1.prodno, v2.prodno) as prodno,
        v1.sizeno,
        v1.rtam_lastyy,
        v2.rtam_lishileiji
        from
        (
            select
                shopno,
                prodno,
                sizeno,
                rtam_lastyy,
                row_number() over ( partition by shopno,prodno order by sizeno) size_order
            from
                test_project.sku_table
            where ds = '20200417'
        ) v1
        full outer join 
        (
            select
                shopno,
                prodno,
                rtam_lishileiji,
                1 join_order
            from
                test_project.spu_table
            where ds = '20200417'
        ) v2 
        on (v1.shopno = v2.shopno) and (v1.prodno = v2.prodno) and (v1.size_order = v2.join_order);

上述SQL的原理稍作解释:
1) 首先利用row_number() over ( partition by shopno,prodno order by sizeno) 函数对sku_table 按照shopno,prodno(也就是 门店+货号)进行分组,然后按照sizeno进行排序,将排序结果赋值给size_order;
2) 然后将sku_table新增最后一列join_order,赋予1这个固定值;
3) 最后将sku_table 和 spu_table 做full outer join,join的条件是 (v1.shopno = v2.shopno) and (v1.prodno = v2.prodno) and (v1.size_order = v2.join_order)。特别是条件:v1.size_order = v2.join_order,也就是将sku_table按照shopno,prodno分组排序之后的第1行(也就是size_order=1) 与 spu_table 进行对应(也就是join_order=1)进行关联。

最终得到的效果如下所示:
3.jpg

最终将sku_table 和 spu_table 融合到一张数据表。
 对于原来SKU粒度的sku_table,保持原样;
 对于SPU粒度的spu_table,当(shopno + prodno) 与sku_table相同时,也就是 (同一个门店 + 同一个货号商品),第1个sizeno放真实的历史累计销售数据;后面的历史累计销售数据被置为空。
上述做法的好处在于:对数据做融合分析(比如求和、求平均值),不会因为spu的数据重复计算而出现计算错误。

3、 进一步分析

本文给出的sku粒度和spu粒度的数据融合方法只是一个参考,读者可以利用本文的思路继续拓展其他方法。比如:将SPU粒度的销售数据按照该SPU下面有多少个SKU,先做平均值,然后赋值给融合之后的数据表。另外一个思路,可以先将SPU粒度的数据表与订单明细表做关联分析,得到SPU下面每一个SKU的销售数据,然后再和SK粒度的数据表做融合。具体采用哪种方案,需要读者根据实际业务情况、项目需求决定。

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
数据采集 存储 分布式计算
基于DataWorks搭建新零售数据中台
文章作者:许日(欢伯),在2016年盒马早期的时候,转到盒马事业部作为在线数据平台的研发负责人,现任阿里云计算平台DataWorks建模引擎团队负责人。 文章简介:本篇文章向大家分享新零售企业如何基于DataWorks搭建数据中台,从商业模式及业务的设计,到数据中台的架构设计与产品选型,再到数据中台搭建的最佳实践,最后利用数据中台去反哺业务,辅助人工与智能的决策。 内容贡献:李启平(首义),盒马从初创至今的数据研发负责人,有非常资深的数仓及数据中台建设的经验,原阿里巴巴国际业务数仓负责人。
37420 6
基于DataWorks搭建新零售数据中台
|
数据采集 新零售 双11
解决方案应用实例 |数据中台赋能,雅戈尔开辟新零售“战场”
雅戈尔目前已经实现了全员上云,保证了疫情期间整个公司的工作在线上运转正常。在货和场方面的改造推进也非常成功,消费者线上下单——线下发货,线下A门店下单——B门店发货都非常通畅,在直播带货方面也取得了非常不错的成绩,所有门店都行动起来,每次都能带来上千万的销售业绩,成为行业的示范标杆。
662 0
解决方案应用实例 |数据中台赋能,雅戈尔开辟新零售“战场”
|
新零售
独家下载!《零售数据中台通关指南》,带你玩转新零售
阿里CIO学堂独家出品,零售课程实录公开。《零售数据中台通关指南》来啦!速度来pick。
356 0
独家下载!《零售数据中台通关指南》,带你玩转新零售
|
新零售 供应链 知识图谱
独家下载!《零售数据中台通关指南》,带你玩转新零售
阿里CIO学堂独家出品,零售课程实录公开。《零售数据中台通关指南》来啦!速度来pick。
31815 0
独家下载!《零售数据中台通关指南》,带你玩转新零售
|
新零售 数据挖掘 BI
新零售行业优质解决方案分享【全域数据中台解决方案】
全域数据中台解决方案,面向各行各业大数据建设、管理及应用诉求,一站式提供从数据接入到数据消费全链路的智能数据构建与管理的大数据能力,进行全域数据分析。并以消费者运营为核心,通过丰富的用户洞察模型和便捷的策略配置,助力企业实现用户增长。
734 0
新零售行业优质解决方案分享【全域数据中台解决方案】
|
数据采集 人工智能 安全
数据中台: 新技术、新建设、新融合
数据中台: 新技术、新建设、新融合
532 0
|
新零售 供应链 大数据
最艰难中报季 新零售、数据中台成财报高频热词
在上半年社会消费品零售总额同比下降11.4%的背景下,部分相关行业企业实现业绩逆势飘红。记者分析财报发现,这些企业都是新零售的先行者,**数据中台、新零售**也不约而同地成为这些企业财报中的高频词。
6234 0
最艰难中报季 新零售、数据中台成财报高频热词
|
新零售 搜索推荐 数据挖掘
新零售企业如何借助全域数据中台进行自有用户洞察
全域数据中台能够提供:用户洞察数据模型、用户洞察分析、用户画像体系,帮助企业更加深入的了解用户,企业可以通过深度分析给用户提供更好的服务,建立客户关系管理,完善用户运营。
396 0
|
1月前
|
存储 自然语言处理 关系型数据库
基于阿里云通义千问开发智能客服与问答系统
在企业的数字化转型过程中,智能客服系统已成为提高客户满意度和降低运营成本的重要手段。阿里云的通义千问作为一款强大的大语言模型,具有自然语言理解、对话生成、知识检索等能力,非常适合用来开发智能客服与问答系统。 通过本博客,我们将演示如何基于阿里云的通义千问模型,结合阿里云相关产品如函数计算(FC)、API网关、RDS等,搭建一个功能齐全的智能客服系统。
149 5
|
5月前
|
人工智能 自然语言处理 Serverless
阿里云百炼应用实践系列-让微信公众号成为智能客服
本文主要介绍如何基于百炼平台快速在10分钟让您的微信公众号(订阅号)变成 AI 智能客服。我们基于百炼平台的能力,以官方帮助文档为参考,让您的微信公众号(订阅号)成 为AI 智能客服,以便全天候(7x24)回应客户咨询,提升用户体验,介绍了相关技术方案和主要代码,供开发者参考。
阿里云百炼应用实践系列-让微信公众号成为智能客服