草庐IT

「数仓建设篇」数仓主题域划分

大数据阶梯之路 2023-08-09 原文

大家好,本篇聊一下数仓建设,讲一下面试常遇到的主题域与主题划分,更多精彩文章优先从微信公众号《大数据阶梯之路》首发,欢迎关注,公众号回复:大数据数仓资料,可以获取大数据数仓相关学习资料。

一、前言

数据仓库具有面向主题的特性,那么就会有主题的概念,数仓建设是遵循纵向分层开发,横向划分主题域设计,数仓分层就不在这次谈了,这次我会结合本人数仓工作实践总结的经验来聊聊数仓主题域划分,同时会引申出主题划分,和数据域是什么,业务过程等。
这个对于数仓工程师来说是必备的能力,比如当你面临着一个新业务的开启,需要从0到1开始搭建数据仓库或者数据集市,这时候就要考虑到主题域和主题的合理划分。

二、数仓建设的步骤

  • 1. 业务调研
    数仓开发侧是承上对接业务研发侧&承下对接数据分析侧,在数仓建设前期要对上游业务过程和对下游数据分析指标体系有所了解和熟知,然后拉齐上下游沟通数据口径和数仓搭建。
  • 2. 主题域划分
  • 3. 主题划分
  • 4. 输出总线矩阵
    即业务过程和维度,组建成的矩阵
  • 5. 数仓分层设计模型表
  • 6. 数仓公共层表迭代升级

三、主题和主题域

下面结合本人对搬家业务的数仓建设,进行主题域划分和主题划分实践,当然项目的大小决定着这是一个小型的数据集市 还是 企业级的数据仓库。

1. 主题域的划分

数仓主题域:主题域通常是联系较为紧密的数据主题的集合,根据业务需求分析的视角进行划分抽象归类。

划分方法:主题域划分的方法一般有几种

  • 要么按照业务过程来划分,一个业务过程抽象出一个主题域,比如业务系统中的商品、交易、物流 等
  • 要么按照业务部门来划分,一个业务部门抽象出一个主题域,比如中台部门、业务运营部门、供应链部门 等
  • 要么按照业务系统来划分,一个业务系统抽象出一个主题域,比如搬家系统、erp系统 等

2. 主题的划分

数仓主题:是在较高层次上将企业生产上的各个系统中某一分析对象的数据进行整合、归类并分析的一种范围,属于一个抽象概念,简单点说每一个主题对应一个宏观分析领域。
划分方法:说白了主要就是要识别出分析对象主体,做主题划分和主题域划分,个人建议是要站在全局的视角来看,然后先划分出主题域,再接着在主题域里面划分出各个主题,主题域的划分一般比较谨慎,一旦定下来了避免频繁变动,虽然数仓建设是迭代建设的,不能保证一次性初始化好,但我们的主题域划分和主题划分要尽可能地涵盖企业的所有业务,以及在新业务进来时能够无影响地被包含进来和可扩展主题域。

3. 个人案例实践分享

我就分享我负责过的搬家业务数仓建设中,我是如何划分主题域和划分主题的,规模相当于数据集市,即小型的数据仓库
划分主题域:
首先我是按照业务系统来划分的,搬家是企业业务中一个独立的业务线,所对应的业务系统也是跟其他系统是独立开的,那么这时候我按照业务系统来划分,就不会在建设过程中出现一些‘扯皮’操作,出现数据边界归属问题。
划分主题:
上面的主题域划分完了后就产生一个搬家主题域,比如把搬家分析作为一个分析领域,那么‘搬家分析’所涉及到的主要分析对象就有用户、订单、搬运工 等,则数仓的主题就可以划分为用户主题、订单主题、搬运工主题 等。
健壮性评估:
当后续搬家主题域业务新增,我还可以轻松地扩展出其他主题,毕竟按照上面的划分法,搬家的数据基本都划分在搬家主题域,剩下的就是搬家有新业务进来时扩展新主题或包含进已有主题。

4. 分享业界其他的案例

