Databricks: Jak ustawić własną wartość dla kolumny identity?

Tło wydarzeń:

Masz tabelę stworzoną w Databricks. Klucz główny ustawiony jest jako kolumna identity. Dzięki temu masz obsłużone wstawianie unikalnych wartości. Nie musisz też tego robić samodzielnie, co tworzy miejsce na pominięcie czegoś. Jednak pojawia się wyzwanie. Twoja „sekwencja” zaczynała wstawianie danych od jedności a teraz chciałbyś wstawić singletony (-1, -2).

Problem:
Chciałbyś wstawić singletony do tabeli, gdzie jedna z kolumn jest typu Identity. W jaki sposób wstawić do niej oczekiwane wartości?

Rozwiązanie:
Zdefiniuj kolumnę klucza głównego jako:

generated by default as identity

Ale uważaj, jest jeden przypadek, gdy tak zdefiniowana kolumna może sprawić problemy.

Read More

Jaki jest rzeczywisty rozmiar pliku w Databricks?

Problem:
Czy Optimize automatycznie usuwa stare pliki? Czy one są ciągle dostępne? Czy po uruchomieniu Optimize na tabeli, liczba wykorzystywanego miejsca na Storage Account będzie mniejsza czy większa?

Po wykonaniu polecenia Optimize, Databricks pokazuje, że tabela jest reprezentowana przez mniejszą liczbę plików, natomiast na Storage Account liczba plików wzrosła. Jak to rozumieć?

Databricks pokazuje rozmiar tabeli / pliku, który nie jest zgodny z tym co widać na Azure Storage account. Która wartość jest prawidłowa? Jak z poziomu Databricks sprawdzić rozmiar pliku?

Rozwiązanie:
Z poziomu Databricks uruchom polecenie:

dbutils.fs.ls(file_path)

Wtedy zobaczysz ile rzeczywiście pliki zajmują. Jeżeli chcesz usunąć niepotrzebne pliki użyj polecenia Vacuum. Tylko pamiętaj, że domyślnie Vacuum, pozostawia na file systemie pliki stworzone w ciągu ostatnich 7 dni.

Read More

Databricks explode czyli: jak wygenerować dodatkowe wiersze?

Problem:

Wygenerować dodatkowe wiersze w tabeli na podstawie wartości liczbowej. Wartość liczbowa określa ile wierszy ma być wygenerowanych. Wartość liczbowa zawsze istnieje i przyjmuje wartości od 1 do 10. Dla 1 mają nie być generowane nowe wiersze. Dla 2 mają zostać wygenerowane dwa wiersze, dla trójki trzy wiersze itd.

Rozwiązanie:

Użycie funkcji explode. Przyjmuje ona jako argument tablicę albo mapę. W naszym przypadku stworzymy listę. Będzie ona miała wartości od 1 do n. Gdzie n będzie wartością liczbową z tabeli. Do wygenerowania listy wartości użyjemy funkcji sequence.
Pseudo kod do rozwiązania będzie wyglądał w ten sposób:

explode(sequence(1, quantity, 1))

Read More

Databricks Schema Evolution

Databricks schema evolution.

Problem: System źródłowy zmienia się dynamicznie, często pojawiają się nowe kolumny. Mamy dostosować się do zmian i nowe kolumny w źródle, mają pojawić się automatycznie w bronze layer.

Rozwiązanie: Użyj schema evolution, dzięki temu nowe kolumny będą w sposób automatyczny dodawane do Lake House. Włączymy tą funkcjonalność na poziomie clustra, żeby ułatwić obłsugę schema evolution w SQL’u.

Read More

Databricks: IllegalStateException

Databricks: IllegalStateException

Problem:

Odpytując tabelę w Databricks dostajesz błąd

Error in SQL statement: IllegalStateException: Couldn’t find description#1350 in [id#1348,name#1349]
com.databricks.backend.common.rpc.SparkDriverExceptions$SQLExecutionException: java.lang.IllegalStateException: Couldn’t find description#1350 in [id#1348,name#1349]

Rozwiązanie:

Jedna z kolumn, które odpytujesz ma typ void. Dwie możliwości, naprawy:
1. Unikać w zapytaniu kolumn, które mają typ void i wybierać w zapytaniu tylko te kolumny, który mają zdefiniowany typ inny niż void.
2. Zdefiniować tabelę na nowo i zamiast typu void wstawić oczekiwany typ.

Pierwsza z propozycji jest tymczasowa i nie rozwiązuje problemu tylko umożliwia jego pominięcie. Druga propozycja rozwiązuje problem i to jest rekomendowane rozwiązanie.

Read More

Jak połączyć się z Databricks do SQL Servera?

Jak połączyć się z Databricks to Azure SQL Server?

Problem:

Wykonanie połączenia między Databricks i bazą danych SQL Servera w chmurze Azure.

Rozwiązanie

Co będzie potrzebne?

1. Databricks 😉
2. Azure SQL Server utworzony w Azure Portal
3. Otwarte połączenia sieciowe – Databricks i SQL Server mają mieć możliwość komunikacji. Jeżeli masz problemy na tym poziomie, to niestety nie będzie przedmiotem tego wpisu.
4. Service principal – żeby połączyć się z Databricks do SQL Servera w bezpieczny i prosty sposób
5. Key Vault – do przechowywania sekretów
6. Biblioteki Python – biblioteka do wykonania połączenia JDBC i do używania modułu Azure Identity

Wszystko gotowe? Zaczynamy!

Read More

Co to jest ELT?

co to jest ETL

Co to jest ETL? To przeniesienie danych z jednego miejsca do drugiego i nadanie im oczekiwanej struktury. O ETL’u mówimy w kontekście przetwarzania zbiorów danych i budowaniu hurtowni danych lub data lake.

ETL służy do integracji i transformacji danych.

Wysoko poziomowo:
Na wejściu masz dane.
Przekształcasz je.
Zapisujesz.

Wynikiem ETL’a są przekształcone dane.

Po co jest ETL? Na przykład, żeby pobrać dane z systemu transakcyjnego i zapisać w hurtowni danych i potem stworzyć na podstawie tych danych raport. Pobierasz dane o zamówienia i klientach. Tworzysz zestawienie sprzedaży klienta. Dane do raportu aktualizujesz codziennie

Dodając więcej kontekstu:
Wynikiem ETL są uporządkowane dane. Mogą tworzyć wymiar lub tabelę faktów. Połączenie wymiarów i faktów tworzy większą strukturę: hurtownia danych.

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

    Czym zajmuje się Data Engineer i Data Analyst?

    czym zajmuje się data engineer

    W dużej organizacji systemów przechowujących dane jest wiele.

    Użytkowników korzystających z tych systemów jest jeszcze więcej.

    Użytkownicy mają wiele potrzeb i problemów, które dane mogą rozwiązać.

    Ale tutaj uwaga. Nie patrz na dane pod kątem jednego systemu.

    On znajdują się w wielu systemach i dopiero, gdy uzupełnimy jedne dane drugimi możemy uzyskać pełniejszy obraz.

    Jeden system prezentuje wąski wycinek rzeczywistości – możesz powiedzieć jeden piksel.

    Bardziej to zaciemnia, niż umożliwia na odpowiedź na kluczowe pytania. Potrzebujesz zobaczyć szerszy kontekst i zobaczyć dane i systemy holistycznie.

    Do skomplikowanej pracy z danymi do ich integracji i potem analizy, odpowiedzi na kluczowe pytania, potrzebni są specjaliści.

    I to właśnie o bohaterowie dzisiejszego odcinka:

    Data Engineer i Data Analyst, tworzą pełniejszy obraz świata.

    Czym zajmuje się Data Engineer?

    Read More

    4 ways to improve Impala performance

    impala performance

    Useful Impala commands that you can use to improve queries performance are:

    COMPUTE STATS

    SET MEM_LIMIT

    CREATING TEMP TABLE

    Those statements will make your code smarter.

    Performance will be greater and your managers, users and DB’s will be happy to work with you.

    INSERT OVERWRITE – will make your life much easier when handling deletes.

    Continue reading to know when it is good to apply those statements.

    Read More