Snowflake SQL – przydatne zapytania i triki dla analityków

Poznaj praktyczne zapytania SQL i techniki analityczne w Snowflake ⛅️ – od CTE, funkcji okna, pivotów po optymalizację zapytań.
18 kwietnia 2025
blog
Poziom: Średnio zaawansowany

Artykuł przeznaczony dla analityków danych i osób znających podstawy SQL, które chcą rozwijać umiejętności analizy i optymalizacji zapytań w Snowflake.

Z tego artykułu dowiesz się

  • Jakie są kluczowe możliwości Snowflake jako platformy analitycznej i jak wspiera pracę analityków danych?
  • Jak wykorzystywać CTE, funkcje okna oraz analizę czasową do tworzenia czytelnych i zaawansowanych zapytań SQL w Snowflake?
  • Jak przekształcać dane za pomocą pivot/unpivot oraz jakie dobre praktyki stosować, aby optymalizować wydajność i koszty zapytań w Snowflake?

Wprowadzenie do analizy danych w Snowflake

Snowflake to nowoczesna, skalowalna platforma analityczna typu data warehouse-as-a-service, która pozwala na szybkie i efektywne przetwarzanie danych przy minimalnym nakładzie administracyjnym. Dzięki architekturze opartej na chmurze, Snowflake umożliwia jednoczesne wykonywanie wielu zapytań przez różnych użytkowników bez wpływu na wydajność, co czyni go atrakcyjnym rozwiązaniem dla analityków danych.

Analiza danych w Snowflake opiera się na języku SQL, wzbogaconym o szereg funkcji i możliwości, które pozwalają na zaawansowaną eksplorację danych, ich transformację oraz agregację w czasie rzeczywistym. Narzędzie to obsługuje zarówno tradycyjne zapytania analityczne, jak i bardziej złożone operacje, takie jak praca z danymi czasowymi, analiza w oknach danych, przestawianie struktury tabel przy użyciu pivotów, czy dynamiczne tworzenie widoków tymczasowych z wykorzystaniem CTE (Common Table Expressions).

Do podstawowych zalet Snowflake należą:

  • Elastyczność skalowania – możliwość automatycznego dostosowania mocy obliczeniowej do potrzeb użytkownika.
  • Wsparcie dla półstrukturalnych danych – takich jak JSON, XML czy Avro, które można analizować bez konieczności wcześniejszego przekształcania.
  • Oddzielenie warstwy przechowywania od warstwy obliczeniowej – co umożliwia równoległe obciążenia bez konfliktów.
  • Bezpieczeństwo i zgodność – wbudowane mechanizmy kontroli dostępu i audytu danych.

Dzięki tym cechom Snowflake zyskuje coraz większą popularność wśród zespołów analitycznych i firm, które potrzebują szybko dostarczać wnioski z danych bez konieczności zarządzania infrastrukturą serwerową. Dobrze zaprojektowane zapytania SQL w Snowflake pozwalają nie tylko odpowiedzieć na bieżące pytania biznesowe, ale też tworzyć bardziej złożone modele danych wspierające decyzje strategiczne.

Common Table Expressions (CTE) – struktura i zastosowania

Common Table Expressions, czyli tzw. CTE, to jedno z bardziej przydatnych narzędzi w warsztacie analityka danych pracującego z SQL-em w Snowflake. Umożliwiają one tworzenie tymczasowych tabel w obrębie jednego zapytania, co znacząco poprawia czytelność i modularność kodu SQL.

CTE są definiowane z użyciem słowa kluczowego WITH, po którym następuje alias (czyli nazwa tymczasowej tabeli) oraz zapytanie, które generuje dane. Taka konstrukcja pozwala na logiczne rozdzielenie różnych etapów przetwarzania danych oraz ponowne wykorzystywanie wyników pośrednich bez konieczności tworzenia tymczasowych tabel w bazie danych.