分享网上搜索到的 马蜂窝数仓主题、主题域划分案例
以马蜂窝订单交易模型的建设为例,基于业务生产总线的设计是常见的模式,首先调研订单交易的完整过程,定位过程中的关键节点,确认各节点上发生的核心事实信息。

四、主题域、数据域、业务过程

总是听到数据域,那么数据域和主题域是有什么关系呢,参考《阿里巴巴大数据之路》书籍和网上有人总结过这么一段,如下:
主题域:面向业务过程,将业务活动事件进行抽象的集合,如下单、支付、退款都是业务过程,针对公共明细层(DWD)进行主题划分。
数据域:面向业务分析,将业务过程或者维度进行抽象的集合,针对公共汇总层(DWS)进行数据域划分。
业务过程:指企业的业务活动事件,如下单、支付、退款都是业务过程,业务过程就是一个不可拆分的行为事件。
其实数据域跟主题域的差别不大,很大情况下两者就等同于一个概念的。

好了,本篇暂时就聊这么多,觉得有帮助欢迎点赞+收藏+关注,更多精彩好文,尽在大数据阶梯之路

有关「数仓建设篇」数仓主题域划分的更多相关文章

  1. ruby-on-rails - 在暂存环境中覆盖 ActionMailer 主题 - 2

    我希望从我们的登台服务器发送的所有电子邮件的主题中都带有“[STAGING]”字样。在Rails3.2中使用ActionMailer是否有一种优雅的方式来做到这一点? 最佳答案 这是我使用ActionMailerInterceptor找到的一个优雅的解决方案基于anexistinganswer.#config/initializers/change_staging_email_subject.rbifRails.env.staging?classChangeStagingEmailSubjectdefself.delivering_

  2. ruby - 如何检查我的主题是否引发异常? - 2

    我目前正在subject中创建一个对象,需要测试这是否会引发异常。以下代码说明了我要实现的目标:describeMyClassdodescribe'#initialize'dosubject{MyClass.new}it{is_expected.not_toraise_error(Some::Error)}endend我有一种感觉,我正在以错误的方式处理这件事。将subject设置为新对象而不创建对象两次的首选方法是什么?更新我的问题有两个。首先,这种语法不起作用:it{is_expected.not_toraise_error}但是,在itblock中使用expect确实如此(正如J

  3. kafka如何动态消费新增topic主题 - 2

    一、解决痛点使用spring-kafka客户端,每次新增topic主题,都需要硬编码客户端并重新发布服务,操作麻烦耗时长。kafkaListener虽可以支持通配符消费topic,缺点是并发数需要手动改并且重启服务。对于业务逻辑相似场景,创建新主题动态监听可以用kafka-batch-starter组件二、组件能力1、新增topic名称为:auto.topic1(由于配置spring.kafka.consumer.prefix为auto,因此只有auto前缀的topic,才会被组件动态监听。)2、应用输出日志,监听到新增auto.topic1,并初始化客户端(主题刷新间隔为10s)3、发新的消

  4. 【华为OD机试真题 java、python、c++】荒地电站建设【2022 Q4 100分】(100%通过+复盘思路) - 2

    代码请进行一定修改后使用,本代码保证100%通过率,本题目提供了java、python、c++三种代码。复盘思路在文章的最后题目描述祖国西北部有一片大片荒地,其中零星的分布着一些湖泊,保护区,矿区;整体上常年光照良好,但是也有一些地区光照不太好。某电力公司希望在这里建设多个光伏电站,生产清洁能源对每平方公里的土地进行了发电评估,其中不能建设的区域发电量为0kw,可以发电的区域根据光照,地形等给出了每平方公里年发电量x千瓦。我们希望能够找到其中集中的矩形区域建设电站,能够获得良好的收益。输入描述第一行输入为调研的地区长,宽,以及准备建设的电站【长宽相等,为正方形】的边长最低要求的发电量之后每行为

  5. kubernetes集群划分节点 - 2

    Kubernetes(K8s)是一个用于管理容器化应用程序的开源平台,可以帮助开发人员更轻松地部署、管理和扩展应用程序。在Kubernetes中,集群划分是一种重要的概念,可以帮助我们更好地组织和管理集群中的节点和资源。本文将介绍如何使用Kubernetes对集群进行划分,并提供详细的操作示例,希望能够帮助读者更好地了解和使用Kubernetes平台。Node划分Node划分是将集群中的节点按照一定的规则进行划分。在Kubernetes中,可以使用NodeSelector和Affinity机制来实现Node划分。NodeSelectorNodeSelector是一种将Pod调度到符合特定节点标

  6. ruby - 使用适用于 Ruby 的 AWS 开发工具包发布到 SNS 主题时指定区域 - 2

    我正在使用适用于Ruby的AWS开发工具包向Rails3应用程序发布消息和AWSSNS主题,如下所示:sns=AWS::SNS.newtopic=sns.topics['arn:aws:sns:eu-west-1:55555555555:my_topic']topic.publish("MESSAGE",:subject=>"SUBJECT")当我发布到“us-east-1”中的主题时,它按预期工作,但发布到“eu-west-1”区域中的主题时不起作用:AWS::SNS::Errors::InvalidParameter-Invalidparameter:TopicArn:使用AWSS

  7. ruby-on-rails - 如何处理 UTF-8 电子邮件 header (如主题 :) using Ruby? - 2

    我是一个电子邮件n00b,但我正在开发一个发送带有Unicode字符的HTML电子邮件的应用程序(正如我friend所说的“享受编码hell”)。Subject:header来自用户输入,因此可能包含Unicode字符。一些邮件客户端(如GMail和Outlook2007)对此没有问题,但从我的阅读来看,执行此操作的正确方法似乎是使用MIMEEncoded-Wordencoding对于标题。我找不到Ruby库来执行此操作。有吗?此外,是否有要添加的header告诉邮件客户端在显示消息时使用UTF-8?我们要发送多部分电子邮件,所以我们的Content-Type是multipart/mi

  8. Ruby 拒绝正确划分 - 2

    我只是想得到一个百分比。irb(main):001:0>(25/50)*100=>0这应该绝对等于50,正如我的计算器所确认的那样(将相同的方程式复制并粘贴到gcalc中)。为什么Ruby拒绝这样做? 最佳答案 它正在做整数除法。基本上,25是一个整数(一个整数),50也是一个整数,所以当您将一个除以另一个时,它会得到另一个整数。25/50*100=0.5*100=0*100=0更好的方法是先乘,再除。25*100/50=2500/50=50您还可以通过指定小数点来显式使用浮点运算,如下所示:25.0/50.0*100=0.5*10

  9. 数仓建模—企业数字化转型 - 2

    企业数字化转型通过数字化转型提速、赋能传统行业已经成为共识,数字化转型的本质就是应用大规模数据处理技术来提升企业的运营效率。这就涉及到了这个概念之下的一个关键技术–数据处理。随着社会的不断进步,就需从海量的数据中提取有价值、有意义的信息,以改进企业决策的合理性,进而提升效率。围绕这个目标就涉及到解决各种挑战,例如合规性、数据安全、快速决策、遗留系统整合、多样化的数据源等。为此,研究人员抽象出了一个围绕数据处理的概念模型。在这个抽象模型中,最重要的设计思想就是实现由“数据”到“洞察力”的提升。这个变化是由业务发展以及数据处理技术交互作用的必然结果,数据挖掘、数据分析、机器学习等专有名词已经由概念

  10. 实验——子网划分与路由器配置 - 2

    目录实验准备实验内容实验步骤1.规划网络拓扑2.划分IP地址块3.配置路由器及主机接口属性4.配置路由器的接口IP地址5.配置静态路由(a)按照类似的方式,配置标营校区路由器的静态路由如图所示。(b)按照类似的方式,配置中心校区路由器的静态路由如图所示。(c)按照类似的方式,配置双龙街校区路由器的静态路由如图所示。6.测试主机之间的连通性(a)首先,采用ping命令测试任意两台计算机之间的连通性,在位于岔路口校区子网的PC0上向位于双龙街校区子网的PC5发起ping测量,图16显示了测量结果,可见经过在各个路由器上配置静态路由,位于不同子网内的主机之间已经能够正常通信。(b)其次,通过浏览器测

随机推荐