【问题标题】:incremental load of warehouse; updating dimension tables仓库的增量负载;更新维度表
【发布时间】:2011-05-23 13:17:22
【问题描述】:

我正试图弄清楚如何在数据进入我们的系统时逐步加载我的事实和维度表。

有没有比以下更简单的方法:

  • dim_id = 从 dim_table 中选择 id where dim_table.value='dim value';
  • 如果 rowcount == 0 -> 插入 dim_table ...
  • 插入事实(dim, measure) 值(dim_id, 23131)

如果我有 10 个维度,加载会变得相当麻烦

【问题讨论】:

  • 突然间23131 是什么? :)

标签: mysql data-warehouse


【解决方案1】:

在标准星型模式中,维度在事实之前加载。 因此,如果有一个批处理运行的 ETL 流程,最简单的解决方案是尝试更频繁地运行批处理。如果您确实需要实时 DW 加载,则必须以某种方式延迟事实,以确保首先加载维度。

当涉及到现成的解决方案时,您可能会考虑流式事件处理。有几种商业工具,但EsperTech 是开源的。该系统可以设置为连续运行的 ETL 转换。想想一个持续运行的 Kettle(Talend、SSIS、..)转换。

【讨论】:

    【解决方案2】:

    你真的需要它们是增量的吗?你不能使用 UUID 吗?

    我不明白你为什么需要一个 dim_table。

    如果你正在做一个星型模式,这就是你可以让它工作的方法

    Fact_table
    ----------
    time_id          character(36)
    geographic_id    character(36)
    measure          whatyouwant
    
    Dim Time
    --------
    time_id    character(36) (That matches the time_id inside your fact table)
    ...
    ...
    
    Dim Geogrphic
    -------------
    geographic_id character(36) (that matches the geographic_id inside your fact_Table)
    ....
    ....
    

    当您填写维度表时,会为您的维度生成一个 uuid。 当您填写事实表时,查找维度表,以便获取与此值关联的 uuid。

    编辑:我认为这可能会帮助你http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

    【讨论】:

    • 维度表和事实表都根据系统的输入同时填充。因此,当您收到一个数据项时,您还不知道维度表中是否有一行。
    • 好的,但是必须先填写一个。或者你的意思是插入 fact_table 可以在插入到一个暗表之后,而该表本身将在再次插入 fact_table 之后?如果不是这样,你应该先让你的维度充满自己。问题:您是否也在动态定义维度?或者你知道你将拥有的维度吗?
    • 我将摄取交易日志,“客户 IP 地址”是一个维度。它会被即时定义,是的。
    • Arf 如果你是在飞行中制作,我不知道。但是我不明白为什么会动态定义维度表的结构?你能告诉我有什么优势吗
    • 不抱歉,维度本身不是动态定义的。这一切都归结为;有没有一种简单的方法来检查表中是否存在行,如果存在,则获取 PK,否则插入新行并获取该行的新 PK?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    相关资源
    最近更新 更多