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

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 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
目录
打赏
0
0
0
0
30
分享
相关文章
Dataphin离线数仓搭建深度测评:数据工程师的实战视角
作为一名金融行业数据工程师,我参与了阿里云Dataphin智能研发版的评测。通过《离线数仓搭建》实践,体验了其在数据治理中的核心能力。Dataphin在环境搭建、管道开发和任务管理上显著提效,如测试环境搭建从3天缩短至2小时,复杂表映射效率提升50%。产品支持全链路治理、智能提效和架构兼容,帮助企业降低40%建设成本,缩短60%需求响应周期。建议加强行业模板库和移动适配功能,进一步提升使用体验。
鹰角基于 Flink + Paimon + Trino 构建湖仓一体化平台实践项目
本文整理自鹰角网络大数据开发工程师朱正军在Flink Forward Asia 2024上的分享,主要涵盖四个方面:鹰角数据平台架构、数据湖选型、湖仓一体建设及未来展望。文章详细介绍了鹰角如何构建基于Paimon的数据湖,解决了Hudi入湖的痛点,并通过Trino引擎和Ranger权限管理实现高效的数据查询与管控。此外,还探讨了湖仓一体平台的落地效果及未来技术发展方向,包括Trino与Paimon的集成增强、StarRocks的应用以及Paimon全面替换Hive的计划。
195 1
鹰角基于 Flink + Paimon + Trino 构建湖仓一体化平台实践项目
湖仓分析|浙江霖梓基于 Doris + Paimon 打造实时/离线一体化湖仓架构
浙江霖梓早期基于 Apache Doris 进行整体架构与表结构的重构,并基于湖仓一体和查询加速展开深度探索与实践,打造了 Doris + Paimon 的实时/离线一体化湖仓架构,实现查询提速 30 倍、资源成本节省 67% 等显著成效。
湖仓分析|浙江霖梓基于 Doris + Paimon 打造实时/离线一体化湖仓架构
湖仓实时化升级 :Uniflow 构建流批一体实时湖仓
本文整理自阿里云产品经理李昊哲在Flink Forward Asia 2024流批一体专场的分享,涵盖实时湖仓发展趋势、基于Flink搭建流批一体实时湖仓及Materialized Table优化三方面。首先探讨了实时湖仓的发展趋势和背景,特别是阿里云在该领域的领导地位。接着介绍了Uniflow解决方案,通过Flink CDC、Paimon存储等技术实现低成本、高性能的流批一体处理。最后,重点讲解了Materialized Table如何简化用户操作,提升数据查询和补数体验,助力企业高效应对不同业务需求。
469 18
湖仓实时化升级 :Uniflow 构建流批一体实时湖仓
鹰角基于 Flink + Paimon + Trino 构建湖仓一体化平台实践项目
鹰角基于 Flink + Paimon + Trino 构建湖仓一体化平台实践项目
湖仓实时化升级 :Uniflow 构建流批一体实时湖仓
湖仓实时化升级 :Uniflow 构建流批一体实时湖仓
用友畅捷通在Flink上构建实时数仓、挑战与最佳实践
本文整理自用友畅捷通数据架构师王龙强在FFA2024上的分享,介绍了公司在Flink上构建实时数仓的经验。内容涵盖业务背景、数仓建设、当前挑战、最佳实践和未来展望。随着数据量增长,公司面临数据库性能瓶颈及实时数据处理需求,通过引入Flink技术逐步解决了数据同步、链路稳定性和表结构差异等问题,并计划在未来进一步优化链路稳定性、探索湖仓一体架构以及结合AI技术推进数据资源高效利用。
475 25
用友畅捷通在Flink上构建实时数仓、挑战与最佳实践
美的楼宇科技基于阿里云 EMR Serverless Spark 构建 LakeHouse 湖仓数据平台
美的楼宇科技基于阿里云 EMR Serverless Spark 建设 IoT 数据平台,实现了数据与 AI 技术的有效融合,解决了美的楼宇科技设备数据量庞大且持续增长、数据半结构化、数据价值缺乏深度挖掘的痛点问题。并结合 EMR Serverless StarRocks 搭建了 Lakehouse 平台,最终实现不同场景下整体性能提升50%以上,同时综合成本下降30%。
实时计算UniFlow:Flink+Paimon构建流批一体实时湖仓
实时计算架构中,传统湖仓架构在数据流量管控和应用场景支持上表现良好,但在实际运营中常忽略细节,导致新问题。为解决这些问题,提出了流批一体的实时计算湖仓架构——UniFlow。该架构通过统一的流批计算引擎、存储格式(如Paimon)和Flink CDC工具,简化开发流程,降低成本,并确保数据一致性和实时性。UniFlow还引入了Flink Materialized Table,实现了声明式ETL,优化了调度和执行模式,使用户能灵活调整新鲜度与成本。最终,UniFlow不仅提高了开发和运维效率,还提供了更实时的数据支持,满足业务决策需求。
Hologres+Paimon构建一体化实时湖仓
Hologres 3.0全新升级,面向未来的一体化实时湖仓。它支持多种Table Format,提供湖仓存储、多模式计算、分析服务和Data+AI一体的能力。Hologres与Paimon结合,实现统一元数据管理、极速查询性能、增量消费及ETL功能。Dynamic Table支持流式、增量和全量三种刷新模式,满足不同业务需求,实现一份数据、一份SQL、一份计算的多模式刷新。该架构适用于高时效性要求的场景,也可用于成本敏感的数据共享场景。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等