Redaktor Netologii rozmawiał z liderem zespołu BI w Pawłem Sajapinem na temat zadań realizowanych przez inżynierów danych w jego zespole, jakich narzędzi używają do tego celu i jak właściwie podejść do wyboru narzędzi do rozwiązywania zadań związanych z danymi, w tym nietypowych. Paweł jest wykładowcą na kursie „».
Czym zajmują się inżynierowie danych w Profi.ru
Profi.ru to serwis, który łączy klientów z specjalistami z różnych dziedzin. W bazie serwisu znajduje się ponad 900 tysięcy specjalistów w 700 rodzajach usług: korepetytorzy, fachowcy od napraw, trenerzy, kosmetyczki, artyści i inni. Każdego dnia rejestruje się ponad 10 tysięcy nowych zleceń — to generuje około 100 milionów zdarzeń dziennie. Utrzymanie porządku w takiej ilości danych jest niemożliwe bez profesjonalnych inżynierów danych.
W idealnym przypadku inżynier danych rozwija kulturę pracy z danymi, dzięki której firma może uzyskiwać dodatkowy zysk lub obniżać koszty. Przynosi wartość dla biznesu, pracując w zespole i pełniąc ważną rolę pomiędzy różnymi uczestnikami — od programistów po użytkowników biznesowych raportów. Jednak w każdej firmie zadania mogą się różnić, dlatego rozważmy je na przykładzie Profi.ru.
Zbierają dane potrzebne do podejmowania decyzji i dostarczają je końcowemu użytkownikowi — top menedżerowi, product managerowi, analitykowi
Dane muszą być zrozumiałe dla podejmowania decyzji i wygodne w użyciu. Nie trzeba wkładać wysiłku w szukanie opisów ani tworzyć skomplikowanych zapytań SQL uwzględniających wiele różnych czynników. Idealny obrazek — użytkownik patrzy na pulpit nawigacyjny i wszystko mu odpowiada. A jeśli brakuje danych w jakimś kontekście, to zagląda do bazy i za pomocą prostego zapytania SQL otrzymuje to, czego potrzebuje.

Miejsce procesu jakości danych w ogólnej strukturze hurtowni danych
Ważne znaczenie ma dokumentacja wyjaśniająca pracę z danymi. Upraszcza to pracę zarówno inżyniera danych (nie jest niepokojony pytaniami), jak i użytkownika danych (może samodzielnie znaleźć odpowiedzi na swoje pytania). W Profi.ru takie dokumenty są zgromadzone na wewnętrznym forum.
Wygodność obejmuje również szybkość uzyskiwania danych. Szybkość = dostępność w jednym kroku, kliknięciu — na pulpicie. Jednak w praktyce wszystko jest bardziej skomplikowane.
Ten sam Tableau z perspektywy użytkownika pulpitu nie pozwala na wyświetlenie wszystkich możliwych wymiarów. Użytkownik zadowala się tymi filtrami, które stworzył twórca pulpitu. To generuje dwa scenariusze:
- Twórca tworzy wiele cięć dla pulpitu ⟶ liczba stron znacznie rośnie. To obniża dostępność danych: trudno jest zrozumieć, gdzie co jest.
- Twórca tworzy tylko kluczowe cięcia. Znalezienie informacji jest łatwiejsze, ale przy nieco mniej standardowym cięciu wciąż trzeba będzie udać się albo do bazy, albo do analityków. To również źle wpływa na dostępność.
Dostępność to szerokie pojęcie. Obejmuje zarówno obecność danych w odpowiedniej formie, jak i możliwość uzyskania informacji na pulpitach, a także potrzebne cięcie danych.
Akumulują dane ze wszystkich źródeł w jednym miejscu
Źródła danych mogą być wewnętrzne i zewnętrzne. Na przykład, czyjś biznes może zależeć od prognoz pogody, które należy zbierać i przechowywać — od zewnętrznych źródeł.
Przechowywanie informacji powinno odbywać się z podaniem źródła, a także w taki sposób, aby dane można było łatwo znaleźć. W Profi.ru problem ten rozwiązano za pomocą zautomatyzowanej dokumentacji. Dokumentacją źródeł danych wewnętrznych są pliki YML.
Tworzą pulpity
Wizualizację danych najlepiej przeprowadzać w profesjonalnym narzędziu — na przykład w Tableau.
Większość podejmuje decyzje emocjonalnie — ważna jest przejrzystość i estetyka. Ten sam Excel do wizualizacji, nawiasem mówiąc, nie jest zbyt odpowiedni: nie spełnia wszystkich potrzeb użytkowników danych. Na przykład menedżer produktu lubi zagłębiać się w liczby, ale w sposób wygodny dla siebie. To pozwala mu rozwiązywać swoje zadania, a nie zastanawiać się, jak uzyskać informacje i zebrać metryki.
Jakościowa wizualizacja danych pozwala łatwiej i szybciej podejmować decyzje.
Im wyżej osoba w hierarchii, tym większa potrzeba posiadania agregowanych danych pod ręką, na telefonie. Szczegóły nie są potrzebne top menedżerom — ważne jest kontrolowanie sytuacji w całości, a BI to dobre narzędzie do tego.

