Sottoquery

Manipolazione dei dati in Snowflake

Jake Roach

Field Data Engineer

Che cosa sono le sottoquery?

Le sottoquery permettono di usare il risultato di una query dentro un’altra.

$$

  • Combina più query
  • Migliora la leggibilità
  • Favorisce la modularità
  • Facilita la manipolazione dei dati

$$

FROM ( ... ) o WHERE ... IN ( ... )

Processo logico per manipolare i dati in modo più leggibile e modulare con le sottoquery

Manipolazione dei dati in Snowflake

Sottoquery e FROM

SELECT
    ...
-- Prendi dalla query, non da una tabella
FROM (

    -- Crea un result set che sarà
    -- usato dalla query principale
    SELECT 
        <fields>
    FROM <table>
    WHERE ...

);

Recupera dati dal risultato di un’altra query invece che direttamente da una tabella.

$$

  • Separa manipolazione e analisi
  • Rende le query più leggibili e comprensibili
  • Consente “portabilità” e modifiche più facili
  • JOIN, WHERE, ecc.
Manipolazione dei dati in Snowflake

Prima di una sottoquery

SELECT
    month_num,
    -- windchill - temperature va usato due volte qui. E se cambiasse?
    AVG(windchill - temperature) AS avg_differential
    MIN(windchill - temperature) AS most_differential
FROM weather
WHERE 
    -- Il filtraggio avviene nella stessa query di aggregazione/analisi
    season = 'Winter' AND
    temperature < 32
GROUP BY month_num;
Manipolazione dei dati in Snowflake

Dopo una sottoquery

-- Inizia con la sottoquery, poi aggrega

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        |

Una volta puliti i dati, l’analisi è facile da capire e modificare.

Manipolazione dei dati in Snowflake

WHERE ... IN ( ... )

...

-- Filtra per record con un valore
-- presente nel risultato della sottoquery
WHERE <field> IN (

    SELECT <other-field> FROM ... 

);

Crea un piccolo result set da usare per trasformare, filtrare o manipolare i dati.

$$

  • Filtra record IN un set di risultati non costante
  • Usabile in altri punti della query
  • AVG, MAX, MIN, ecc.
Manipolazione dei dati in Snowflake

WHERE ... IN( ... )

SELECT
    todays_date,
    temperature,
    status
FROM weather
WHERE todays_date IN (  -- Filtra tutti i giorni con partite in casa vinte

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

);
Manipolazione dei dati in Snowflake

WHERE ... IN ( ... )

Result set di una query che usa una sottoquery per trovare i dati meteo per ogni partita in casa

Manipolazione dei dati in Snowflake

Passons à la pratique !

Manipolazione dei dati in Snowflake

Preparing Video For Download...