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

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

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

В системах отчетности 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 в целом тоже не подарок :)

Не будет больно, дешевле оракла почти на порядок...

ТСО это не только про лиц это еще про железо. Чтобы перейти на Вертика требуется купить железо, купить саппорт железа, саппорт оси, и только потом саппорт\лиц вертики.

Ну и кто то утверждает что Оракл дешевле будет? Просто когда у тебя базюлька всего на 7Тб (а скорее всего это get_complience который показывает размер исходной помойки, без сжатия) и закладываешь на нее 2,5Тб с 160 core, то это не может быть эффективным, исходя из моего 8-летнего опыта работы с MPP

Я без понятия, что у вас за 8 лет опыта, но мои 6 лет говорят, что если разделить это цифры на 5 нод, ничего сверхъестественного в этом не будет.

ну если для вас 7Tb RAW на 5 нод это нормально, то без комментариев

Не понимаю, откуда вы взяли 7Тб сырых данных, но на текущий момент, это чуть более 13Тб BL слоя only

Из текста очевидно. Собачка могла и подрасти в дороге. ТСО считать надо при 85% заполняемости дискового пространства в любом случае

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

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

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

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

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

Спасибо!

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

Спасибо за статью.

На vc.ru видел ваше статью о том, что вся логистика у вас на 1С.

Извините за дилетантский вопрос, но все же:

Как вы организовываете работу 1С с микросервисами?

Возможно дадите советы, как лучше организовать работу с данными из 1С с такой большой сложной системой.
Когда REST к 1С уже не обойтись, и нужны все срезы данных из 1С в реальном времени.

У меня микропроект, по сравнению с вами. Есть курс на нарезку монолита, перевод на микросервисы, контроль товародвижения нормальными механизмами, вынесенными из 1С, но почти все исторически в 1С и как-то этот двигатель нужно чинить на ходу на коленке :(

Зарегистрируйтесь на Хабре, чтобы оставить комментарий