Объединение фактов в Amazon Redshift - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь построить галактическую схему в Amazon Redshift. Я начал со всех измерений и с несколькими обходными путями, заставив их работать с SCD2 - стиль Кимбалла.

Теперь я пытаюсь заставить работать некоторые таблицы фактов. Факты в нашей компании очень сложны для вычисления, поэтому я сделал один «просмотр» для каждого KPI. Я пытаюсь проиллюстрировать это простым способом, так что вы можете помочь мне решить мою проблему на простом примере: предположим, что это 3 разных представления, давайте назовем их: они уже суммированы по времени.

enter image description here fact_revenue

enter image description here fact_licenses

enter image description here fact_costs

То, чего я сейчас пытаюсь достичь, - это объединить их все вместе в одну большую таблицу фактов, которая содержит информацию обо всех трех. Но я действительно не знаю, как это сделать:

enter image description here fact_all

Хорошо, если вы поможете мне с это. Заранее большое спасибо.

Ответы [ 2 ]

2 голосов
/ 21 апреля 2020

Я не уверен, что синтаксис поддерживает красное смещение, но это стандартный шаблон

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
0 голосов
/ 21 апреля 2020

Есть ли у вас отношения между таблицами? Я предполагаю, что столбцы time и customer являются внешними ключами, но, скажем, если у вас есть еще одна информация с такими же значениями, ваш выбор будет повторяться. Если у вас нет данных с одинаковыми значениями, вы можете использовать это утверждение:

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
...