Przykład produktu z panelu sterowania Profi.ru (jedna z zakładek). W celu zachowania poufności informacji nazwy metryk i osi są ukryte.
Przykłady rzeczywistych zadań.
Zadanie 1 — przeniesienie danych z systemów źródłowych (operacyjnych) do hurtowni danych lub ETL.
Jedno z rutynowych zadań inżyniera danych.
W tym celu mogą być używane:
- skrypty własne, uruchamiane przez cron lub za pomocą specjalnych orkiestratorów takich jak Airflow lub Prefect;
- OTWÓRZ ROZWIĄZANIA: Pentaho Data Integration, Talend Data Studio i inne;
- rozwiązania własnościowe: Informatica PowerCenter, SSIS i inne;
- rozwiązania chmurowe: Matillion, Panoply i inne.
W prostym wykonaniu problem ten można rozwiązać, pisząc plik YML o długości 20 linijek. Zajmuje to 5 minut.
W najtrudniejszym przypadku, gdy trzeba dodać nowe źródło — na przykład nową bazę danych — może to zająć do kilku dni.
W Profi to proste zadanie — przy ustalonym procesie — składa się z następujących kroków:
- Wyjaśnienie klientowi, jakie dane są potrzebne i gdzie się znajdują.
- Zrozumienie, czy dostęp do tych danych jest możliwy.
- Jeśli dostępu nie ma, należy poprosić administratorów.
- Dodanie nowej gałęzi w Gicie z kodem zadania w Jira.
- Utworzenie migracji do dodania danych do modeli bazowych za pomocą interaktywnego skryptu Python.
- Dodanie plików do ładowania (plik YML z opisem, skąd pochodzą dane i do jakiej tabeli są wprowadzane).
- Przetestowanie na środowisku testowym.
- Załaduj dane do repozytorium.
- Utworzenie prośby o ściągnięcie (pull request).
- Przejście przez recenzję kodu.
- Po przejściu przez recenzję kodu dane są ładowane do gałęzi głównej i automatycznie wdrażane na produkcję (CI/CD).
Zadanie 2 — wygodne rozmieszczenie załadowanych danych.
Innym częstym zadaniem jest umieszczenie załadowanych danych w taki sposób, aby końcowy użytkownik (lub narzędzie BI) mógł z nimi wygodnie pracować, nie musząc podejmować zbędnych działań w celu wykonania większości zadań. Oznacza to zbudowanie lub aktualizację Dimension Data Store (DDS).
W tym celu mogą być stosowane rozwiązania z zadania 1, ponieważ również jest to proces ETL. W najprostszym wariancie aktualizacja DDS odbywa się za pomocą skryptów SQL.
Zadanie 3 — z kategorii nietypowych zadań.
W Profi powstaje analiza strumieniowa. Generowana jest ogromna liczba zdarzeń przez zespoły produktowe — zapisujemy je w ClickHouse. Jednak nie można wstawiać rekordów pojedynczo w dużych ilościach, dlatego musimy łączyć je w paczki. To znaczy, że nie można pisać bezpośrednio — potrzebny jest pośredni przetwornik.
Używamy silnika opartego na Apache Flink. Na razie porządek działań jest taki: silnik przetwarza przychodzący strumień zdarzeń ⟶ gromadzi je w paczki w ClickHouse ⟶ na bieżąco liczy liczbę zdarzeń w ciągu 15 minut ⟶ przekazuje je do usługi, która ustala, czy występują anomalie — porównuje z wartościami z analogicznych 15 minut wstecz, z sięganiem 3 miesięcy ⟶ jeśli są, wysyła powiadomienie do Slacka.

