Привет, я работаю над хранилищем данных MS SQL Server 2017 Standard Edition для клиента и столкнулся с проблемой, по которой мне нужен совет.
У меня есть достаточно большая таблица фактов, содержащая розничные транзакции до транзакций (около 2,5 миллионов строк в день с 3-летней историей). Большая часть таблицы фактов берется из одного источника — кассовой системы. Итак, в настоящее время у нас есть процесс ETL, загружающий данные из этой системы, моделирующий их для поиска суррогатных ключей и т. д. и загружаемый в таблицу фактов каждый час. Таблица имеет кластеризованный индекс columnstore для обеспечения хорошей производительности в инструменте BI.
Теперь у клиента есть система приложений лояльности, которую он хочет интегрировать. Эта система отправляет нам данные о ежедневной выписке CSV. Выдержка содержит подробную информацию о транзакциях приложения и связанных предложениях, полученных через приложение, и содержит общий идентификатор транзакции, который соответствует идентификатору, который уже содержится в нашей таблице фактов.
Если бы эти источники поступали вместе, я бы смоделировал новую таблицу измерений — DimAppOffer или аналогичную и использовал бы два источника для поиска предложений, связанных с каждой транзакцией, и имел AppOfferKey в таблице фактов. Но поскольку этот CSV-файл поступает только один раз в день, а транзакции загружаются каждый час, все связанные транзакции уже существуют в таблице фактов к тому времени, когда я получаю данные из приложения лояльности.
Как вы думаете, как я должен справиться с этим в ETL? Я не особенно хочу запускать большое обновление для кластеризованного индекса columnstore, если я могу этого избежать, но я не вижу другого способа обойти это? Любой совет будет принят во внимание.