【问题标题】:Merging Fact-Tables in Amazon Redshift在 Amazon Redshift 中合并事实表
【发布时间】:2020-04-21 21:30:35
【问题描述】:

我尝试在 Amazon Redshift 中构建一个星系模式。我从所有维度开始,并通过一些变通方法让他们使用 SCD2 - Kimball 风格。

现在我正在尝试让一些事实表正常工作。我们公司的事实计算起来非常复杂,所以我对每个 KPI 都做了一个“视图”。我试着用一种简单的方式来说明它,所以你可以通过一个简单的例子来帮助我解决我的问题:让我们假设这些是 3 个不同的视图,让它们命名: 它们已经按时间总结了。

fact_revenue

fact_licenses

fact_costs

我现在想要实现的是将它们全部合并到一个大的事实表中,其中包含所有三个的信息。但我真的不知道该怎么做:

fact_all

如果你能帮我解决这个问题,那就太好了。非常感谢您。

【问题讨论】:

    标签: plsql amazon-redshift data-warehouse fact


    【解决方案1】:

    我不确定 redshift 支持什么语法,但这是标准模式

    SELECT  
    Time,Customer,
    MAX(Revenue) As Revenue, MAX(Licences) As Licences,MAX(Costs) As Costs
    FROM 
    (
    SELECT Time,Customer,Revenue,NULL as Licences,NULL As Costs
    FROM FactRevenue
    UNION ALL
    SELECT Time,Customer,NULL,Licences,NULL
    FROM FactLicences
    UNION ALL
    SELECT Time,Customer,NULL,NULL,Costs
    FROM FactLicences
    ) As MyTable
    GROUP BY Time,Customer
    

    【讨论】:

      【解决方案2】:

      表之间有任何关系吗?我假设 timecustomer 列是外键,但是假设您还有一个具有相同值的数据,您的选择将是重复的。如果您没有具有相同值的数据,则可以使用此语句:

      select * from fact_revenue rev 
      left join fact_licences li on li.time=rev.time and li.customer=rev.customer
      left join fact_costs co on co.time=rev.time and co.customer =rev.customer
      

      【讨论】:

      • 您好,感谢您的回答。仅当主事实表包含任何维度外键的所有可能值时,左连接才是一种选择。在您的陈述中,我会丢失有关日期“2020-03-31”的信息。这实际上是我的主要问题。我没有包含所有可能的维度键组合的表格 - 所以我需要将它们设置在一起形成我拥有的所有事实表
      猜你喜欢
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 1970-01-01
      相关资源
      最近更新 更多