精华内容
下载资源
问答
  • Data Vault

    千次阅读 2013-04-14 17:03:25
    前言:Data Vault这个词对我来说非常陌生,一次和Vincent的邮件交流中他提到这个概念。查了下资料,总结如下。 Data Vault是一种新的针对企业级数据仓库的数据建模方法,该概念主要面向数据架构师、数据建模人员...

    转载: http://datawarehou.se/knowledge/data-vault/#comment-146

     

    Data Vault

    前言:Data Vault这个词对我来说非常陌生,一次和Vincent的邮件交流中他提到这个概念。查了下资料,总结如下。

    Data Vault是一种新的针对企业级数据仓库的数据建模方法,该概念主要面向数据架构师、数据建模人员和数据库管理员。

    ——————————————————————————–

    Data Vault的定义:

    Data Vault是面向细节,可追踪历史的,它将那些支持了一个或多个业务功能单元的规范的表集合相连接,它是一种混合了包括第三范式(3NF)和星型模型在内的建模方法。其设计理念是要满足企业对灵活性、可扩展性、一致性和对需求的适应性要求,它是一种专为企业级数据仓库量身定制的建模方式。

    Data Vault并不是一个新鲜事物,早在20年前就已经有所尝试,只不过并没有系统化、程式化。在Data Vault的理念中,错误的数据往往不是由于技术原因造成,而是业务的错误造成(数据的错误),所以,所有数据(包括错误数据)都是有用的、相关的,必须可追溯、可审计。

    Data Vault要解决的问题:

    在对数据仓库的建模方法中,有Kimball主张的维度建模,也有Inmon提倡的3NF建模,但二者各有优缺点。

    对于维度建模,可能会造成孤立的主题域,数据大量冗余,不一致的查询结构,扩展问题,粒度不一致造成的难以与事实表连接,近实时同步问题等。在做维度建模的时候,需要从原有系统进行大量的转换、统一才能形成维度-事实。

    对于3NF建模,基于日期的主键会造成父子关系越来越复杂,级联变更的影响也很大,很难进行实时装载,查询存取要关联多表,下钻分析问题等。

    Data Vault的实施:

    主要思想:将业务主键与属性分离,业务主键常常是业务的本质,他们很少变化,而属性可能会经常变化,Data Vault从变化中提取不常变的部分,并将二者相关联。

    提取出的属性按照业务组分到不同的卫星表(Satellites)中,而业务主键放置在称为枢纽表(Hubs)的地方。业务主键之间的关联或事件(如客户Hub和产品Hub之间的“购买”事件)由连接表(Link)来构建模型,并通过卫星表来描述这种联系。从另一种角度来说,卫星表提供了Hub和Link的上下文。

    在Data Vault中,所有表都是多对多关系。

    总结:

    • Data Vault,Vault意为拱顶、撑杆跳等,在这里确不知该翻译成什么合适,觉得这模型更像天文模型
    • 所有数据,无论对错,全部保留,历史信息完全可追溯,Data Vault中没有“删”
    • 三种类型的表:Hub保存了业务主键,这些东西通常不发生变化;Satellite保存了业务属性,与Hub以多对多形式关联以提供描述信息、上下文;Link表是事件,通过Link将Hub关联起来,一个事件可以对应多个Hub
    • 所有物理表以多对多形式连接

    几个问题:

    1. 如何将业务主键提取出来,如果它们发生了变化怎么办?
    2. 怎么确定哪些属于键,哪些属于属性?
    3. 从Data Vault模型到维度模型的转换,是否要在建模初期进行考虑,如果是,哪些问题需要确定?
    4. 查询性能,钻取效率如何?
    5. Link如果是事件级别,粒度过细,如何安排聚合表?

    参考与资源:

     

    展开全文
  • Data Vault模型如下图: 说明: 星型模型(star schema)的事实表采取了完全规范化的第三范式(3NF)模型,而维表采取了第二范式的设计模型。有时也会把维表的设计规范化,就成了所谓的雪花模型(snowflake ...
    源数据库模型(3NF)如下图:
    星型模型如下图:
    Data Vault模型如下图:
    说明:
    星型模型(star schema)的事实表采取了完全规范化的第三范式(3NF)模型,而维表采取了第二范式的设计模型。有时也会把维表的设计规范化,就成了所谓的雪花模型(snowflake schema)。

    星型模型向Data Vault模型转化:
    星型模趔的主要构成部分是维表与事实表,在转化为DataVault模型时自然涉及到维表与事实表的分别转化,使之映射为DataVault模型的Hub、Link、Satellite组件。星型模型与DataVault模型表的对应如下表所示。

    转换SQL脚本如下:

    use dv;
    
    -- 装载客户中心表
    insert hub_customer (customer_id,record_source) 
    select distinct customer_id,'customer_dim' from customer_dim;
    
    -- 装载客户附属表
    insert into sat_customer
    (
    	hub_customer_id,
    	load_dts,
    	load_end_dts,
    	record_source,
    	customer_name,
    	city_name,
    	province_name,
    	cust_post_code,
    	cust_address,
    	ship_post_code,
    	ship_address
    )
    select t1.hub_customer_id,
    	   t2.effective_date,
    	   t2.expiry_date,
    	   'hub_customer,customer_dim',
    	   t2.customer_name,
    	   t2.city_name,
    	   t2.province_name,
    	   t2.cust_post_code,
    	   t2.cust_address,
    	   t2.ship_post_code,
    	   t2.ship_address
      from hub_customer t1,customer_dim t2 
     where t1.customer_id=t2.customer_id;
     
    -- 装载产品分类中心表
    insert hub_product_catagory (product_catagory_id,record_source) 
    select distinct product_category_id,'product_dim' from product_dim;
    
    -- 装载产品中心表
    insert hub_product (product_id,record_source) 
    select distinct product_id,'product_dim' from product_dim;
    
    -- 装载产品分类_产品链接表
    insert into link_product_catagory (hub_product_id,hub_product_catagory_id,record_source)
    select distinct t1.hub_product_id,t2.hub_product_catagory_id,'hub_product,product_dim,hub_product_catagory'
      from hub_product t1,hub_product_catagory t2,product_dim t3
     where t1.product_id = t3.product_id and t2.product_catagory_id = t3.product_category_id;
    
    -- 装载产品分类附属表
    insert into sat_product_catagory 
    (hub_product_catagory_id,
    load_dts,
    load_end_dts,
    record_source,
    product_catagory_name)
    select 
        t1.hub_product_catagory_id,
        t2.start_date,
        t2.end_date,
        'hub_product_catagory,product_dim' record_source,
        t2.cname
    from
        hub_product_catagory t1,
        (select 
            t1.cid cid,
                t1.cname cname,
                t1.start_date start_date,
                t2.end_date end_date
        from
            (select distinct
            if(@cid = t1.cid and @cname = t1.cname, @start_date, @start_date:=t1.start_date) as start_date,
                @cid:=t1.cid cid,
                @cname:=t1.cname cname
        from
            ((select 
            product_category_id cid,
                product_category_name cname,
                effective_date start_date
        from
            product_dim
        order by cid , start_date) t1, (select @cid:=0, @cname:='', @start_date:='0000-00-00') t2)) t1, (select distinct
            if(@cid = t1.cid and @cname <> t1.cname, t1.end_date, '2200-01-01') as end_date,
                @cid:=t1.cid cid,
                @cname:=t1.cname cname
        from
            ((select 
            product_category_id cid,
                product_category_name cname,
                expiry_date end_date
        from
            product_dim
        order by cid , end_date desc) t1, (select @cid:=0, @cname:='', @end_date:='0000-0000-00') t2)) t2
        where
            t1.cid = t2.cid and t1.cname = t2.cname) t2
    where
        t1.product_catagory_id = t2.cid;
    
    -- 装载产品附属表
    insert into sat_product
    (
    hub_product_id,
    load_dts,
    load_end_dts,
    record_source,
    product_name,
    unit_price
    )
    select t1.hub_product_id,t2.start_date,t2.end_date,'hub_product,product_dim' record_source,
    t2.pname pname,t2.unit_price
    from hub_product t1,
    (
    select 
        t1.pid pid,
        t1.pname pname,
        t1.unit_price,
        t1.start_date start_date,
        t2.end_date end_date
    from
        (select distinct
            if(@pid = t1.pid and @pname = t1.pname
                    and @unit_price = t1.unit_price, @start_date, @start_date:=t1.start_date) as start_date,
                @pid:=t1.pid pid,
                @pname:=t1.pname pname,
                @unit_price:=t1.unit_price unit_price
        from
            ((select 
            product_id pid,
                product_name pname,
                unit_price,
                effective_date start_date
        from
            product_dim
        order by pid , start_date) t1, (select 
            @pid:=0,
                @pname:='',
                @unit_price:=0,
                @start_date:='0000-00-00'
        ) t2)) t1,
        (select distinct
            if(@pid = t1.pid
                    and (@pname <> t1.pname
                    OR @unit_price <> t1.unit_price), t1.end_date, '2200-01-01') as end_date,
                @pid:=t1.pid pid,
                @pname:=t1.pname pname,
                @unit_price:=t1.unit_price unit_price
        from
            ((select 
            product_id pid,
                product_name pname,
                unit_price,
                expiry_date end_date
        from
            product_dim
        order by pid , end_date desc) t1, (select 
            @pid:=0,
                @pname:='',
                @unit_price:=0,
                @end_date:='0000-0000-00'
        ) t2)) t2
    where
        t1.pid = t2.pid and t1.pname = t2.pname
            and t1.unit_price = t2.unit_price) t2 where t1.product_id=t2.pid;
    
    -- 装载销售订单中心表
    insert into hub_sales_order (sales_order_id,record_source) 
    select distinct sales_order_id,'sales_order_dim' from sales_order_dim;
    
    -- 装载销售订单附属表
    insert into sat_sales_order
    (
    hub_sales_order_id,
    load_dts,
    load_end_dts,
    record_source,
    order_time,
    entry_time,
    amount,
    allocate_time,
    packing_time,
    ship_time,
    receive_time)
    select 
    t1.hub_sales_order_id,
    t2.effective_date,
    t2.expiry_date,
    'hub_sales_order,sales_order_dim',
    t2.order_time,
    t2.entry_time,
    t2.amount,
    t2.allocate_time,
    t2.packing_time,
    t2.ship_time,
    t2.receive_time
    from hub_sales_order t1,sales_order_dim t2
    where t1.sales_order_id = t2.sales_order_id;
    
    -- 装载订单产品链接表
    insert into link_order_product
    (
    hub_sales_order_id,
    hub_product_id,
    record_source)
    select t1.hub_sales_order_id, t2.hub_product_id,
    'hub_sales_order,hub_product,sales_order_dim,product_dim,sales_order_fact'
    from 
    hub_sales_order t1,
    hub_product t2,
    (select t1.sales_order_id sales_order_id, t2.product_id product_id
    from sales_order_dim t1, product_dim t2, sales_order_fact t3 
    where t1.sales_order_sk = t3.sales_order_sk and t2.product_sk = t3.product_sk) t3
    where t1.sales_order_id = t3.sales_order_id and t2.product_id = t3.product_id;
    
    -- 装载订单客户链接表
    insert into link_order_customer
    (
    hub_sales_order_id,
    hub_customer_id,
    record_source)
    select t1.hub_sales_order_id, t2.hub_customer_id,
    'hub_sales_order,hub_customer,sales_order_dim,customer_dim,sales_order_fact'
    from 
    hub_sales_order t1,
    hub_customer t2,
    (select t1.sales_order_id sales_order_id, t2.customer_id customer_id
    from sales_order_dim t1, customer_dim t2, sales_order_fact t3 
    where t1.sales_order_sk = t3.sales_order_sk and t2.customer_sk = t3.customer_sk) t3
    where t1.sales_order_id = t3.sales_order_id and t2.customer_id = t3.customer_id;
    
    -- 装载订单产品附属表
    insert into sat_order_product
    (
    link_order_product_id,
    load_dts,
    load_end_dts,
    record_source,
    unit_price,
    quantity
    )
    select t1.link_order_product_id,t2.effective_date,t2.expiry_date,
    'link_order_product,product_dim,sales_order_dim,sales_order_fact,hub_sales_order,hub_product',
    t2.unit_price,
    t4.quantity
    from 
    link_order_product t1, 
    product_dim t2, 
    sales_order_dim t3, 
    sales_order_fact t4,
    hub_sales_order t5,
    hub_product t6
    where t1.hub_sales_order_id = t5.hub_sales_order_id
      and t1.hub_product_id = t6.hub_product_id
      and t4.sales_order_sk = t3.sales_order_sk
      and t4.product_sk = t2.product_sk
      and t5.sales_order_id = t3.sales_order_id
      and t6.product_id = t2.product_id;
      
    COMMIT;
    

    展开全文
  • DATA VAULT建模指南,包含建模理论和实例指导。详细描述data vault建模方法的文档。
  • Data Vault模型初探

    2020-03-02 22:12:04
    (一)Data Vault简介 Data Vault模型自2001年起便被提出,原本用于在市场上作为表征系统的一个营销术语。Data Vault的翻译为公共基础性仓库架构,包括了建模、方法论、架构和实施四个方面的实践过程。Data Vault...

    (一)Data Vault简介

     

    Data Vault模型自2001年起便被提出,原本用于在市场上作为表征系统的一个营销术语。Data Vault的翻译为公共基础性仓库架构,包括了建模、方法论、架构和实施四个方面的实践过程。Data Vault有1.0和2.0两个版本,1.0版本主要关注数据建模部门,而2.0部分主要关注如何提供灵活、可扩展的模式。本文所涉及内容主要为2.0版本。

     

    (二)Data Vault模型组件

     

    从概念层面上来看,Data Vault模型是一种中心辐射模式模型,其设计重点围绕着设计键的集成模式。这些业务键是存储在多个系统中的、针对各种信息的键,用于定位和唯一标识数据记录或数据。同时,这些业务键是相互独立的,并不依赖于其他信息。下图给出了一个Data Vault模型的例子:

    Data Vault模型有三种基本的实体结构:中心表、链接表和卫星表:中心表代表了以横向方式贯穿企业的实际业务键,链接表示了企业中存在于业务键之间的关系和联系,而真正的数据仓库组件充当卫星表,存储了随着时间推移的相关业务数据。

    中心表又称之为Hub组件,是一个用于记录在业务应用中常用到的业务实体键值的数据表,如员工ID,发票号、客户编号、车辆号等。表内包括几个关键字段:代理主键,即hub表的主键;业务实体主键,记录业务键值;装载时间,记录该业务键值的记录时间;数据源,记录该业务键值的来源,以追踪数据。

    链接表又称之为Link组件,通过存储相关业务实体间Hub表的代理主键,以记录一对多、多对多的业务实体间关系,如员工与企业的雇佣关系,账户与客户之间的关系等。

    卫星表又称之为Satellite组件,Hub表中业务主键所对应的业务描述,即业务实体的属性信息,这些信息具有时效性,随时间变化而可能产生变化,因此,Satellite组件内的记录均具有时间维,可记录实体属性的历史变化情况。

    简单理解如下图所示:

     

    (三)Data Vault建模的基本规则

     

    Data Vault建模有一些基本的原则必须遵循,如果原则不被遵循,那么建模的方式也就无法称之为Data Vault模型了。这些规则如下:

    1.业务键是按照粒度和语义内涵进行分割的,例如企业客户键和个人客户键都必须存在,或者用两个不同的中心表结构进行记录;

    2.关系、事件和跨两个或者多个业务键的交叉关系都要存在在链接结构中;

    3.链接结构没有开始或者结束时间,它们只是对数据到达数据仓库那一刻的关系的一种表达;

    4.卫星表是按照数据类型以及变更的类别和速度进行分割的,数据类型一般都是单一的源系统。

    原始的Data Vault建模不允许也不提供诸如合规性这样的理念或概念,也不能处理超类型,这些功能都需要通过Business Vault模型来实现(另一种形式的Data Vault建模,可以有一个信息交付层)。

    多对多的链接结构允许Data Vault在业务发展时动态扩展,能够寻找出当前需求与历史关系的差距在哪里。例如,过去每一个客户都只有一个投资经理,但现在可能有三个或者更多的投资经理,如果数据仓库模型强制采用过去的1对1关系,那么为了支持现在的1对多关系,整个数据模型都要重新构建。而采用Data Vault模型,只需要修改客户与投资经理之间的关联关系即可。

     

     

    文章的最后,给出一篇参考文章,介绍的会更详细一些:https://www.talend.com/blog/2015/03/27/what-is-the-data-vault-and-why-do-we-need-it/

     

    展开全文
  • 数据仓库-Data Vault模型Data Vault模型简介Data Vault模型的组成部分中心表链接表附属表Data vault模型的特点Data vault模型的构建Data vault模型示例 Data Vault模型简介 一种数据仓库建模方法,用于存储来自多个...

    Data Vault模型简介

    一种数据仓库建模方法,用于存储来自多个操作型系统的完整的历史数据。每个数据行都包含数据来源和装载时间属性,用以审计和跟踪数据值所对应的源系统。

    Data Vault(DV)模型用于企业级的数据仓库建模,是Dan Linstedt在20世纪90年代提出的。在最近几年,获得很多关注。

    定义如下
    面向细节的,可追溯历史的,一组有连接关系的规范化的表的集合。

    他是综合了第三范式和星型模型优点的建模方法。

    其设计理念是满足企业对灵活性、可扩展性、一致性和对需求的适应性的要求,是一种专为企业级数据仓库量身定制的建模方式。

    Data Vault模型的组成部分

    data Vault模型有中心表(Hub)、链接表(Link)、附属表(Satellite)三个主要组成部分。
    中心表记录业务主键,链接表记录业务关系,附属表记录业务描述。

    中心表

    保存一个组织内每个实体的业务主键。
    中心表和源系统表是互相独立的。

    中心表属性
    主键
    业务主键
    装载时间
    数据来源

    链接表

    是中心表之间的链接。
    一个链接表意味着两个或多个中心表之间有关联。

    链接表属性
    主键
    外键
    装载时间
    数据来源

    附属表

    用来保存中心表和链接表的属性
    包含所有的历史变化数据
    一个附属表总有且唯一一个外键引用到中心表或链接表

    附属表属性
    主键
    外键
    装载时间
    失效时间
    数据来源
    属性

    Data vault模型的特点

    • 所有数据都基于时间存储
    • 依赖越少越好
    • 和源系统越独立越好
    • 设计上适应变化
    • ETL作业可以重复执行
    • 数据完全可追踪

    Data vault模型的构建

    1.设计中心表

    2设计链接表

    3.设计附属表

    4.设计必要PIT表

    Data vault模型示例

    展开全文
  • 初识Data Vault建模

    2019-11-20 11:18:15
    Data Vault(DV)模型是用于企业级的数据仓库建模。由Dan Linstedt在20世纪90年代提出(http://www.danlinstedt.com)。Dan Linstedt将Data Vault模型定义如下:Data Vault是面向细节的,可追踪历史的,它是一组有...
  • 初见 Data Vault 模型

    千次阅读 2019-06-08 13:38:00
    最近因为工作需要接触了Data Vault这个概念,所以又开始了新一轮的学习,作为一个java开发者,平时主要和代码打交道,实现的是业务逻辑,初探数据的故事,感觉整个整个世界都是新的。作为一个懵逼小白,第一件事当然...
  • Data Encryption: Vault can encrypt and decrypt data without storing it. This allows security teams to define encryption parameters and developers to store encrypted data in a location such as SQL ...
  •   —The article is based on 《Building a Scalable Data Warehouse with Data Vault 2.0》,If you want this e-book, please leave a message to me,Best Regards!   The Data Vault model is based on three...
  • 摘自:《下一代数据仓库模型Data Vault的研究及其应用》  Data Vault模型的构建  在Data Vault模型中,各个实体组件有着严格、通用的定义与准确、灵活的功能描述,这不但使得Data Vault模型能够最直观、最一般...
  • Data Vault的一点思考

    2018-12-10 16:52:58
    之前参考过很多资料,其主要的核心理念是,DV(Data Vault)是结合ER和DM的一套建模理论。其实与其说是这样,还不如说是ER这一派,想找一个中间地带,两者都能兼顾。最近看了在维基百科看到关于DV的解释,其中提到DM的...
  • 数据库,不管是以什么模型搭建的数据库,ER(entity-relationship Modelling)也好,DM...Data Vault: 电子仓库/电子资料室/数据仓库。 我看了国内很多文章和博客,都没有发现这个这个名词的来源,于是我去wiki找到了,D
  • 所有源库中用到的表的非键属性都要放到Data Vault模型中。 下表列出了所有附属表 附属表 描述 sat_customer hub_customer sat_product_catagory ...
  • Data Vault初探(一) —— 基础

    万次阅读 2015-12-08 17:56:29
     Data Vault(DV)模型是用于企业级的数据仓库建模。由Dan Linstedt在20世纪90年代提出(http://www.danlinstedt.com)。在最近几年,Data Vault模型获得了很多关注,并在BI社区里拥有了一批追随者。  Dan ...
  • 数据仓库之Data Vault模型总结

    万次阅读 2018-09-25 17:25:11
    一,Data Vault模型有几个主要的组件,这里先总结一下: 1.Hub组件,是一个数据表,用于记录在业务应用中常用到的业务实体键值,如员工ID,发票号、客户编号、车辆号等。 表内包括几个关键字段:代理主键...
  • 前段时间和一家互联网创新企业的数据架构师聊天,说他们正准备开始用Data Vault的模型进行数据仓库的建设,他们有一套维度建模的集市,但是维度建模的特点是更贴业务,但是对于数据的存储不是很友好,对于数据友好,...
  • Data Vault 2.0版本里,其不只是针对数据仓库的建模,同时也包含了架构,方法论以及实现。这篇挑几个概念,附上我个人对其的理解。同时也把这个系列的名字改成《Data Vault玩转数据仓库》。 ETL和ELT ELT火了...
  • Oracle Data Vault 和 Oracle Label Security

    千次阅读 2017-03-15 14:31:53
    今天安装12c数据库有Oracle Data Vault 和 Oracle Label Security两个选项,之前没研究过是干啥用的   Oracle Vault简述   Oracle Vault是官方推荐的security策略之一,它主要用于运维机构中对数据的保护。传统...
  • 免费使用dbt包创建和加载数据Vault 2.0兼容的数据仓库(由开源数据工程工具dbt驱动,Fishtown Analytics的注册商标)- Datavault-UK/dbtvault-源码
  • Hadoop 之上的数据建模 - Data Vault 2.0

    千次阅读 2018-03-10 10:47:27
    重点围绕数据建模方面做分析,因为这是本文的重点,介绍一份新的数据建模方式 Data Vault 2.0. ETL 最基本的构建来自于 转换和工作流。 工作流,作用是规划一条完整的数据转换流。 转换,是 ETL 最中心的组件。...
  • 本篇先不讨论Data Vault其本身,因为不见得所有人都接受这个。但是里边有一些很不错的东西跟主流的数据仓库方法是有共同点的,所以这里主要讨论这些共同的方法,在笔者看来,无论是Kimball还是DV,这些方法都是很...
  • 国内关于Data Vault的信息很少,所以决定写点什么,纯粹都是自己在这个行业10多年的摸爬滚打。不过为了效率,尽量做到简短,直接上干货。对于各个细节大家有不同的理解欢迎来讨论。 数据仓库建模的方法有哪些。 ...
  • Data Vault初探(四) —— 初始装载

    千次阅读 2015-12-08 18:27:03
    下面的SQL脚本用于完成Data Vault的初始装载过程。 USE dv; SET AUTOCOMMIT = 0; -- 清空附属表、链接表、中心表 SET FOREIGN_KEY_CHECKS=0; TRUNCATE sat_customer; TRUNCATE sat_order_product; TRUNCATE sat_...
  • 初见Data Vault 模型

    2020-10-15 20:38:57
    最近因为工作需要接触了Data Vault这个概念,所以又开始了新一轮的学习,作为一个java开发者,平时主要和代码打交道,实现的是业务逻辑,初探数据的故事,感觉整个整个世界都是新的。作为一个懵逼小白,第一件事当然...
  • 建立 Data Vault 模型

    2020-10-16 09:19:32
    本示例源数据库是一个订单销售的普通场景,共有省、市、客户、产品类型、产品、订单、订单明细7个表。ERD如下图所示。 使用下面的脚本建立源数据库表: ...CREATE TABLE province ( province_id varchar(2) NOT ...
  • <div><p>The goal of this application is to allow one person (a Data Owner) to spin up a grid node, load it with data, and allow another (or several) people to use it to train models. <p>Most ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,004
精华内容 801
关键字:

datavault