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 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: Porównanie joba z obszarem roboczym

Problem

W środowisku opartym o Databricks stworzone zostało wiele notebooków. Cześć z nich została umieszczona w jobach (przepływach) a niektóre niestety pominięte. Chciałbyś je znaleźć i dodać do ładowania.

Potrzebujesz sprawdzić, które z notebooków zostały pominięte. Masz też podejrzenie, że w niektórych jobach zostały umieszczone notebooki, które: zmieniły nazwy albo zostały usunięte. Pora zrobić porządek!

Rozwiązanie

Użyj databriks rest API.

Dzięki niemu wylistujesz wszystkie notebooki w obszarze roboczym

Pobierając definicję joba sprawdzisz, jaki notebook został dodany w poszczególnych zadaniach.

Read More

Databricks: Jak pobrać definicję tabel i widoków?

Problem
Przeprowadzasz audyt istniejącego rozwiązania zbudowanego w oparciu o Databricks i Sparka.
Dla potrzeb budowy nowego modułu potrzebujesz sprawdzić, gdzie w widokach jest odwołanie do tabeli, którą będziesz zmieniał. Masz nieodparte wrażenie, że development został wykonany w sposób niechlujny i w notebookach nie ma wszystkiego. Część została zrobiona i potem zapomniana.
Potrzebujesz wydobyć definicję tabel i widoków zapisaną w hive metastore.

Rozwiązanie
Użyj polecenia

SHOW CREATE TABLE

Generuje ono skrypt SQL z definicją tabeli lub widoku.
Potrzeba trochę ulepszyć tą metodę. Ona zwraca definicję dla jednej tabeli i widoku. W naszej bazie jest tych tabel i widoków 100+.
Wykorzystamy SHOW VIEWS i SHOW TABLE i zautomatyzujemy sobie pracę. Na koniec zapiszemy wszystko do tabeli.

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

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

[Python] Jak wygenerować ładowanie (job) w Databricks używając REST API?

Jak wygenerować ładowanie (job) w Databricks używając REST API?

Problem:

Ładujesz warstwę brązową (bronze layer) w Databricks. Masz utworzone notebooki i teraz chciałbyś utworzyć ich ładowanie (job). Nie jest dla Ciebie istotna kolejność ładowania. Ważne jest tylko wygenerowanie workflow.

Rozwiązanie:

1. Utwórz job ładujący dane.
2. Zautomatyzuj tworzenie ładowania – wykorzystamy w tym celu Databricks REST API.

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

Databricks – User Table Columns

databricks user table columns

Databricks – User Table Columns?

Przenosisz się ze świata baz danych do świata Databricksów?

Zmieniono nazwę Twojego stanowiska na Data Engineer i będziesz teraz pracował w Databricks?

W świecie baz danych przyzwyczaiłeś się zapewne do prostego i intuicyjnego dostępu do metadanych. Możliwe, że używałeś ich, żeby zautomatyzować pracę lub wykryć w prosty sposób, gdzie trzeba przeprowadzić zmianę.

Świat Databricks i Hive metastore to trochę inne doświadczenia.

Mówiąc łagodnie.

Patrząc co jest tam dostępne brakuje mi czegoś podobnego do Oraclowego all_tab_columns (user_tab_columns) albo SQL Serverowego Information_Schema.Columns.

Zróbmy więc go sami wykorzystując możliwości jakie daje Databricks.

Read More