Schemat dla analizy frontendowej (część załadunku)
Framework Apache Flink zapewnia dostawę co najmniej raz. Niemniej jednak istnieje prawdopodobieństwo duplikatów. W przypadku RabbitMQ można to rozwiązać, używając Correlation ID. Wtedy dostawa jest gwarantowana jako jednorazowa ⟶ integralność danych.
Liczba zdarzeń ponownie obliczana jest za pomocą Apache Flink, wyświetlana przez stworzony na zamówienie dashboard, napisany w NodeJS, + frontend w ReactJS. Szybkie wyszukiwanie nie przyniosło podobnych rozwiązań. Zresztą sam kod wyszedł prosty — jego napisanie nie zajęło dużo czasu.
Monitorowanie ma raczej charakter techniczny. Obserwujemy anomalie, aby na wczesnych etapach zapobiegać problemom. Jakieś istotne, globalne metryki firmy obecnie nie wchodzą do monitorowania, ponieważ kierunek analizy strumieniowej jest w fazie formowania.
Podstawowe narzędzia inżynierów danych
Z zadaniami inżynierów danych jest mniej więcej jasne, teraz trochę o narzędziach, które są używane do ich rozwiązania. Oczywiście, narzędzia w różnych firmach mogą (i powinny) się różnić — wszystko zależy od ilości danych, ich prędkości przychodzenia oraz różnorodności. Może to również zależeć od preferencji specjalisty do jednego konkretnego narzędzia tylko dlatego, że z nim pracował i dobrze je zna. W Profi.ru postawiliśmy na następujące opcje →
Do wizualizacji danych — Tableau, Metabase
Tableau wybraliśmy dawno temu. Ten system pozwala na szybkie analizowanie dużych zbiorów danych, nie wymagając przy tym kosztownej implementacji. Dla nas jest on wygodny, ładny i znany — często w nim pracujemy.
O Metabase niewiele osób wie, ale jest to doskonałe narzędzie do prototypowania.
Z narzędzi wizualizacyjnych można również wspomnieć o Superset od Airbnb. Jego szczególną cechą jest wiele połączeń z bazami danych i możliwości wizualizacji. Jednak dla przeciętnego użytkownika jest mniej wygodny niż Metabase – nie można w nim łączyć tabel, do tego konieczne jest tworzenie oddzielnych widoków.
W Metabase można łączyć tabele, a co więcej, usługa robi to samodzielnie, biorąc pod uwagę schemat bazy danych. Interfejs Metabase jest prostszy i przyjemniejszy.
Jest wiele narzędzi – wystarczy znaleźć to odpowiednie.
Do przechowywania danych – ClickHouse, Vertica.
ClickHouse to darmowe, szybkie narzędzie do przechowywania zdarzeń produktowych. Analitycy tworzą samodzielnie odrębną analizę (jeśli mają wystarczające dane), a inżynierowie danych biorą agregaty i przesyłają je do Vertica w celu stworzenia witryn.
Vertica to świetny, wygodny produkt do prezentacji końcowych witryn.
Do zarządzania przepływami danych i przeprowadzania obliczeń – Airflow.
Dane ładujemy poprzez narzędzia konsolowe. Na przykład, używając klienta, który idzie z MySQL – tak jest szybciej.
Zaletą narzędzi konsolowych jest szybkość. Dane nie są przesyłane przez pamięć tego samego procesu Python. Z minusów – mniejsza kontrola nad danymi, które przelatują z jednej bazy danych do drugiej.
Głównym językiem programowania jest Python.
Python ma znacznie niższy próg wejścia, a w firmie są kompetencje związane z tym językiem. Innym powodem jest to, że w Airflow DAG-i pisze się w Pythonie. Te skrypty to tylko owijki nad ładowaniami, a główna praca odbywa się poprzez skrypty konsolowe.
Java używamy do rozwijania analityki w czasie rzeczywistym.
Podejście do wyboru narzędzi danych – co robić, aby nie tworzyć technologicznego zoo.
Na rynku jest wiele narzędzi do pracy z danymi na każdym etapie: od ich pojawienia się po wyświetlenie na dashboardzie dla zarządu. Nic dziwnego, że niektóre firmy mogą mieć rząd niespowiązanych rozwiązań – tzw. technologiczne zoo.
Technologiczne zoo to narzędzia, które pełnią te same funkcje. Na przykład, Kafka i RabbitMQ do wymiany wiadomości lub Grafana i Zeppelin do wizualizacji.

