Poddotazy

Data Manipulation in Snowflake

Jake Roach

Field Data Engineer

Co jsou poddotazy?

Poddotazy umožňují použít výsledek jednoho dotazu v jiném dotazu.

$$

  • Kombinace více dotazů
  • Důraz na čitelnost
  • Podpora modularity
  • Snazší manipulace s daty!

$$

FROM ( ... ) nebo WHERE ... IN ( ... )

Logický postup manipulace s daty čitelnějším a modulárním způsobem pomocí poddotazů

Data Manipulation in Snowflake

Poddotazy a FROM

SELECT
    ...
-- Načtení z dotazu, nikoli přímo z tabulky
FROM (

    -- Vytvoření výsledné sady pro
    -- použití hlavním dotazem
    SELECT 
        <fields>
    FROM <table>
    WHERE ...

);

Načítání dat z výsledku jiného dotazu místo přímého přístupu k tabulce.

$$

  • Oddělení manipulace od analýzy
  • Dotazy jsou snazší ke čtení a pochopení
  • Umožňuje „přenositelnost" a snadné změny
  • JOIN, WHERE atd.
Data Manipulation in Snowflake

Před poddotazem

SELECT
    month_num,
    -- windchill - temperature je použito dvakrát. Co když se změní?
    AVG(windchill - temperature) AS avg_differential
    MIN(windchill - temperature) AS most_differential
FROM weather
WHERE 
    -- Filtrování a agregace probíhají ve stejném dotazu
    season = 'Winter' AND
    temperature < 32
GROUP BY month_num;
Data Manipulation in Snowflake

Po poddotazu

-- Nejprve poddotaz, pak agregace

SELECT month_num, AVG(differential) AS avg_differential MIN(differential) AS most_differential FROM (
SELECT month_num, windchill - temperature AS differential FROM weather WHERE season = 'Winter' AND temperature < 32
) GROUP BY month_num;
          | month_num | differential |
          | --------- | ------------ |
          |     12    |      -12     |
          |     1     |      -3      |
          |     1     |       0      |
          |     2     |      -7      |
| month_num | avg_differential | most_differential |
| --------- | ---------------- | ----------------- |
|     12    |       -5.77      |        -14        |
|     1     |       -1.91      |        -8         |
|     2     |       -8.13      |        -22        |

Analýzu je po vyčištění dat snadné pochopit i upravit.

Data Manipulation in Snowflake

WHERE ... IN ( ... )

...

-- Filtrování záznamů podle hodnoty v
-- výsledné sadě poddotazu
WHERE <field> IN (

    SELECT <other-field> FROM ... 

);

Vytvoří malou výslednou sadu pro transformaci, filtrování nebo manipulaci s daty.

$$

  • Filtrování záznamů pomocí IN na nekonstantní sadu výsledků
  • Lze použít na jiných místech dotazu
  • AVG, MAX, MIN atd.
Data Manipulation in Snowflake

WHERE ... IN( ... )

SELECT
    todays_date,
    temperature,
    status
FROM weather
WHERE todays_date IN (  -- Filtrování podle všech domácích zápasů, které byly vyhráné

    SELECT
        game_date
    FROM game_schedule
    WHERE stadium = 'Home' AND did_win = TRUE

);
Data Manipulation in Snowflake

WHERE ... IN ( ... )

Výsledná sada dotazu využívajícího poddotaz pro nalezení dat o počasí při domácích zápasech

Data Manipulation in Snowflake

Pojďme si procvičit!

Data Manipulation in Snowflake

Preparing Video For Download...