W praktyce CTE oferują wiele korzyści:

  • Poprawa czytelności zapytań – kod SQL staje się bardziej zrozumiały, szczególnie przy złożonych analizach z wieloma etapami transformacji danych.
  • Modularność kodu – można oddzielić kolejne etapy przetwarzania danych, co ułatwia ich testowanie i modyfikację.
  • Unikanie powielania tego samego kodu – dzięki CTE można zdefiniować dane raz i wielokrotnie się do nich odwoływać.
  • Wsparcie dla rekurencji – Snowflake obsługuje również rekurencyjne CTE, co pozwala na analizę struktur hierarchicznych, takich jak drzewa czy grafy.

Oto podstawowa składnia CTE:

WITH tymczasowa_tabela AS (
    SELECT kolumna1, kolumna2
    FROM oryginalna_tabela
    WHERE warunek
)
SELECT *
FROM tymczasowa_tabela;

CTE są szczególnie użyteczne w raportowaniu, tworzeniu wskaźników KPI, analizie kohortowej czy przygotowywaniu danych wejściowych do dalszych transformacji. Choć przypominają podzapytania, oferują większą przejrzystość i elastyczność, co czyni je doskonałym wyborem w codziennej pracy analityka danych w środowisku Snowflake.

Analiza czasowa – funkcje i techniki pracy z danymi czasowymi

Analiza danych w wymiarze czasu to jeden z kluczowych aspektów pracy analityka. Snowflake SQL oferuje szeroki wachlarz funkcji, które umożliwiają efektywne manipulowanie danymi czasowymi, agregację w przedziałach czasowych oraz wyciąganie istotnych wniosków z danych zorganizowanych chronologicznie.

W pracy z danymi czasowymi w Snowflake najczęściej wykorzystuje się:

  • Funkcje dat i czasu – do konwersji, ekstrakcji, formatowania i różnicowania wartości czasowych.
  • Funkcje agregujące z grupowaniem czasowym – do analizowania danych w oknach czasowych (np. dziennych, miesięcznych).
  • Porównania i filtrowanie po czasie – do selekcji danych z konkretnego okresu lub porównywania okresów między sobą.
  • Obsługę stref czasowych – w tym konwersję między strefami oraz uwzględnianie czasu lokalnego użytkownika.

Poniższa tabela przedstawia przykładowe funkcje czasowe w Snowflake i ich zastosowanie:

Funkcja Opis Przykład
DATE_TRUNC Obcina datę do określonej jednostki czasu (np. miesiąca, tygodnia) DATE_TRUNC('MONTH', created_at)
DATEDIFF Oblicza różnicę między dwiema datami w określonych jednostkach DATEDIFF('day', start_date, end_date)
TO_TIMESTAMP Konwertuje tekst lub liczbę na format timestamp TO_TIMESTAMP('2024-06-01 12:00:00')
EXTRACT Wyciąga część daty, np. rok, miesiąc, dzień EXTRACT(YEAR FROM order_date)
CONVERT_TIMEZONE Zmienia strefę czasową wartości timestamp CONVERT_TIMEZONE('UTC', 'Europe/Warsaw', event_time)

Snowflake umożliwia również wygodne grupowanie danych po czasie, co jest przydatne m.in. w raportach miesięcznych, trendach tygodniowych czy analizach sezonowych. Przykładowe zapytanie agregujące ilość zamówień na przestrzeni miesięcy:

SELECT 
  DATE_TRUNC('MONTH', order_date) AS month,
  COUNT(*) AS total_orders
FROM orders
GROUP BY 1
ORDER BY 1;

Praca z danymi czasowymi w Snowflake wymaga także uwzględnienia stref czasowych, szczególnie w środowiskach globalnych. Najlepszą praktyką jest przechowywanie danych w formacie UTC i konwersja do lokalnej strefy tylko na potrzeby prezentacji. Jeśli chcesz pogłębić praktyczne umiejętności w tym zakresie lub poznać więcej przykładów analizy czasowej, sprawdź nasz Kurs Snowflake Essentials.

💡 Pro tip: Przechowuj czasy w UTC i filtruj półotwartymi przedziałami start <= ts < end, aby uniknąć problemów ze zmianą czasu i włącznością końca. Używaj DATE_TRUNC lub EXTRACT w selekcji, a w WHERE operuj na surowych kolumnach lub preobliczonych granicach, by zachować pruning mikro-partitionów.

