Ostatnio dokonałem rekonesansu w kwestii pytań na “technicznej” części rozmowy rekrutacyjnej na stanowisko DE, DS, DA i ogólnie innych ról powiązanych z Big Data. Zaskoczeniem był fakt, że na rozmowach w polsce i za granicą mozemy zostać zapytani bardzo czesto o to samo! Naprawdę wiele pytań się powtarza i różnią się tylko treśćią samego pytania albo kontekstem natomiast sens pytania jest zasadniczo zachowany. Oczywiście lista zawiera pytania z jakimi zmieżyli się prawdziwi a nie wirtualni kandydaci. Poniżej lista (ciagle rozwijana!) pytań wraz z jednoznadniowymi odpowiedziami”
- Jakie są rodzaje JOIN w SQL?
- Co to jest NULL i jak go używać w SQL?
- Jak usunąć duplikaty z tabeli SQL?
- Jak usunąć duplikaty, ale pozostawić jeden wiersz?
- Jak napisać zapytanie, które zwraca produkty o sumarycznej kwocie sprzedaży powyżej x w roku danym roku?
- Czym różni się
DELETE
odTRUNCATE
? - Co to jest CTE (Common Table Expression) i jak działa?
- Jak w zwykłym zapytaniu SQL użyć zmiennej?
- Czym różni się
UNION
odUNION ALL
? - Jak działa LEFT JOIN?Co to jest Dynamic SQL (dyn SQL)?
- Co to jest kursor w SQL i kiedy należy go używać?
- Jakie są metody optymalizacji zapytań SQL poza użyciem kursora?
- Jakie narzędzia AWS wspierają ETL?
- Jak działa Amazon Redshift i jak się różni od PostgreSQL?
Rodzaje JOIN w SQL:
- INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN, CROSS JOIN.
NULL:
- Brak wartości w kolumnie, oznacza nieokreślone dane.
Usunięcie duplikatów z tabeli SQL:
- Użyj
DISTINCT
w zapytaniu:SELECT DISTINCT * FROM table;
.
Usunięcie duplikatów, pozostawiając jeden wiersz:
- Możesz użyć
ROW_NUMBER()
i usunąć wiersze z numerem większym niż 1DELETE FROM table WHERE id NOT IN (SELECT MIN(id) FROM table GROUP BY col1, col2);
Zapytanie dla sprzedaży powyżej x zł w danym roku:
SELECT ProductID, ProductName, SUM(Amount) AS TotalAmount
FROM Staging.Sales
WHERE DATEPART(YEAR, SaleDate) = 2023
GROUP BY ProductID, ProductName
HAVING SUM(Amount) > <value>;
Różnica między DELETE a TRUNCATE:
- DELETE usuwa wiersze z tabeli z możliwością cofnięcia, TRUNCATE usuwa wszystkie wiersze bez możliwości cofnięcia (szybsze).
CTE (Common Table Expression):
- Tymczasowy wynik zapytania, używany w dalszej części głównego zapytania.
Użycie zmiennej w zwykłym zapytaniu SQL:
- W PostgreSQL można użyć CTE lub zmiennych sesyjnych:
SET my_var = 100;
.
Różnica między UNION a UNION ALL:
- UNION usuwa duplikaty, UNION ALL zwraca wszystkie wiersze, w tym duplikaty.
LEFT JOIN:
- Zwraca wszystkie wiersze z lewej tabeli oraz dopasowane wiersze z prawej, jeśli brak dopasowania, wartości z prawej tabeli będą NULL.
Dynamic SQL:
- SQL generowany i wykonywany w czasie rzeczywistym w aplikacjach lub w blokach PL/pgSQL.
Kursor w SQL:
- Mechanizm pozwalający na iterację po wynikach zapytania, wiersz po wierszu.
Optymalizacja zapytań SQL poza użyciem kursora:
- Indeksy, ograniczenie ilości danych, optymalizacja JOIN, zapytania zbiorowe, zamiast kursorów.
Narzędzia AWS do ETL:
- AWS Glue, Amazon EMR, AWS Data Pipeline, AWS Lambda, Amazon Redshift.
Amazon Redshift vs PostgreSQL:
- Redshift: kolumnowa hurtownia danych, zoptymalizowana pod OLAP i Big Data. PostgreSQL: uniwersalna relacyjna baza danych, bardziej odpowiednia do OLTP i mniejszych aplikacji.