零售行业消费者域离线数仓构建思考

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 该文章所有的思考都是个人理解,不一定准确,也不一定适合所有的零售行业,主要以“业务”,“建模”和“调优”三个大方向来讲述。

该文章所有的思考都是个人理解,不一定准确,也不一定适合所有的零售行业,主要以“业务”,“建模”和“调优”三个大方向来讲述。

业务理解

目前我接触的行业还是以渠道的业务为主,消费者的整体重视程度还是很低,这就导致直接拉通业务沟通的机会很少,很多适合可能只能和开发沟通,而且就算和业务沟通,所能得到的信息也会和实际有所偏差。

因为每个业务系统的业务或者开发其实更多的只能看到自己能看到的,比如我是个以营销为主的平台,我就很少重视订单,更不要说物流或者是退款之类,甚至用户的信息都不一定重视,而是重视会员。

熟悉数据字典

这就是第一条,我们在和业务沟通前或者是沟通后,最好能够将提供的数据字典都过一遍,按照数据域和表名的矩阵来进行划分,通过数据字典来确定可能有的模型。

就拿门店信息而言,可能种种原因,源系统导致没有单独的门店表,但是在订单或者是核销券(领券)中都可能有数据,只有熟悉全部的数据字典,才能真的做到将数据放在该放的位置上,避免维度的缺失。

当然也需要结合业务来考虑,比如上面提到营销为主的平台没有用户信息,那这就代表订单中可能存的用户数据可能杂糅了一部分会员和所有的用户,这二者还是包含关系,了解会员是如何产生,这是很重要的事情。

而且最重要的是,遇到这种特殊的平台,你越应该重视你的模型不需要的表,因为他们或多或少涉及到消费者营销,比如给用户打标签,你如果理解了他们是通过什么逻辑打标签然后什么逻辑来营销客户,就是很牛逼的事情了。

营销为主

承接上文,营销客户是我理解的目前零售消费者在做的事情,无论是各种活动还是发券的核心本质都不能算是在真实盈利,重头还在渠道那边,而营销的目的应该是为了占据市场和稳定市场,当然这是集团级的猜测了,算是我瞎猜,因为零售品的种类太多了,不是所有的零售都是这样。

那我们在建模的时候就需要往这方面去偏向,避免过度设计的前提下,将模型尽可能的丰富,比如券和活动的关系,券和商品的关系,和产品的关系以及和导购和人的关系,而不应该重视券和订单的关系和活动的关系,而不重视其他地方。

营销的主体是人和物,以这两点为起点和重点,在中间不断增加连接点,这样或许能够帮助你更好的理解模型的最终形状。

同义而不是同名

上面说数据字典的看,需要留意看是细看,因为粗看可能会出现同名而不同义的情况,而应该是同义。

比如业务系统中或多或少会有品牌两个字,而商品维表中其实也会有品牌这个字段,而不同的业务系统品牌背后的行业可能是不同的,有些可能是商家,有些可能是商品品牌,有些可能是大的事业部。

避免这种事情的发生有个很简单的办法,约束每个字段的取值范围。

建模反思

当这篇文章的时候,其实整个模型的开发已经接近尾声了,其中有些许的弊端让我整理了出来。

过度设计

上面提到过度设计,我确实犯了过度设计的问题,去年双十一淘宝的订单改版,在主订单的基础上可以在子订单上添加不同的收货人和地址,我就在交易模型的订单商品中增加了收货人的相关信息,但真的有数据吗?其实并没有。

再说其他同事的一些设计,也有些不合理的地方,比如有总积分出现在订单积分中,但总积分出现在订单积分中,在没有大量业务支撑的前提下,这个设计就算是过度设计。

原因很简单,积分的产生和积分的累计不仅仅跟订单相关,存储在一个订单积分的事实表中,而且可能涉及多次关联才能出来的结果,就很奇怪。

分层不分逻辑

这是很大的弊端,分层的概念应该深入人心了,但是分层的理论不应该是不变的,按照ods直接接入,而逻辑处理在cdm中的说法。

如果是大致相同的逻辑还好,但零售行业的消费者数据来自四面八方,在cdm处理的时候就会涉及到各种清洗聚合关联,甚至ods有时候接入的是每天的全量数据,但是业务系统是在原数据上进行修改的,有些则是按照时间接的增量。

只能涉及成基本的事务类型的事实表,最难受的是关联的时候,如果两个表的ods数据处理的逻辑不同,发散问题会搞得人头大。

所以我认为应该在ods的时候能够先处理,至少要确保数据是正常的,而不应该将所有的重任都在cdm层。

雪花模型也不错

说雪花模型不错,是我们这次的建模其实是星型模型,很少涉及到维表之间的关联,更不要提支架表的设计,这就导致只能在事实表中不断冗余字段,当然这样可以更方便使用,带来的问题是事实表的开发会越来越困难。

比如将商品维表的基础上增加规格的支架表,产品的支架表等等,这样可以扩充上面提到的营销为主的关联,而不会陷入需要在不断给事实表增加退化维度的陷阱中,毕竟新建维表的成本在事实表复杂度不断增加的比较下,反而更加合适。

一起调优

看DAG

看DAG图比起纯粹靠脑子要好很多,首先我们能够看出来时间,输入和输出量,能够看出来是那个节点先完成,那个节点后完成,通过不同的任务来确定出问题的节点。

以目前的经验来说,首先肯定是全表扫描的问题,这就涉及到我上面提到的将部分逻辑放在ods处理,而不应该仅仅放在cdm中。

然后就是关联的使用,非必要不关联,如果你的关联在整个DAG中是最长的,那你就需要考虑关联是否正常,是一定要关联还是要调参。

