Jaki jest rozmiar tabeli, schematu w Databricks?

Problem:
Jaki jest rozmiar tabeli w Databricks? Ile miejsca zajmuje mój schemat? Jak policzyć rozmiar? W jaki sposób sprawdzić ile przybyło danych od ostatniego ładowania? Ile miejsca zajmuje bronze, silver oraz gold layer? Jak to zadanie zautomatyzować? Czy można z tego wyciągnąć jeszcze jakieś wnioski?

Rozwiązanie:
W Databricks dostępne jest polecenie:

describe detail table_name

Umożliwia ono pokazanie rozmiaru w bajtach, wylistowanie ile plików zajmuje obecnie tabela. Pokazuje też kiedy zostało utworzona albo ostatnio załadowana.

Pokażę teraz w jaki sposób, wygląda skrypt, który dla schematu zbiera dane o wszystkich tabelach.

Read More

Databricks: Jak opublikować report w Power BI używając Pythona?

Problem:
Dostawca zewnętrzny umieszcza na Azure Storage Account raport w Power BI. Masz zadanie umieścić ten raport w serwisie Power BI. Będziesz to robił cyklicznie, więc chcesz uprościć sobie pracę. W jaki sposób to zrobisz?

Co masz dostępne?
Narzędzie, która masz dostępne to Databricks i całe dobrodziejstwo jakie z tym się wiąże.

Rozwiązanie:
Skrypt w Pythonie wykorzystujący Power BI Rest API, Key Vault i Azure Identity do automatycznego importu raportu w pbix.

Potrzebne oczywistości:
1. Storage Account – tam przechowywany będzie plik pbix.
2. Service Principal – do połączenia Databricks – Power BI. Pamiętaj o ustawieniu odpowiedniej roli.
3. Biblioteka Azure Identity – do autentykacji
4. Key Vault – do przechowywania sekretów. To nie jest „must have” ale to jest dobra praktyka.

Read More

Co to jest wymiar w hurtowni danych?

co to jest wymiar

Co to jest wymiar w hurtowni danych?

Spójrz z lotu ptaka na hurtownie danych. Upraszczając, widzisz dwa typy obiektów. Fakty i wymiary.

Wymiar opisuje fakt, pozwala wykonać na nim agregacje i filtrowanie.

Pozwala go zobaczyć w kontekście i obejrzeć go z wielu płaszczyzn.

Opis faktu to na przykład, numer umowy, numer rejestracyjny, również komentarz. Takie dane nie nadają się zazwyczaj do agregacji.

Wymiar pomaga zagregować fakty: zobaczyć podsumowanie po wartościach z wymiarów. Tworzyć zestawienia i reporty. To atrybuty: status umowy, typ klienta, segmentacja klienta.

Wymiar umożliwia też filtrowanie po wartościach. Czyli odrzucenie tego, co nie jest potrzebne i pozostawienie tylko wartości, które mają być analizowane. Na przykład różnego rodzaju flagi, czy aktywny, czy zapłacone, czy faktura wysłana ale też wspomniane wcześniej statusy, kategorie i segmentacje wykorzystasz do filtrowania.

W wymiarze możesz przechowywać także hierarchie, na przykład relacje: marketów, pracowników albo kalendarz.

Wymiar to: Czas, Klient, Pojazd, Pacjent, Umowa, Waluta.

Dobrze się też zastanowić jaka jest strategia odnośnie przechowywania historii (SCD) oraz wstawiania singletonów.

Jeżeli te teoretyczna piguła to niewystarczające wyjaśnienie, przejdźmy dalej i popracujmy trochę na konkretach.

Read More

Co to jest klucz zastępczy? (surrogate key)

klucz zastępczy

Klucz zastępczy (surrogate key) to identyfikator stworzony w hurtowni danych na potrzeby wymiaru albo faktu. Zastępuje klucz główny z systemu źródłowego.

Surrogate key posiada następujące właściwości:
– Jest unikalny w obrębie wymiaru, nie ma dwóch takich samych wartości w ramach jednego wymiaru
– Za tym kluczem nie stoi żadna logika biznesowa: to jest zwyczajny ciąg liczb lub znaków.
– Wykorzystujesz go, żeby łączyć wymiar z faktem albo łączyć wymiary ze sobą