Funkcje okna analitycznego – analiza w kontekście zbioru danych

Funkcje okna (ang. window functions) w Snowflake SQL to zaawansowane narzędzie analityczne, które pozwala na wykonywanie obliczeń w obrębie grup danych bez konieczności ich agregowania. W przeciwieństwie do funkcji agregujących, które redukują liczbę wierszy, funkcje okna pozwalają zachować każdy wiersz, jednocześnie dodając do niego wartości obliczone na podstawie określonego okna danych.

Najczęstsze zastosowania funkcji okna obejmują:

  • Obliczanie skumulowanych sum i średnich
  • Wyznaczanie pozycji wiersza w ramach grupy (np. ranking, numer porządkowy)
  • Porównywanie wartości z poprzednim lub kolejnym wierszem (np. różnica dzień do dnia)
  • Agregacje w ramach części zbioru danych, z zachowaniem pełnej granularności

Przykład prostego użycia funkcji okna:

SELECT
  customer_id,
  order_date,
  amount,
  SUM(amount) OVER (PARTITION BY customer_id ORDER BY order_date) AS cumulative_amount
FROM orders;

Powyższe zapytanie oblicza skumulowaną wartość zamówień dla każdego klienta, nie usuwając przy tym szczegółowych danych z poziomu pojedynczego zamówienia. Poprzez zastosowanie klauzul PARTITION BY oraz ORDER BY możemy precyzyjnie określić zakres (okno), w ramach którego funkcja operuje.

Poniższa tabela ilustruje różnicę między funkcją agregującą a funkcją okna:

Rodzaj funkcji Redukcja liczby wierszy Przykład
Agregująca Tak SELECT customer_id, SUM(amount) FROM orders GROUP BY customer_id
Okna analitycznego Nie SELECT customer_id, amount, SUM(amount) OVER (PARTITION BY customer_id) FROM orders

Dzięki funkcjom okna analitycznego analitycy w Snowflake mogą tworzyć bardziej elastyczne i wielowymiarowe raporty, identyfikować trendy czy porównywać wartości bez utraty kontekstu danych źródłowych.

💡 Pro tip: Jawnie ustawiaj ramę okna (ROWS BETWEEN …) zamiast polegać na domyślnym RANGE, by uniknąć nieoczekiwanych wyników dla liczb i timestampów. Minimalizuj PARTITION BY i ORDER BY do niezbędnych kolumn oraz dodawaj ORDER BY dla deterministycznych rankingów.

Pivoty i unpivoty – manipulacja układem danych

Jednym z kluczowych aspektów analizy danych jest umiejętność odpowiedniego przekształcania ich struktury. W Snowflake SQL, dwie techniki szczególnie przydatne w tym kontekście to pivot oraz unpivot. Obie operacje pozwalają na reorganizację danych tabelarycznych, co ułatwia analizę i prezentację wyników.

Pivot umożliwia zamianę wartości z kolumny na nagłówki kolumn – ułatwia to porównania i agregacje danych w układzie szerokim. Jest szczególnie użyteczny, gdy chcemy przedstawić dane zorientowane na kategorie, takie jak miesiące, regiony czy produkty.

Unpivot działa odwrotnie – przekształca dane z szerokiego formatu (kolumnowego) w format długi (wierszowy), co pozwala zamienić wiele kolumn w pary klucz-wartość. To przydatne, gdy potrzebujemy uprościć analizę lub przygotować dane do dalszego przetwarzania.

Operacja Wejście Wynik Zastosowanie
Pivot Wiersze z kategoriami i wartościami Agregowane dane w postaci kolumn Porównania między kategoriami
Unpivot Dane w wielu kolumnach Wiersze z kolumnami typu klucz-wartość Przygotowanie danych do agregacji lub filtrowania

Poniżej przykładowy kod pokazujący podstawowe użycie każdej z technik:

Pivot:

