kimball与onedata建模方法论的区别

本文详细解析Kimball维度建模方法的四大步骤:业务过程选择、粒度声明、维度确认及事实确认,并阐述OneData建模方法中的数据调研、架构设计、模型设计等关键环节,强调高内聚低耦合、核心与扩展模型分离等设计原则。

kimball维度建模方法

Kimball维度建模四大过程
1)选择业务过程

业务过程是主体完成的活动,是维度建模的基础。客观来描述很抽象,举例来说明。下单、付款、发货和完成订单都可以叫作业务过程,完成活动的主体有些差异。去理解和描述业务过程是后续过程的前置条件。

2)声明粒度

声明粒度是建模过程中非常精细的一环,因为粒度是要清晰的表名事实表的每一行数据代表的意义。还是举例来说明,订单表每一条数据都是一个独立的订单(父子订单等情况后续博客会再论述)。后续维度和事实必须要和此时声明的粒度保持一致,所以此过程是十分精细的一环。同时要提一下,声明粒度为了保证模型的灵活,后续能满足更丰富的业务需求,建议从原子粒度(不可再拆分的粒度)角度去声明粒度。

3)确认维度

声明粒度完成以后,标示事实表的最小单位,两者的粒度是要统一的,那维度的确认也就水到渠成了,确认维度,主要是要描述事实表的出处和所处环境的维度信息。依旧举例来说明,根据上述的订单来说,一个订单的维度有什么,交易双方人员、商品和时间等信息,这就确认了维度。

4)确认事实

确认事实就是来确认这个业务过程的度量是什么,事实的度量要和声明的粒度、确认的维度的粒度保持一致。有点拗口,最后一次的举例说明,一个订单的金额是就是一个度量。而度量可分为三种类型:可加、半可加和不可加

OneData建模方法

1.数据调研
1)业务调研
OneData 是阿里巴巴提出的数据仓库方法论其他常见的数据仓库方法论如 Inmon 体系、Kimball 体系存在一些区别: ### 建模理念 - **OneData**:强调数据的统一和标准化,通过构建公共数据层,将通用的、具有业务含义的数据进行抽象和整合,避免数据的重复建设和不一致性。例如在订单管理业务中,会对“订单”这一核心业务实体进行统一的定义和建模,确保在不同的分析场景下使用的数据是一致的 [^1]。 - **Inmon 体系**:以企业级数据仓库为核心,采用自上而下的建模方式,先构建企业级的全局数据模型,再逐步细化到各个业务系统。这种方式注重数据的全面性和一致性,但建设周期较长,灵活性相对较差。 - **Kimball 体系**:采用自下而上的建模方式,以数据集市为中心,围绕业务过程进行维度建模。它更侧重于快速满足业务部门的分析需求,能够快速响应业务变化,但可能会导致数据冗余和不一致的问题。 ### 数据组织架构 - **OneData**:构建了公共数据层(包括公共维度层、公共汇总层和公共明细层)和应用数据层。公共数据层是数据的核心,为上层应用提供统一的、标准化的数据服务;应用数据层则根据具体的业务需求,从公共数据层中提取数据进行加工和处理。 - **Inmon 体系**:数据主要集中在企业级数据仓库中,各个业务部门的数据集市从企业级数据仓库中获取数据。这种架构下,数据仓库是数据的唯一来源,保证了数据的一致性,但数据的访问和处理效率可能较低。 - **Kimball 体系**:数据集市是独立的,每个数据集市针对特定的业务主题进行设计和开发。不同的数据集市之间可能存在数据冗余,需要进行额外的数据同步和维护工作。 ### 应用场景 - **OneData**:适用于大型企业,尤其是业务复杂、数据量大、对数据一致性和标准化要求较高的企业。通过 OneData 可以解决数据孤岛问题,提升数据的质量和使用效率,支持企业级的数据分析和决策。 - **Inmon 体系**:适合对数据的全面性和一致性要求极高,且业务相对稳定的企业。例如金融、电信等行业,需要对大量的历史数据进行统一管理和分析。 - **Kimball 体系**:更适合业务变化较快、需要快速响应业务需求的企业。例如互联网、电商等行业,能够快速为业务部门提供数据分析支持。 以下是一个简单的 Python 示例,模拟 OneData 中公共数据层的构建过程: ```python # 模拟原始订单数据 orders = [ {"order_id": 1, "customer_id": 101, "order_date": "2023-01-01", "amount": 100}, {"order_id": 2, "customer_id": 102, "order_date": "2023-01-02", "amount": 200} ] # 构建公共维度层:客户维度 customer_dim = [] for order in orders: customer_id = order["customer_id"] if not any(c["customer_id"] == customer_id for c in customer_dim): customer_dim.append({"customer_id": customer_id}) # 构建公共明细层:订单明细 order_detail = [] for order in orders: order_detail.append({ "order_id": order["order_id"], "customer_id": order["customer_id"], "order_date": order["order_date"], "amount": order["amount"] }) print("公共维度层 - 客户维度:", customer_dim) print("公共明细层 - 订单明细:", order_detail) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值