Как стать автором
Обновить

Комментарии 26

Спасибо за описание! Доступ пользователей к созданию отчетов - как на практике решаете проблему возможной несходимости данных? Я считаю продажи так, а в другом отделе - совершенно другим способом. При этом на совещаниях мы можем показывать разные отчеты, и спорить, хотя построены на одних данных и те, и другие. Но математика/логика могут быть разными.

В системах отчетности SAP BusinessObjects и PowerBI все формулы прописаны для метрик (продажи, себестоимость, коэффициенты возврата, продаж и др), которые используют пользователи, им не приходится заново рассчитывать их. И также мы делаем описания в confluence в спейсе, к которому есть доступ у всей компании.

Если происходят моменты несходимости данных в отчетах, то обсуждаем с отделами, что и как они используют, анализируем их отчеты, стараемся прийти к единой логике, и если есть необходимость в создании новых метрик, то добавляем их в SAP BO и Power BI. Это помогает избежать ошибок в дальнейшем.

Расчёт показателей сделан на уровне DWH, или внутри BI?

Базовые показатели на уровне DWH. Остальные, которые можно вынести - в SAP BO и PowerBI.

Пробовали ClickHouse для ваших задач? Чем не подошел?

Мы давно используем Oracle, как правило, миграция - это дорого, плюс не считали профит от перехода. 

Но ClickHouse используется в отделе R&D для решения их задач.

это же узкоспециализированный инструмент и подходит только для для доступа к данным без использования сложнонаписанных sql выражений. Какое может быть ХД на КХ?

Мне казалось, что КХ это как раз про сложные выражения и вычисления. Другое дело, что это скорее NoSQL база, и многочисленные реляции там не приветствуются, так что Инмона там не реализуешь. Но Кимбала - вполне.

Сделайте там join таблиц так на 20 :)

Дело не в инмонахкимбалах а в том где данные готовить. Где выполнять ETL преобразования и трансформации данных в инмонакимбала. в КХ это невозможно сделать.

Удачи вам, ребята!

С нетерпением жду статью про гринплам) Особенно интересна часть про моделирование, там из-за распределенности наверняка будут вылезать нюансы. Железо, кстати, придется же сменить?

Помню, хотели поднимать хадуп для DL... не взлетело?

Спасибо, Коля!

Модель будет определяться многими факторами (команда, мощности, интенсивность загрузки). Железо придется сменить, но это не точно.

Хадуп не очень хорошо себя показал для наших основных потребностей.

в вертике то нюансов побольше в моделировании чем в гп

Сталкивались ли с случаями, когда "гранулярность" историчности в системах-источниках не совпадает с "гранулярностью" историчности в вашем IL (который в 3NF)? То есть, например, в системе источнике есть:

  • неисторичная таблица КЛИЕНТ с полем ИМЯ (в которой при изменении данные просто апдейтятся)

  • и историчная таблица АДРЕС_КЛИЕНТА с историей всех адресов клиента (т.е. в самом простом виде там есть поля КЛИЕНТ_ИД + ДАТА_С + ДАТА_ПО + АДРЕС)

В IL же у вас есть одна общая таблица КЛИЕНТ с атрибутами ИМЯ и АДРЕС, в которой реализовано SCD2. Соответственно:

  • как вы обрабатываете изменения данных в таблицах с точки зрения корректного выстраивания историчности? Есть ли какая-либо договоренность с "бизнесом" на тему "как трактовать и какой датой отражать изменения в "неисторичных" таблицах источников?

  • есть ли правки "задним числом" и если да, то как вы их загружаете в IL?

1) У нас DL историчный, так как мы все почти грузим SCD2 (то есть даже неисторичные таблицы источников у нас обретают историю). На IL формируем таблицу с датами valid_from/valid_to по изменениям обеих таблиц (так как есть история на DL).

С бизнесом договоренности есть только по витринам на BL, так как бизнес не знает о всей логике хранилища - отображаем неисторичное на дату последнего изменения (то есть на текущий момент значения).

2) Если случаются на источнике такие правки, то перегружаем DL/IL таблицы с нужной даты или за все время.

Я правильно понял, что у вас история копируется и в слой IL? Как вы тогда обрабатываете генерацию суррогатных ключей для кажой версии записи? Например есть две таблицы dim_sku и dim_brand. dim_sku ссылается на dim_brand по суррогатному ключу. Что если приходит новая версия бренда и для неё генерится новый суррогат. Вы в dim_sku перебиваете ссылку на новый бренд или также генерите новую версию с новой ссылкой на бренд?

Генерируем сурругатные ключи не для каждой версии записи, по ключу таблицы на DL. 

Можете рассказать какими механизмами переносите на слой Data Layer (DL) из Source systems?

В основном забираем с источника батчами средствами SQL (полный или инкрементальный забор данных).

В Vertica 7 Тб данных на 5 узлов в которых 160 CPU и 2,5Tb RAM.

Если посчитать TCO на 1 TB то будет очень больно.

И при этом они с оракла на гп переходят, а не с вертики :)

Как раз зашёл сказать, что оракл тянет 60 тб (представляю эту фулфлеш полку под ним), а чудо вертика всего 7.

А подоплека наверняка в том, что вертика сменила лицензию и теперь не докупить расширение для неё, надо покупать все с нуля.

Ну вы же сами подтверждаете мой намек :) 60Тб как бы не хотят тащить в Вертику.

GP в целом тоже не подарок :)

Были ли у Вас такие ситуации или чтобы Вы сделали в следующем: обнаружили что в 50-70 % данных в DL не хватает какого нибудь поля из источников. Например ДатаАктуальности.

Тупо пересобираем весь DL заново?

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

Спасибо, было интересно прочитать.

А почему в скрине с APEX названия русских городов в транслитерации? Это какой-то общий подход по максимуму интернационализировать содержимое в DWH или просто частный не показательный пример?

Спасибо!

У нас города в системе-источнике в транслитерации, поэтому для удобной связи в APEX создали справочник с такими же названиями.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.