- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
数据仓库系列文章(持续更新)
这里我们先回忆一下数据仓库的定义, 数据仓库(Data Warehouse) 是一个面向主题的(Subject Oriented) 、集成的( Integrate ) 、相对稳定的(Non -Volatile ) 、反映历史变化( Time Variant) 的数据集合用于支持管理决策。更多关于数据仓库的可以参考数仓架构发展史,而且前面我们也介绍了大量关于数仓建模这一块的内容,具体可以参考我们的专栏数仓建模方法论。
今天我们介绍一个在数仓中非常常见的概念——数据集市,数仓定义中的五个特性都值得一一仔细品味,随着你对数仓的理解加深,你对这个五个特性的理解也会更加全面。
首先数据仓库用于支持决策,面向分析型数据处理,它不同于企业现有的操作型数据库;其次,数据仓库是对多个异构的数据源有效集成,集成后按照主题进行了重组,并包含历史数据并且存放在数据仓库中的数据一般不再修改。
这里有一个词是主题,那就是我们集成后的数据,又按照了主题进行了划分,而面向主题划分出来的部分就是数据集市,也就是说数据集市是数据仓库的一个子集或者说是集成后的子集。
数据集市通常是面向部门的或者是部门级业务,或者是面向部门的主题的,举个例子例如在金融领域可能会有结算部门的数据集市、风控部部门数据集市、市场部门的数据集市、运营部门的数据集市,这里的特点就是面向部门的,但是对于有的部门它的组织结构可能比较大,所以它所负责的业务线也有多个,这个时候就会出现,数据集市是面向部门的子业务,总之一句话,数据集市是面向主题的,一般公司的主题就是部门或者业务线。
这里还有一点要强调数据集市是作为我们数仓的一层,对外提供数据服务,当然提供服务的方式是有很多种的,但是最终我们是将数据集市层的数据提供出去的,也就是说这一层是面向用户的。
上面了解了什么是数据集市,接下来我们就看看一下为什么要有数据集市,开始之前我们线回顾一下前面的数仓建模分层理论,我们知道了数仓最简单的就是ODS+DM,但为什么我们还要分层,在文章中我们解释了分层的意义是什么,如果你忘记了可以看一下前面的文章。
这里我们知道了数据集市是数据仓库的子集,我们可以把分层看作是横向切分,那么数据集市就是竖向切分,
所以我们可以得出一个结论那就是数据集市的划分也是为了更好的管理数仓和提高生产效率,但是这个还是有点抽象,下面我们再讨论一下为什么要做数据集市层。
这里我们把数据集成也引入进来,从宏观上看一下从数据源到数据服务,整个数仓的存在形式是怎样的,当然这里我们是一个简化的图,我们主要反映出问题就行了。
上面就是我们当前的数仓形态,这下我们解释一下我们为什么要做数据集市层,数据集市层虽然是一个层,但是这层里有多个集市,每个集市面向不同的业务线或者是业务部门,那我们为什么要这么做呢,说白了就是为解耦,解耦的目的是为了增加灵活性。
如果没有数据集市层,那么我们的数仓就要面向众多的业务部门,但是由于每个业务部门的数据需求或者所关心的数据是不一样的,这就会导致我们的数仓建设失去核心,就会出现我们为了满足某一个部门而违背了我们数仓的建设原则的现象出现,所以我们增加了数据集市层,也就是每个部门的个性化需求在这里体现。
其实如果你学习过设计模式或者是Java 的话,其实很容易立即,这有点类似抽象类Service 和 实现类 ServiceImpl.
如果你仔细学习了前面的内容的话,你肯定可以理解下面的几个特点这里我就不一一解释,而且这些特点也是我总结出来的,你也可有对其进行扩展。
数据仓库是面向企业的,数据集市是面向部门或者特定业务的
数据集市是面向部门或者特定业务的
数据集市是面向部门或者特定业务的
数据集市是面向部门或者特定业务的,所以就会出现灵活多变的特点,而且也会出现流程上更简单快速,规范上要求不严格,使用上要尽量简单。其实这会反映到我们的表上
尤其在一起初创企业,数仓建设跟不上的时候,为了尽快完成需求我们就会直接从ods层建设DM,从而可以对外提供数据。
数据仓库(集市)的设计可以采用迭代式的方法,也就是说我们可以根据我们的适用方不断的去迭代我们的数据集市,而且也没有任何数据集市是可以一次性建成的。
理论上讲,应该有一个总的数据仓库的概念,然后才有数据集市,但是我们实际的做法是先确定了数据集市以及我们的服务对象之后,然后才开始开始建立数据仓库最后才是数据集市,也就是我们首先设计的是数据集市,但是我们建立的时候却是首先建立的是数据仓库。
数据集市就是数据仓库面向某个主题的子集,它作为数仓面向用户的一层存在,提供数据服务。
据集市往往作为数据仓库之上的一个面向分析应用或者是数仓里面向用户的一层,也就是说没有这一层的话,我们的仓库就要面向用户了,我们可以将其视作代理,因为这一层要面向用户,所以它就有多变和不规范的特性,但是为了保证数仓整体建设的合理性和规范性,所以我们在数仓上加了这一层。
虽然集市层是面向用户的,但是由于面向的用户群体不同,所以又根据用户群体的特点,将集市层进行了纵向切分,切分成了一个个不同的集市。
数据仓库是面向企业的,数据集市是面向部门或者特定业务的,你可以将其看作一个小型的数据仓库,其实这里牵扯出了早期数据仓库的一种存在形体,那就是每个部门有自己的数据仓库,而不是统一建设的数据仓库。
其实知识星球我以前就建立了,当时觉得自己没有那么多的精力维护,不能很好的帮助有需要的同学们,所以一直没有开放。最近很多同学私聊我学习路线,个人精力也是有限,并不能及时解答所有同学的问题。
通过调查,大部分同学表示愿意加入知识星球,我也觉得这样让大家的提问更加有层次和意义,而不是问一些比较肤浅和不太合适的问题,有问题也能自己先查询一下,这样更好的交流和解答疑问,提升时间利用率。
这里生成了50张5折优惠券
,先到先得,领完为止(星球人数每增加50人,价格上涨10元)。
我正在寻找可以从 Eclipse 的 UML 图生成代码的工具。该工具应该从 UML 图生成代码,进行逆向工程以查看代码更改,并提供合并选项以防止因任何更改而删除文件。 是否有工具可以做到这一点,或者
我正在寻找有关建模的见解。我有一个关于设计模式和基本类图、序列图和用例的介绍类(class)。 我发现类图作为我编程中的组织工具非常宝贵。到目前为止,用例还算有用。 本学期我正在上课,更深入地学习 U
如何使用 flutter 数据建模技术访问“HH”和“mm”。我一直在尝试按以下方式使用它,但是下面给出了错误。 我的数据模型当前为它的简化版本。 class Week { final Strin
我正在使用 Neo4j 和 PHP。在我的项目中,我有餐厅节点。每个节点都有纬度、经度和分类属性。 我需要返回与用户给定分类相匹配的餐厅节点,其结果按距用户位置的距离排序(即第一个最近的餐厅)。 最简
我希望 POJO 包含一个 Status 字段(只有两个可能的值 SUCCESS、FAILED),并且根据此状态,第二个字段需要为 POJO 对象(如果 Status 为 SUCCESS) 或只是字符
我正在尝试将我的办公室迁移到数据库应用程序中。这是我得到的: (来源:phunkei.de) 公司和个人从客户继承(1:1关系)。这是因为他们都可以是“客户”并收到账单,我想引用订单中的单个表。公司和
我目前有这个数据库结构: 一个条目可以有多个"file"、“文本”和“url”类型的项目。 这些项目中的每一项在文本、网址或文件表(存储数据的位置)中都有一个对应的项目。 我需要一个查询来有效地选择一
下面的代码不应该像“if(condition)”语句一样工作吗,当它在另一个循环中并且“body”有自己的 break 或 continue 语句时,会出现明显的错误行为: for( ; condit
我一直在像这样存储和递增下载计数器: INCRBY downloads: 1 但现在我想要下载:* 按值排序,以便显示热门下载列表。 我觉得我可以更好地存储它。我愚弄了: ZINCRBY downlo
我开始使用图形数据库,在我的团队中,我们已经开始为我们的软件建模图形。当我们尝试“记录”模型以查看数据库的结构时,问题就出现了。对于 SQL 数据库,您只需查看 SQL 模式。 我们花了一些时间阅读
我正在做一个固定效应回归并且遇到了自相关问题,为了解决这个问题,我正在使用预测、lmtest 和 plm 包进行 ARIMA 建模。我的数据是一般面板数据,looks like this ,我正在尝试
我想知道是否有任何工具可以帮助我对 C 应用程序(即函数式编程)进行建模。例如。我目前正在构建一个共享库。但是为了直观地传达我的设计,我需要类似 UML 的东西。我想这样做,以便审查我的设计的人不需要
我正在尝试将 JSON 转换为 GSON ,但我无法建模。谁能给我举个例子。 [ { "id": "1", "name": "lalala",
正如标题所说,在 中建模 optional 参数的最佳方法是什么?斯卡拉 ? 对于 optional 参数,我的意思是执行函数体不需要的值。 要么因为该参数存在默认值,要么根本不需要该参数本身(例如配
我发现 UML 可用于记录 OO 系统的各个方面,尤其是用于整体架构的类图和用于说明特定例程的序列图。我想为我的 clojure 应用程序做同样的事情。我目前对模型驱动开发不感兴趣,只是在交流应用程序
我想知道是否有人知道如何使用 UML 在属性中建模 DateTime 基元类型? 最佳答案 我想这取决于日期的格式......请参阅下面的示例,其中我使用两个整数(分别为日和年)和一个名为“Month
我有一些与我的问题建模相关的问题。我正在研究基于模型的测试的论文项目。还想从专家的角度了解我是否采用正确的方法来建模我的场景。我正在对 Android 应用程序的 UI 进行建模,遍历它们,生成测试用
我正在尝试建立对 CouchDB 以及如何为某些现实世界场景建模数据的理解。我现在已经尽可能多地“按日期获取我的博客文章”;) 给定这样的文件: { "_id": "couch1",
一个模型资源是如何分层的?例如假设一个人有一个“留言板”并且“消息”是一种资源。假设“消息”可以有回复,从而形成一个讨论线程。如何模拟线程的概念? “消息”是否包含它的子项? “线程”是它自己的资源吗
我正在尝试创建一个像通用 POJO 一样工作的对象,因为我必须通过不同的对象传递它,并且我需要一个接口(interface)来访问其属性。 目前,我使用具有 getField 方法的基础对象来完成此操
我是一名优秀的程序员,十分优秀!