Data Craze Weekly #8
Tę wiadomość możesz otrzymać bezpośrednio na swoją skrzynkę dzięki zapisowi na newsletter – Data Craze Weekly.
Przegląd Tygodnia
Data Lineage, czym jest i czy jest potrzebny?
Czym jest Data Lineage?
W prostych żołnierskich słowach jest to nic innego jak udokumentowanie przepływu danyc. Od kolumny w konkretnej tabeli to miejsca w raporcie w którym jest wykorzystywana.
Dokumentowanie takiego przepływu jest o tyle ciekawym problemem, że mamy mnogość narzędzi do przetwarzania i wizualizacji danych to raz.
Dwa standardy pisania przepływów danych (data pipelines) różnią się pomiędzy zespołami (a nawet pomiędzy osobami w zespole) – np. SELECT abc FROM xyz vs SELECT * FROM xyz (zakładając że w tabeli XYZ jest tylko 1 kolumna abc wynik będzie taki sam ale czy narzędzie będzie wiedzieć czym jest *).
Ale spokojnie jak na wszystko tak i na data lineage znajdzie się panaceum. Oprócz płatnych rozwiązań komercyjnych warto zwrócić uwagę na projekty Open Source.
Autor wymienia m.in.:
- Apache Atlas
- Airflow Lineage Backend
- Marquez
- OpenLineage
Dlaczego zdecydowałem się pogrubić OpenLineage, z uwagi na fakt, że to na podstawie jego standardu inne produkty (np. Marquez) przesyłają informację o przepływie.
OpenLineage is an open source framework for sending lineage metadata between services. This is the standard that is used by Marquez and many other systems such as Apache Atlas, Amundsen and Egeria. If you read the documentation, OpenLineage seems very tightly connected to Marquez. But don’t worry, OpenLineage is supposed to be a generalized framework for anyone to use.
Mają wiedzę czym jest data lineage, warto zadać sobie pyanie czy jest potrzebny?
Odpowiedź należy do Ciebie, czy chcesz przechodzić przez X plików aż znajdziesz skąd pochodzi dany atrybut czy wolisz go wyszukać i dostać wprost cały przepływ?
CTE, nie zawsze bezpieczne i wydajne
CTE, i.e. czyli Common Table Expression, albo inaczej znany i lubiany WITH.
Chwalony przez wszystkich, bywalec salonów i dobrze przemyślanych zapytań SQL. Twórca porządku, siewca idei DRY (Don’t repeat yourself) co może być w nim złego?
Adrian Bednarz w swoim artykule pokazuje na przykładzie Snowflake jak CTE może negatywnie wpłynąć na wydajność (bardzo konkretny przypadek) i jak sobie z tym poradzić.
Surprise, surprise! This code executes in 6 seconds. One CTE and 2x performance degradation. But why? The way Snowflake optimizer tackles this query is to gather all conditions from all the subqueries, join them with ORoperator and apply to imported table and then forward the elements to intermediate CTEs. This essentially means that we need one extra scan over the data.
A jeżeli korzystasz z bazy danych PostgreSQL to warto poczytać o modyfikatorze MATERIALIZE przy wykorzystaniu CTE o TUTAJ.
Link: https://techwithadrian.medium.com/the-hidden-risk-of-using-ctes-53b241e256b2
Biblioteka do DataQuality, z perspektywy ML (Machine Learning)
Koledzy i koleżanki z DoorDash stworzyli przydatną bibliotekę do wykorzystania w Pythonie, która ma nam pomóc w zebraniu informacji na temat jakości w zbiorach danych.
Ogromnie istotna kwestia ogólnie, ale szczególnie z perspektywy uczenia maszynowego w końcu garbage in garbage out.
Data quality issues come in a variety of forms, from obviously missing and extreme values to biases hiding in duplication and defaulting. Detecting these issues quickly and diagnosing likely causes will help prioritize which problems need to be solved, which can be handled through ML techniques, and ultimately lead to better performance and success in ML modeling projects.
Biblioteka w łatwy pozwala m.in. na:
- zidentyfikowanie brakujących wartości
- zidentyfikowanie niewłaściwych wartości
- znalezienie anomali w dystrybucji danych (tzw. outliers)
- znalezienie nieprawidłowych typów danych
Przykład Modern Data Stack od GetInData w projekcit dla Volt.io
Uwielbiam artykuły typu success / failure stories, pozwalają na zrozumienie problemu przed jakim ktoś stał i drogi (podjętych decyzji) do jego rozwiązania.
W tym konkretnym przypadku dostajemy sposób podejścia do nowej architektury danych (w oparciu o Modern Data Platform) dla Volt.io stworzony przez zespół z GetInData.
Elementy systemu:
- data ingestion: Airbyte (EC2 instance, external Aurora DB)
- data transformation: dbt (as binary on MWAA machines)
- data presentation: Looker (EC2 instance)
- data orchestration: MWAA (the managed version of Apache Airflow on AWS)
- data governance POC: Datahub (EC2)
- data warehouse: Snowflake (private link)
W artykule oprócz sporej ilości mięsa (diagramów, decyzji) znajdziesz też takie smaczki jak wykorzystanie sqlfluff do standaryzacji kodu.
Link: https://getindata.com/blog/how-we-built-modern-data-platform-for-fintech-scale-up/
Narzędzia
BetterBrain – a gdyby tak uprościć pisanie SQL-a do pełnych angielskich zdań – SELECT * FROM products = Give me all products – dobre?
Takiej sztuki chce dokonać firma / produkt BetterBrain. Subiektywnie to fajny i nie fajny produkty.
Nie fajny z dwóch powodów:
- Retoryka twórcy jest po prostu kiepska „Everybody hates writing SQL.” – hmm no raczej nie. Subiektywnie lepiej byłoby nawiązać do powtarzalnych, prostych czynności w SQL-u (np. zliczanie unikatowych elementów tabeli – przy testowaniu wykorzystywane nagminnie).
- Podobnie jak ORM-y wbudowane w frameworki np. Django (w Pythonie) czy Spring (w Javie) pozwalają nam na ominięcie pisania SQL-a. Jednak czy zawsze dają dobre / optymalne wyniki (zapytania), no niestety nie.
Fajny, bo:
- Pozwoli na wejście do świata baz danych osobom, które świetnie znają domenę biznesową ale nie znają SQL (dopiero się uczą). Inwestor dostający dostęp do danych w bazie danych – może nie wiedzieć jak i po czym połączyć tabele ale widzi, że są tabele A i B i warto z nich skorzystać.
- Odciąży od pisania nudnych, powtarzalnych zapytań – przykład zliczanie unikatowych wierszy
- Da więcej pracy osobom, które na co dzień pracują z SQL-em – ktoś te cudowne automatycznie stworzone zapytania będzie musiał optymalizować i utrzymywać 😀
Niestety nie ma w tym momencie dostępu do narzędzia, można się jedynie zapisać na listę oczekujących.
Link: https://twitter.com/abhargava20/status/1577713811150311444
Sprawdź Wiedzę
#admin #sql
Tym razem zadanie w formie poszperania w dokumentacji.
Problem do rozwiązania: Sprawdź czy w bazie danych (hurtownii danych) z której korzystasz istnieją zduplikowane indeksy. Zduplikowany indeks = więcej niż jeden indeks (tego samego typu) na tym samym polu w tej samej tabeli w tym samym schemacie w bazie danych.
Dla ułatwienia zadania, dwa odnośniki do dokumentacji (PostgreSQL)
- pg_index
- IndexMaintenance
Więcej pytań z SQL-a znajdziesz tutaj: SQL - Q&A
Praca
- Data Engineer / Data Architect, RAMP Network – Poland, Remote – PLN 10,500 – PLN 36,500 (B2B / Monthly – based on role MID / Senior / Lead)
Szukane umiejętności: GCP (BigQuery), Python, SQL, dbt, Airflow,
- BI Consultant / ETL Developer, Predica – Fully Remote – 9,500 – 19,000 (B2B / Monthly)
Szukane umiejętności: SQL, ETL Tools (ex. SSIS), ADF (Azure Data Factory), Data Warehouse concepts