Nigdy nie łączysz wymiaru z faktem wykorzystując klucz naturalny albo klucz z systemu źródłowego.

Klucz zastępczy możesz być typu INT, BIGINT, GUID. Zazwyczaj jest to wartość generowana przez motor bazy danych, Lakehouse albo narzędzie ETL.

Dzięki kluczowi zastępczemu nie bazujesz na wartościach z systemu źródłowego. Pozwala Ci to na swobodę zarządzania kluczami. Określania jakiego typu są wartości, jaki jest ich cykl życia, w jaki sposób są tworzone.

Read More

Zalety chmury w rozwiązaniach data

Zalety chmury w rozwiązaniach data

Pracowałeś już z chmurą przy projekcie hurtowni danych albo data lake?

Masz już zapewne wyrobione zdanie: Co Ci się podoba, a co jest chwytem marketingowym, co wymaga dopracowania, gdzie czekasz na kolejną wersję, gdzie przydałoby się lepsze API zamiast interfejsu graficznego albo odwrotnie, bardziej wolałbyś interfejs graficzny zamiast pisania kodu.

Zrozumienie chmury to nie jest proces do ogarnięcia w czasie przerwy na kawę.

Ale jeżeli masz tylko tyle czasu, wtedy należy mieć nadzieję, że masz bogatego klienta.

Dla bogatego klienta, przesuwasz suwak maksymalnie w prawo i już nigdy nie martwisz się o wydajność. Tacy klienci, to niestety miejska legenda.

Większość klientów patrzy uważnie, ile chmura kosztuje i czy to się opłaca.

Jeżeli szukasz argumentów, jak rozmawiać o chmurze, zapraszam.

Dzisiaj o tej jasnej stronie chmury, na przykładzie Azure.

Read More

Dobre praktyki SQL: select * w produkcyjnym kodzie?

Jakie są dobre praktyki SQL? Co jest ważne, gdy zaczynasz pisać kod SQL?

Wyobraź sobie swoje pierwsze zapytanie zapytanie SQL albo pierwszy kod który ujrzy produkcyjne światło:

  • Jako świeżo mianowany data engineer: Na potrzeby projektu data.
  • Na potrzeby testowania i sprawdzania jakości danych.
  • Na potrzeby analizy i przygotowywania wymagań dla nowych zmian.
  • Niektóre dobre praktyki, na które warto zwrócić uwagę na początku. Poznanie ich pozwoli Ci pisać lepszy i bardziej odporny na zmiany kod. Będzie on też lepiej przystosowany do późniejszych zmian albo udostępnienia członkom zespołu.

  • SELECT * – czy to na pewno dobry pomysł
  • Aliasy – jak, kiedy dlaczego
  • Read More

    Dobre praktyki SQL: złączenia INNER JOIN czy w klauzuli WHERE?

    Problem: Jak połączyć dwie tabele w SQL’u? Ma to być złączenie równościowe (INNER JOIN). Tylko rekordy, które spełniają warunek złączenia mają być wybrane. Nic więcej, nic mniej.

    Jak zapisać złączenie między nimi? Jaka jest dobra praktyka? Jak stworzyć kod, który będzie łatwy w utrzymaniu, rozbudowie i czytelny dla innych członków zespołu?

    Możliwości:
    1. Użyj klauzuli: INNER JOIN

    FROM dbo.Users usr
    INNER JOIN dbo.Posts post ON (post.OwnerUserId = usr.Id)

    2. Wymień tabele, które chcesz złączyć w zaraz za FROM i później wykonaj złączenia w WHERE

    FROM dbo.Users usr, dbo.Posts post
    WHERE post.OwnerUserId = usr.Id

    Rozwiązanie: Użyj INNER JOIN – składnia jest bardziej czytelna a kod będzie łatwiejszy w utrzymaniu i debugowaniu. Argumenty znajdziesz poniżej.

    Read More