SELECT *
FROM (
  SELECT department, month, revenue
  FROM sales
)
PIVOT(
  SUM(revenue) FOR month IN ('Jan', 'Feb', 'Mar')
);

Unpivot:

SELECT region, metric, value
FROM sales_summary
UNPIVOT(
  value FOR metric IN (revenue, profit, cost)
);

Dzięki pivotom i unpivotom analitycy mogą elastycznie dostosowywać strukturę danych do potrzeb konkretnej analizy. Obie techniki zwiększają przejrzystość raportów i pozwalają wydobyć nowe wnioski z już istniejących danych. Jeśli chcesz pogłębić swoją wiedzę i nauczyć się jeszcze więcej praktycznych zastosowań, sprawdź nasze szkolenie Snowflake SQL dla analityków, a także zapoznaj się z Kursem SQL średniozaawansowanym, który pomoże Ci jeszcze lepiej wykorzystać potencjał transformacji danych w praktyce.

Praktyczne zapytania SQL dla analityków

Snowflake SQL oferuje wiele elastycznych rozwiązań ułatwiających analizę danych w codziennej pracy analityka. Poniżej przedstawiamy kilka typowych przypadków użycia wraz z krótkimi przykładami zapytań, które mogą stanowić punkt wyjścia do budowania bardziej zaawansowanych analiz.

1. Filtrowanie i sortowanie danych

Podstawą większości analiz jest umiejętne filtrowanie i prezentowanie danych. Snowflake SQL pozwala na szybkie zapytania z wykorzystaniem klauzul WHERE, ORDER BY, LIMIT:

SELECT customer_id, total_amount
FROM orders
WHERE order_status = 'Shipped'
ORDER BY total_amount DESC
LIMIT 10;

2. Grupowanie i agregowanie danych

Często konieczne jest podsumowanie danych według określonych kryteriów. Snowflake wspiera standardowe funkcje agregujące takie jak SUM, COUNT, AVG:

SELECT region, COUNT(*) AS order_count, SUM(total_amount) AS revenue
FROM orders
GROUP BY region;

3. Porównania okresowe

Analiza okresowa to jedno z najczęstszych zadań analitycznych. Dzięki elastyczności Snowflake można porównywać dane miesiąc do miesiąca czy rok do roku przy użyciu prostych wyrażeń czasowych:

SELECT DATE_TRUNC('month', order_date) AS month,
       SUM(total_amount) AS revenue
FROM orders
GROUP BY month
ORDER BY month;

4. Identyfikacja wartości odstających

Do wykrywania anomalii w danych analitycy często wykorzystują warunki logiczne i progi decyzyjne:

SELECT customer_id, total_amount
FROM orders
WHERE total_amount > 10000;

5. Łączenie danych z wielu tabel

Snowflake obsługuje rozbudowane operacje JOIN, które pozwalają na zestawienie danych z różnych źródeł w jednym widoku:

SELECT o.order_id, c.customer_name, o.total_amount
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id;

6. Przegląd często wykorzystywanych zapytań

Typ zapytania Cel Przykład użycia
Agregacja Podsumowanie danych SUM, COUNT, AVG z GROUP BY
Porównanie czasowe Śledzenie trendów DATE_TRUNC, EXTRACT
Filtrowanie Wybór interesujących danych WHERE z warunkami logicznymi
Łączenie danych Kompletna analiza JOIN między tabelami

Umiejętne wykorzystanie tych podstawowych zapytań stanowi solidną podstawę do dalszej analizy danych w Snowflake. W połączeniu z bardziej zaawansowanymi technikami, mogą one znacznie usprawnić codzienną pracę analityka i przyspieszyć proces podejmowania decyzji biznesowych.

Optymalizacja zapytań i dobre praktyki w Snowflake

Wydajność zapytań w Snowflake odgrywa kluczową rolę w codziennej pracy analityka danych. Chociaż Snowflake zapewnia wysoką skalowalność i elastyczność dzięki swojej architekturze oddzielającej warstwę przechowywania danych od warstwy obliczeniowej, nieodpowiednia konstrukcja zapytania może prowadzić do niepotrzebnego wykorzystania zasobów i wydłużonego czasu przetwarzania.