– widać, jak wiele dublujących się rozwiązań może istnieć.
Wiele osób może również korzystać z różnych narzędzi ETL do celów osobistych. W Profi jest dokładnie taka sytuacja. Główne ETL działa na Airflow, ale niektórzy do osobistych zadań używają Pentaho. Testują hipotezy i nie muszą przesyłać tych danych przez inżynierów. Głównie narzędzia „samozarządzające” są używane przez doświadczonych specjalistów zajmujących się działalnością badawczo-rozwojową – badają nowe kierunki rozwoju produktu. Zestaw danych do analizy jest interesujący głównie dla nich, a do tego zmienia się ciągle. W związku z tym nie ma sensu wprowadzać tych zadań do głównej platformy.
Wracając do tematu z zoo. Często użycie powielających się technologii związane jest z czynnikiem ludzkim. Oddzielne wewnętrzne zespoły przyzwyczaiły się pracować z danym narzędziem, którego inny zespół może w ogóle nie używać. Czasami autonomiczność jest jedynym sposobem na rozwiązanie specyficznych zadań. Na przykład, zespół R&D potrzebuje coś przetestować za pomocą konkretnego narzędzia - jest ono po prostu wygodne, ktoś z zespołu już z niego korzystał lub istnieje inny powód. Czekać na zasoby administratorów systemowych do zainstalowania i skonfigurowania tego narzędzia zajmuje dużo czasu. W tym samym czasie dokładnym i skrupulatnym administratorom trzeba jeszcze udowodnić, że to naprawdę jest potrzebne. Właśnie dlatego zespół instaluje narzędzie na swoich wirtualnych maszynach i realizuje swoje specyficzne zadania.
Zoologiczny zbór rozwiązań nie jest problemem, o ile nie wymaga to znacznych zasobów od administratora do wsparcia narzędzia. Należy wziąć pod uwagę, jak użycie narzędzia wpływa na zasoby wsparcia.
Innym powszechnym powodem pojawienia się nowego zestawu narzędzi jest chęć wypróbowania nieznanego produktu w dosyć nowej dziedzinie, gdzie standardy jeszcze nie zostały ukształtowane lub nie ma sprawdzonych rekomendacji. Inżynier danych, podobnie jak programista, zawsze powinien badać nowe narzędzia w nadziei, że znajdzie bardziej efektywne rozwiązanie dla bieżących zadań lub aby być na bieżąco z tym, co oferuje rynek.
Pokusa, by spróbować nowych narzędzi, jest naprawdę duża. Ale aby dokonać rozsądnego wyboru, przede wszystkim potrzebna jest samodyscyplina. Pomoże ona nie poddawać się w pełni badawczym impulsom, a uwzględnić możliwości firmy w utrzymaniu infrastruktury dla nowego narzędzia.
Nie warto używać technologii dla samej technologii. Najlepiej podchodzić do sprawy pragmatycznie: zadanie ⟶ zestaw narzędzi, które mogą to zadanie rozwiązać.
A dalej ocenić każde z nich i wybrać optymalne. Na przykład, to narzędzie może rozwiązać zadanie efektywniej, ale nie ma wokół niego kompetencji, a to nieco mniej efektywne, ale w firmie są ludzie, którzy wiedzą, jak się nim posługiwać. To narzędzie jest płatne, ale proste w utrzymaniu i użyciu, a to modne open source, ale do jego wsparcia potrzebny jest zespół administratorów. Takie dylematy się pojawiają, do ich rozwiązania potrzebna jest zimna głowa.
Wybór narzędzia to w połowie skok na wiarę, w połowie osobiste doświadczenie. Nie ma pełnej pewności, że narzędzie się sprawdzi.
Na przykład w Profi zaczynaliśmy od Pentaho, ponieważ mieliśmy ekspertów w tej dziedzinie, ale okazało się, że to był błędny wybór. Wewnętrzny repozytorium Pentaho, w miarę wzrostu projektu, znacznie spowolniło pracę. Na zapis danych, dla przykładu, mijała minuta, a jeśli ktoś ma nawyk ciągłego zapisywania pracy, czas po prostu umykał między palcami. To wszystko dodatkowo utrudniało skomplikowane uruchamianie i zadania zaplanowane – komputer się zawieszał.
Cierpienia zakończyły się po przejściu na Airflow – popularne narzędzie z dużą społecznością.
Obecność społeczności usługi, narzędzia jest ważna przy rozwiązywaniu skomplikowanych zadań – można poprosić kolegów o radę.
Jeśli firma jest dojrzała i dysponuje zasobami, ma sens rozważenie zakupu wsparcia technicznego. Pomoże to szybko rozwiązywać problemy i uzyskać rekomendacje dotyczące korzystania z produktu.
Jeśli chodzi o podejście do wyboru, to w Profi kierujemy się takimi zasadami:
- Nie podejmować decyzji w pojedynkę. Kiedy ktoś coś wybiera, automatycznie jest przekonany o swojej racji. Co innego – przekonać innych, gdy trzeba przytoczyć poważne argumenty na poparcie. Pomaga to również dostrzec słabe strony narzędzia.
- Konsultować się z głównym specjalistą ds. danych (dialog pionowy). Może to być główny inżynier danych (Chief Data Engineer) lub kierownik zespołu BI. Szefowie widzą sytuację z szerszej perspektywy.
- Komunikować się z innymi zespołami (dialog poziomy). Jakie narzędzia stosują i jak skutecznie. Może narzędzie kolegów rozwiąże również Twoje problemy, eliminując potrzebę tworzenia zoo rozwiązań.
Wewnętrzne kompetencje jako skuteczny zamiennik zewnętrznego dostawcy usług
Jednym z podejść do wyboru narzędzi jest skorzystanie z wewnętrznych kompetencji firmy.
Często zdarzają się sytuacje, gdy firma ma złożone zadanie, ale brakuje funduszy na jego realizację. Zadanie jest obszerne i ważne, a w zasadzie najlepiej byłoby zaangażować zewnętrznego dostawcę, który ma odpowiednie doświadczenie. Ale ponieważ brak funduszy, zadanie zostaje przekazane wewnętrznemu zespołowi. Co więcej, zazwyczaj firma bardziej ufa swoim pracownikom, jeśli ci już udowodnili swoją efektywność.
Przykładem takich zadań, w których nowy kierunek rozwija się dzięki pracownikom, jest przeprowadzenie testów obciążeniowych oraz stworzenie hurtowni danych. Szczególnie hurtownia danych, ponieważ jest to unikalna historia dla każdej firmy. Hurtowni nie można kupić, można jedynie zatrudnić zewnętrznych specjalistów, którzy ją zbudują przy wsparciu wewnętrznego zespołu.
Zresztą, w miarę rozwoju nowego kierunku, zespół może zrozumieć, że potrzeba zewnętrznego dostawcy usług zniknęła.
W Profi wdrożenie BI odbyło się wewnętrznie. Główna trudność polegała na tym, że biznes chciał szybko uruchomić BI. Jednak budowa takiego projektu wymagała czasu: aby podnieść kompetencje, wprowadzić dane, zbudować wygodną strukturę hurtowni, wybrać narzędzia i opanować je.
Główna — gorąca — faza, kiedy wszystko było budowane i krystalizowane, trwała około roku. Projekt rozwija się do dziś.
Przy budowie korporacyjnej hurtowni danych ważne jest przestrzeganie wysokich standardów, bronienie swoich stanowisk i nie robienie rzeczy na szybko w celach biznesowych.
Z wielkim bólem przemyślaliśmy dużą część projektu, którą wtedy musieliśmy zrobić szybko.
Jednak czasami podejście "na szybko" ma sens. W przypadku rozwoju produktów może być wręcz jedynym słusznym rozwiązaniem. Należy szybko posuwać się naprzód, testować hipotezy produktowe i tak dalej. Ale magazynowanie musi być oparte na solidnej architekturze, w przeciwnym razie nie będzie mogło szybko dostosować się do rosnącego biznesu, a projekt utknie.
W tym trudnym projekcie nasze działania bardzo wspierał nasz lider, który bronił postępu prac, wyjaśniał kierownictwu, co robimy, pozyskiwał zasoby i po prostu nas chronił. Bez takiego wsparcia nie jestem pewien, czy udałoby nam się uruchomić projekt.
W podobnych sytuacjach kluczową rolę odgrywają tak zwani early adopters – osoby gotowe spróbować nowości – wśród menedżerów wyższego szczebla, analityków, menedżerów produktów. Aby surowy temat odniósł sukces, potrzebni są pionierzy, którzy potwierdzą, że wszystko działa i jest wygodne w użyciu.
Jeśli ktoś chce podzielić się rozwiązaniem trzeciego zadania z opisanego powyżej – zapraszam 🙂
Źródło: habr.com
