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

Power BI audyt obszaru roboczego (workspace)

Power BI audyt

Wyobraź sobie, że tworzysz i rozwijasz raporty w Power BI. Przychodzisz do nowego projektu. Dostajesz pod opiekę kilka obszarów roboczych (workspace) w Power BI. Osoba, która do tej pory się tym zajmowała nie ma zbyt wiele czasu dla Ciebie.

Potrzebujesz sprawdzić jakie są źródła danych do raportów: Gdzie odwołujesz się do bazy danych, jakie tabele są wykorzystywane.

Albo:

Inżynierowie danych zapowiadają wielki re-design. Potrzebują, żebyś zrobił inwentaryzację i powiedział, jakich tabel używasz w raportach Power BI. Gdy masz jeden raport, nie stanowi to wielkiego problemu. Natomiast gdy masz tych raportów 15 to już nie chcesz robić tego zadania ręcznie. Przydałby się jakiś skrypt.

Albo:

Planowana jest migracja z SQL Servera na Databricks. Potrzebujesz sprawdzić w jakich raportach odwołujesz się do bazy danych. Musisz wylistować wszystkie tabele i najlepiej też kolumny z których korzystasz.

Jak zawsze najlepiej zrobić to automatycznie. Możesz zapytać ChatGPT jak rozwiąże ten problem albo poczytać niżej.

Zapraszam dalej pokaże Ci jak ja rozwiązałem ten problem.

Read More

SQL IN – dla dociekliwych

next level sql in

Wyrażenie IN w SQL’u pozwala uprościć przekazywanie do zapytania listy warunków.

Wyobraź sobie, że tabele z markami samochodów. Do głowy powinny Ci przyjść nazwy najbardziej popularnych producentów: Volvo, Tesla, Audi, Volkswagen, Ford, Toyota, Honda itd. Chciałbyś ograniczyć listę wyników tylko do trzech najbardziej popularnych w Polsce marek: Toyota, Volkswagen i Audi.

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

    Next Level SQL

    next level SQL

    Zdecydowałeś o podjęciu kroków zmierzających do nauki SQL’a, pora na ułożenie agendy.

    Naukę podzieliłbym na trzy segmenty. Podstawowy, środnio zaawansowany i zaawansowany.

    W zależności od Twojego stopnia zaawansowania, możesz przejść do odpowiedniego poziomu.

    Next Level SQL to odpowiedź na obecne potrzebny. Chcesz podnieść wiedzę dotyczącą SQL’a szybko albo odpowiedzieć na najbardziej palące problemy i przygotować się do rozmowy o pracę.

    Agenda jest szczególnie przydatna, jeżeli pracujesz na co dzień z danymi. Jesteś Testerem, Business Analitykiem, Data Scientistem. Albo zmierzasz wielkimi krokami w stronę Data Engineera lub Data Analysta,

    Daj mi proszę znać w komentarzu, czy którymś modułem jesteś szczególnie zainteresowany. Postaram się wtedy potraktować go priorytetowo.

    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

    How to delete small portion of data from BIG table?

    You have a big table. The biggest in your system.

    You may say big table, big fun but also in some situation a big challenge.

    The manager gives you a task:

  • Delete a small portion of data from this table. Only about 1% of rows need to be removed.
  • How would you approach this task?

    What query will you build? How would you minimize logical reads? Would you approach this task differently if it was a one time activity or task executed on a regular basis?

    Consider: is this table used exclusively used by you? Maybe in parallel, some other process execute inserts into this table?

    Continue reading to see how to delete data in batch on SQL Server.

    Read More

    How to remove duplicates using window function?

    Removing duplicates, is a challenging task.

    Sometimes you need something special. Using DISTINCT/ GROUP BY / UNION is not enough.

    You need to remove duplicates is some other way: using window function:

    You can do it using following query:

    WITH loc_dim AS (
    SELECT 
      ROW_NUMBER() OVER (PARTITION BY u.Location ORDER BY u.Id) AS RowNumber, u.Location
    FROM dbo.Users u
    )
    SELECT loc.Location FROM loc_dim loc
    WHERE loc.RowNumber = 1

    If you would like to see how input data looks like. What is the expected result. When this approach might not be a good idea. Please continue reading.

    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

    Co to jest CTE?

    Problem: Jak napisać zapytanie SQL w przejrzysty sposób. Będzie ono czytelne dla innych. Dodatkowo, gdy wrócisz do niego po kilku miesiącach też będzie dla Ciebie zrozumiałe.
    W przypadku zmiany wymagań da się łatwo dostosować do nowych potrzeb. Będzie łatwe w utrzymaniu i rozbudowie.

    Rozwiązanie: użyj Common Table Expressions (CTE), żeby napisać czytelny kod.

    Read More