Poniżej przedstawiamy kilka fundamentalnych zasad i dobrych praktyk, które warto stosować przy tworzeniu zapytań SQL w Snowflake:

  • Unikaj selekcji wszystkich kolumn (SELECT *) – Lepiej wybierać tylko te kolumny, które są potrzebne do analizy. Zmniejsza to ilość przesyłanych danych i poprawia czas działania zapytania.
  • Filtruj jak najwcześniej – Umieszczaj warunki WHERE na wczesnym etapie zapytania, aby ograniczyć przetwarzany zestaw danych już na początku.
  • Wykorzystuj clustering keys – W przypadku bardzo dużych tabel warto rozważyć utworzenie clustering keys, co może znacznie poprawić wydajność zapytań filtrujących po określonych kolumnach.
  • Przechowuj wyniki pośrednie w tymczasowych tabelach – Jeśli zapytanie jest bardzo złożone, warto podzielić je na mniejsze części i wykorzystać tymczasowe tabele do przechowywania wyników pośrednich.
  • Monitoruj i analizuj Query Profile – Snowflake udostępnia narzędzie pozwalające na podgląd planu wykonania zapytania. Analiza Query Profile pomaga zidentyfikować wąskie gardła i możliwości optymalizacji.
  • Wykorzystuj materialized views i result caching – Widoki materializowane mogą przechowywać wyniki często wykonywanych zapytań, a mechanizm cache'owania wyników pozwala na błyskawiczne zwracanie odpowiedzi bez ponownego przetwarzania danych.
  • Dobieraj odpowiednią wielkość virtual warehouse – Skalowanie zasobów obliczeniowych powinno być dostosowane do charakteru zapytania. Nie zawsze większy warehouse oznacza lepszą wydajność – czasami wystarczy lepiej zoptymalizowane zapytanie.

Stosowanie powyższych zasad pozwala nie tylko na przyspieszenie analiz, ale również na efektywniejsze wykorzystanie zasobów Snowflake, co przekłada się na niższe koszty działania środowiska analitycznego.

💡 Pro tip: Zacznij od ograniczenia danych: unikaj SELECT *, filtruj jak najwcześniej i analizuj Query Profile, aby wskazać skany i joiny do optymalizacji. Zanim powiększysz warehouse, rozważ materialized views, result caching i odpowiednie clustering keys dla najczęstszych filtrów.

Podsumowanie i dalsze kroki

Snowflake SQL to potężne narzędzie analityczne, które łączy skalowalność chmury z elastycznością języka SQL. Dla analityków oznacza to możliwość pracy z dużymi zbiorami danych przy zachowaniu prostoty składni i wysokiej wydajności. Snowflake oferuje bogaty zestaw funkcji, które wspierają zarówno eksplorację danych, jak i zaawansowaną analizę statystyczną oraz czasową.

Jednym z kluczowych atutów Snowflake jest jego architektura oddzielająca warstwę obliczeniową od warstwy przechowywania, co daje użytkownikowi pełną kontrolę nad kosztami i wydajnością. Dzięki temu analitycy mogą wykonywać złożone zapytania bez wpływu na innych użytkowników lub procesy.

W codziennej pracy analityka szczególnie przydatne okazują się zapytania wykorzystujące struktury CTE, funkcje analityczne (np. window functions), czy transformacje danych takie jak pivot i unpivot. Snowflake wspiera także zaawansowaną analizę czasową, co czyni go doskonałym rozwiązaniem dla raportowania i monitorowania danych w czasie rzeczywistym.

W kolejnych krokach warto poznać konkretne przykłady zapytań, które ułatwiają codzienną analizę danych, oraz dobre praktyki pozwalające optymalizować zapytania pod kątem wydajności i kosztów. Takie podejście pozwala nie tylko lepiej wykorzystać możliwości platformy, ale też tworzyć bardziej czytelny i skalowalny kod SQL.

icon

Formularz kontaktowyContact form

Imię *Name
NazwiskoSurname
Adres e-mail *E-mail address
Telefon *Phone number
UwagiComments