数据仓库、数据湖的业务目的就在于集中数据、标准化、形成数据产品、面向业务场景开放数据。通俗地讲就是把各个分散的、不易读的、杂乱的、封闭的业务系统数据,归集收编、分门别类、整齐划一、规范管理,让业务便捷获取、使用,最大可能大挖掘和发挥数据价值。和餐厅点菜上菜类似,生活中类似场景也非常多。其中就涉及比较多的、相互关联的细分步骤。
本质上是封装与解耦。封装下层,让上层感知不到变化和影响;解耦,降低上层对下层的依赖,有个中间商来做润滑剂。
数据仓库的概念虽然历史久远,但它的作用或者理念与数据湖形成映射,甚至二者结合形成湖仓一体,都还在发挥着重要作用。数据湖在数据的来源范围、数据类型、数据数量、实时性、技术手段、数据质量、数据标准、使用人群、数据用途等方面有所扩展和增强,但在数据的全生命周期的各个阶段中,个人理解没有什么本质区别。非要说个先后、强弱或者渐进的关系,数据湖以及湖仓一体,是在大数据、物联网、人工智能时代对数据仓库的进一步迭代,外加数据治理领域的配套措施。
我不纠结它是单纯的数据仓库、数据湖还是湖仓一体还是什么,市面上的解决方案、服务、产品等要么肢解各个解耦层形成独立的产品,要么综合尽量多的功能,形成在业务看来大而全的一套方案。从实际操作上、产品呈现上,不同层面的功能时而独立销售/使用、时而集成汇聚。关键是看业务需要什么,通过怎么样的产品和产品组合来达成业务目的、方便管理和演进,细分下去就是功能区域的划分和协作,这就回到了核心的数据仓库分层模型上。
这个分层目前没有找到国家标准、行业标准之类的权威参考,数据管理领域权威DMBOK、国家标准DCMM也没有把这些术语拿来讲解。这两者更多讲的是理论/业务完整性,而下面要讲的分层更多的在于具体技术实现。当前的分层,中英文初看比较杂论,不同厂家也有不同的叫法。
| 序号 | 英文简写 | 英文全称 | 中文(本文倾向) | 其他词汇 | 分层功能 |
|---|---|---|---|---|---|
| 1 | Buffer | Buffer | 缓冲层 | 接口层、Stage | 常规理解的数据缓冲 |
| 2 | ODS SDI | Operational Data Store Source Data Integration | 贴源数据层 | 操作数据层、原始数据层、数据运营层、 数据引入层、数据基础层 | ETL之后业务原始数据存储, 尽量原汁原味 |
| 3 | DWD DWI | Data WareHouse Detail Data Warehouse Integration | 明细数据层 | 数据细节层、数据整合层、明细事实表 | ODS数据的简单清洗、 维度退化、数据脱敏、格式统一 |
| 4 | DWB DWM MID | Data Warehouse Base Data Warehouse Middle Middle | 轻度汇总层 | 基础数据层、数据中间层 | 对核心维度进行指标统计, 减少重复计算 |
| 5 | DWS DWR DWT | Data Warehouse Service Data Warehouse Report Data Warehouse Topic | 主题数据层 | 服务数据层、数据服务层、数据报告层、 宽表层、汇总数据层 | 按主题汇聚多字段为宽表, 简化查询 |
| 6 | ADS DM App | Application Data Service Data Mart | 数据集市层 | 数据应用层、数据产品层、专题数据层 | 统计汇总数据, 供业务应用直接使用 |
| 7 | DIM | Dimension | 维表 | 码表、维度表 | DWD及之上数据层共用, 比如国家编码、机场编码、商品类型 |
| 8 | DW CDW | Data Warehouse Common Dimenions Model | 数据仓库层 | 数据公共层 | 包含DWD、DWM、DWS、DIM |
从上表看出,大体分层固定,不同厂家或者方案都有不同的叫法,但是表达的分层意思几乎一样,具体分层所承载的数据功能也大同小异。命名格式上,有xx数据层,也有数据xx层,还有xx层。只要保持分层清晰,逻辑表达连贯完整,我想就无所谓用哪个名字。
DM数据仓库层,包含DWD、DWB和DWS。至于DIM严格来说不算是一个层次,而是DWD及其之上层次的一个共享部分。而上述的分层不一定非要全部构建,而是根据组织、业务的实际需求及其变化频率、大小,实现难度、投入产出比来综合选定。个人的实践总结是适量前瞻性设计、能有多简单就多简单,并且设计的分层还会根据业务和环节变化不停迭代。另外,从DWD开始往上的每一层都可以直接提供给上层业务使用,而从业务系统中ETL之后的数据一定是先存放在ODS之中,尽量杜绝其他分层重复地直接从业务系统抽取数据,减少数据同步对业务系统的影响,达到一次抽取,多次利用。

我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
ruby如何管理内存。例如:如果我们在执行过程中采用C程序,则以下是内存模型。类似于这个ruby如何处理内存。C:__________________|||stack|||------------------||||------------------|||||Heap|||||__________________|||data|__________________|text|__________________Ruby:? 最佳答案 Ruby中没有“内存”这样的东西。Class#allocate分配一个对象并返回该对象。这就是程序