过滤下推

很多数仓的产品其实都在底层有这种优化,但是清楚这些优化,很多时候需要大量时间的积累和对产品的理解,反而显式的去将各种过滤放在逻辑中,更好一点。

过滤的下推也不仅仅是where语句,比如函数的使用,拿最简单的,假如你是bigint格式的时间,要存入datetime中,而取值逻辑是最大的时间,拿max(from_unixtime())和from_unixtime(max())其实实现的功能是一样的,但在底层不优化的情况下,后者肯定比前者更合适点。

开窗等函数的处理也可以按照这个逻辑走。

产品的优化

理解产品的优化很重要,你需要关注产品的定期更新,增加了上面函数,提升了什么效率,比如maxcomputer六月分的时候增加了json字段,以及一批json相关的函数。

再比如说除了set外的优化器的使用,优化器这东西感兴趣的朋友可以上官网去看一下,虽然不一定所有的产品都有,但是思路却是很好的,比如获得该列最大值和最小值,这样可以提前让底层的优化方案更合适,毕竟比起整个类型的范围,还是实际数据的范围更小一点。

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
目录
相关文章
|
10天前
|
DataWorks 数据挖掘 大数据
方案实践测评 | DataWorks集成Hologres构建一站式高性能的OLAP数据分析
DataWorks在任务开发便捷性、任务运行速度、产品使用门槛等方面都表现出色。在数据处理场景方面仍有改进和扩展的空间,通过引入更多的智能技术、扩展数据源支持、优化任务调度和可视化功能以及提升团队协作效率,DataWorks将能够为企业提供更全面、更高效的数据处理解决方案。
|
1月前
|
消息中间件 人工智能 监控
Paimon x StarRocks 助力喜马拉雅直播实时湖仓构建
本文由喜马拉雅直播业务与仓库建设负责人王琛撰写,介绍了喜马拉雅直播业务的数据仓库架构迭代升级。文章重点分享了基于 Flink + Paimon + StarRocks 实现实时湖仓的架构及其成效,通过分钟级别的收入监控、实时榜单生成、流量监测和盈亏预警,大幅提升了运营效率与决策质量,并为未来的业务扩展和 AI 项目打下坚实基础。
218 5
Paimon x StarRocks 助力喜马拉雅直播实时湖仓构建
|
1月前
|
SQL 存储 数据挖掘
快速入门:利用AnalyticDB构建实时数据分析平台
【10月更文挑战第22天】在大数据时代,实时数据分析成为了企业和开发者们关注的焦点。传统的数据仓库和分析工具往往无法满足实时性要求,而AnalyticDB(ADB)作为阿里巴巴推出的一款实时数据仓库服务,凭借其强大的实时处理能力和易用性,成为了众多企业的首选。作为一名数据分析师,我将在本文中分享如何快速入门AnalyticDB,帮助初学者在短时间内掌握使用AnalyticDB进行简单数据分析的能力。
54 2
|
2月前
|
存储 SQL 分布式计算
湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
【10月更文挑战第7天】湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
144 1
|
1月前
|
缓存 监控 大数据
构建高可用AnalyticDB集群:最佳实践
【10月更文挑战第25天】在大数据时代,数据仓库和分析平台的高可用性变得尤为重要。作为阿里巴巴推出的一款完全托管的PB级实时数据仓库服务,AnalyticDB(ADB)凭借其高性能、易扩展和高可用的特点,成为众多企业的首选。本文将从我个人的角度出发,分享如何构建和维护高可用性的AnalyticDB集群,确保系统在各种情况下都能稳定运行。
36 0
|
5月前
|
SQL 关系型数据库 MySQL
如何在Dataphin中构建Flink+Paimon流式湖仓方案
当前大数据处理工业界非常重要的一个大趋势是一体化,尤其是湖仓一体架构。与过去分散的数据仓库和数据湖不同,湖仓一体架构通过将数据存储和处理融为一体,不仅提升了数据访问速度和处理效率,还简化了数据管理流程,降低了资源成本。企业可以更轻松地实现数据治理和分析,从而快速决策。paimon是国内开源的,也是最年轻的成员。 本文主要演示如何在 Dataphin 产品中构建 Flink+Paimon 的流式湖仓方案。
7866 10
如何在Dataphin中构建Flink+Paimon流式湖仓方案
|
4月前
|
消息中间件 监控 关系型数据库
Serverless 应用的监控与调试问题之实时离线数仓一体化常用的解决方案有什么问题
Serverless 应用的监控与调试问题之实时离线数仓一体化常用的解决方案有什么问题
|
4月前
|
存储 缓存 容器
实时数仓Hologres构建效率问题之瘦身如何解决
提升构建效率的原则首重准确性,在确保无误的基础上优化流程。应用瘦身通过精简依赖减轻构建负担。分层构建利用底层共享减少重复工作。构建缓存存储以往结果,避免重复工序,显著提速。这些策略共同作用,有效提高构建效率与质量。
46 0
|
4月前
|
容器
实时数仓Hologres构建环境问题之Dockerfile描述如何解决
在制品构建时明确依赖版本可避免因版本变动引起的构建差异,确保一致性与可预测性。通过Dockerfile指定确切版本的依赖与环境,能够跨平台重现相同的构建环境。为保证构建脚本一致性,应采用与业务代码解耦的构建脚本,并严格控制环境变量。构建准确性和速度都很重要,但通常准确性优先,确保制品质量稳定可靠。
50 0
|
5月前
|
存储 DataWorks Java
DataWorks产品使用合集之开发离线数仓时,需要多个工作空间的情况有哪些
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
下一篇
DataWorks