在 Amazon Redshift 中合并事实表
Merging Fact-Tables in Amazon Redshift
我尝试在 Amazon Redshift 中构建 galaxy-schema。我从所有维度开始,通过一些变通方法让他们使用 SCD2 - Kimball 风格。
现在我正试图让一些事实 table 起作用。我们公司的事实计算起来非常复杂,所以每个KPI我都做了一个"view"。我试着用一种简单的方式来说明它,所以你可以通过一个简单的例子帮助我解决我的问题:让我们假设这些是 3 个不同的视图,让它们命名:
已经按时间总结了。
fact_revenue
fact_licenses
fact_costs
我现在想要实现的是将它们合并为一个大事实 table,其中包含所有三个的信息。但我真的不知道该怎么做:
fact_all
如果你能帮我解决这个问题,我会很高兴。非常感谢您。
表格之间有关系吗?我假设 time
和 customer
列是外键,但可以说如果您有更多具有相同值的数据,您的 select 将是重复的。如果您没有具有相同值的数据,您可以使用此语句:
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
我不确定 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
我尝试在 Amazon Redshift 中构建 galaxy-schema。我从所有维度开始,通过一些变通方法让他们使用 SCD2 - Kimball 风格。
现在我正试图让一些事实 table 起作用。我们公司的事实计算起来非常复杂,所以每个KPI我都做了一个"view"。我试着用一种简单的方式来说明它,所以你可以通过一个简单的例子帮助我解决我的问题:让我们假设这些是 3 个不同的视图,让它们命名: 已经按时间总结了。
我现在想要实现的是将它们合并为一个大事实 table,其中包含所有三个的信息。但我真的不知道该怎么做:
如果你能帮我解决这个问题,我会很高兴。非常感谢您。
表格之间有关系吗?我假设 time
和 customer
列是外键,但可以说如果您有更多具有相同值的数据,您的 select 将是重复的。如果您没有具有相同值的数据,您可以使用此语句:
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
我不确定 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