Итак, у меня есть таблица транзакций (postgres), которая вставляет новую строку всякий раз, когда пользователь продлевает свою подписку на наш сервис.Таблица subscription
выглядит следующим образом:
+--------+--------+------------+
| userId | prodId | renew_date |
+--------+--------+------------+
| 1 | 1 | 2018-05-01 |
| 1 | 1 | 2018-06-01 |
| 1 | 1 | 2018-07-01 |
| 2 | 3 | 2017-04-16 |
| 2 | 3 | 2017-05-16 |
+--------+--------+------------+
Если аналитики хотят выяснить N-е обновление или последнее обновление для конкретного пользователя или продукта, у меня есть два решения, чтобы дать им следующее:
1.) Во время процесса ETL я усекаю целевую таблицу хранилища DW и заново заполняю ее:
select *
, row_number() over (partition by userId, productId order by renew_date asc) as nth_renewal
from subscription
Я не могу придумать, как можно +1 к предыдущемупродление, если я буду делать инкрементные обновления, что если это будет первое обновление клиентов?
2.) Я просто копирую точную таблицу OLTP в хранилище данных и выполняю инкрементные обновления каждый день.Таким образом, я позволил аналитикам самостоятельно рассчитать n-е обновление.(также в качестве дополнительного вопроса: можно ли когда-нибудь иметь дубликат таблицы транзакций в моем хранилище данных?)