Not able to load Function App

Problem:

Rozwijasz projekt w Function App. Dostałeś do napisania funkcję w C#. Funkcja została napisana, przetestowana i wdrożona na produkcję. Jak to w życiu, pojawiają się zmiany wymagań do funkcji, które też rozwijasz wdrażasz i zamiast oczekiwanych zmian widzisz błąd:
„We are not able to load some functions in the list due to errors”.
Gdy oglądasz szczegóły błędu widzisz:
„The operation timed out and could not be completed”.
W kodzie praktycznie nic się nie zmieniło a aplikacji nie da się uruchomić i używać.
Do zrobienia builda i deploymentu używałem Azure Devops.

Rozwiązanie:

Jeżeli szukasz szybkiego rozwiązania problemu to zaraz Ci go podam. W moim przypadku problemem nie był kod, który zmieniłem, bo zmiana była wręcz kosmetyczna: dodanie jednego loggera do obsługi błędów.
Deployment poprzedniej wersji także sprawiał, że aplikacja znowu zaczynała działać.
Co w takim razie było źle? W Dev Ops pipelines wystarczyło ustawić, żeby czyścił katalog deploymentu.
Niejasne? Już tłumaczę.

Read More

Azure storage file datalake do pobierania plików?

Problem:

Masz dostępne Databricks, Pythona i Azure Storage Account. Potrzebujesz pobrać raport Power BI umieszczony na Azure Storage account przy pomocy Pythona.
Potem ten plik należy opublikować w serwisie Power BI.
Nie możesz tego zrobić przy użyciu Sparka, albo Pandas. To się nie uda i jednocześnie, to nie jest to zadanie.
Możesz instalować bilbioteki na clustrze. Najlepiej, żeby ich autorem był Microsoft.

Rozwiązanie:

Microsoft udostępnia bibliotekę: azure.storage.filedatalake przy pomocy której można przeczytać plik z landing zone w formacie binarnym a potem opublikować go w portalu Power BI.

Wystarczy z kontenera przeczytać plik. Ta zawartość zostanie wczytana w formacie binarnym:
file_content = file_container.download_file()

A potem opublikować go w Power BI portalu:
publish_powerbi_report(PBI_WORKSPACE_ID, PBI_REPORT_NAME, file_content)

Read More

Databricks: Jak pobrać pliki binarne z Azure Storage Account używając Pythona?

Problem:

Masz dostępne Databricks, Pythona i Azure Storage Account. Potrzebujesz pobrać plik z Azure Storage account przy pomocy Pythona w formacie binarnym. Jeżeli chcesz zrobić to przy użyciu Sparka, albo Pandas to nie jest to zadanie.
Dane masz pobrać z pliku binarnego.
Trzeba użyć modułów Pythona do wczytywania plików.
W dokumentacji piszą, że taka operacja jest „not supported”. (Stan na 15.10.2024)
Nie chcesz też robić „mount” zdalnego systemu plików. Taka operacja jest nie polecana przez Databricks.

Rozwiązanie:

W Databricks z Pythona NIE można czytać plików ze zdalnego systemu plików. Można za to czytać pliki z lokalnego file systemu. Obejście problemu przedstawionego powyżej to:
1. Przy użyciu dbutils.fs albo %fs skopiować pliki ze zdalnego filesystemu do lokalnego.
2. Przeczytać pliki z lokalnego systemu plików przy użyciu Pythona.
Skasować skopiowany plik z lokalnego filesystemu.

Read More

Streamlit: Jak edytować dane?

Problem:

Porównujesz dwa zbiory danych: przed i po migracji. Wkraczasz w fazę budowania zaufania i wiarygodności. Okazało się, że nie wszystkie dane są jednakowe. Niektóre wymagają dodatkowej analizy i poprawek, a niektóre wyglądają lepiej w zmigrowanym datasecie. Na tyle lepiej, że trzeba je przedstawić biznesowi i pokazać na przykładach, że po migracji wyniki są lepsze.
W jaki sposób opisać te dane?

Rozwiązanie:

Jednym z pomysłów na rozwiązanie może być Streamlit. Przy jego pomocy dodasz komentarze, które potem będą służyły jako:
1. Punkt do analizy i późniejszego ponownego sprawdzenia
2. Przedstawisz je biznesowi jako dowód na poprawę jakości danych.

Read More

Streamlit: Jak porównywać zmigrowane dane?

Problem

Migracja danych. Redesign. Duża zmiana w funkcjonalności.

Masz potrzebę porównania danych pomiędzy stanem obecnym a stanem po zmianie. Zmianę mogło wywołać jedno z powyższych zdarzeń ale cel pozostaje ten sam: porównać dane, udowodnić poprawność danych i zdobyć zaufanie biznesu.

W jaki sposób porównać dane, żeby mieć większą pewność, że stworzony produkt jest dobrej jakości? Chcesz też pokazać managerowi w jaki sposób może sam sprawdzić jakość danych, jeżeli oczywiście ma na to przestrzeń.

Rozwiązanie

Aplikacja napisana w streamlit w bajecznie łatwy sposób pozwala zwizualizować porównanie danych. Do tego wynik jest na tyle efektowny, że od razu zostaniesz pracownikiem miesiąca.

Jedna uwaga, tutaj skupiam się na porównaniu jednego unitu, jednostki, wiersza.

Co będzie potrzebne:
– Python 😉
– Streamlit
– Pandas
– Źródło danych

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

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 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