Subqueries

Manipulação de dados no Snowflake

Jake Roach

Field Data Engineer

O que são subqueries?

Subqueries permitem que o resultado de uma consulta seja usado por outra.

$$

  • Combine várias consultas
  • Foque na legibilidade
  • Permita modularidade
  • Facilite a manipulação de dados!

$$

FROM ( ... ) ou WHERE ... IN ( ... )

Processo lógico de manipular dados de forma mais legível e modular com subqueries

Manipulação de dados no Snowflake

Subqueries e FROM

SELECT
    ...
-- Pull from query, not from a table
FROM (

    -- Create a result set that will 
    -- be used by the main query
    SELECT 
        <fields>
    FROM <table>
    WHERE ...

);

Recupere dados do resultado de outra consulta em vez de buscar direto de uma tabela.

$$

  • Separe manipulação de análise
  • Deixa as consultas mais fáceis de ler e entender
  • Permite "portabilidade" e mudanças fáceis
  • JOIN, WHERE, etc.
Manipulação de dados no Snowflake

Antes de uma subquery

SELECT
    month_num,
    -- windchill - temperature has to be used twice here. What if this changes?
    AVG(windchill - temperature) AS avg_differential
    MIN(windchill - temperature) AS most_differential
FROM weather
WHERE 
    -- Filtering is taking place in the same query as aggregation/analysis
    season = 'Winter' AND
    temperature < 32
GROUP BY month_num;
Manipulação de dados no Snowflake

Depois de uma subquery

-- Start with the subquery, then aggregate

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        |

Fica fácil entender e ajustar a análise depois que os dados são limpos.

Manipulação de dados no Snowflake

WHERE ... IN ( ... )

...

-- Filter by records with a value in 
-- the subquery result set
WHERE <field> IN (

    SELECT <other-field> FROM ... 

);

Crie um pequeno conjunto de resultados para usar ao transformar, filtrar ou manipular dados.

$$

  • Filtre registros IN um conjunto de resultados não constante
  • Pode ser usado em outros pontos da consulta
  • AVG, MAX, MIN, etc.
Manipulação de dados no Snowflake

WHERE ... IN( ... )

SELECT
    todays_date,
    temperature,
    status
FROM weather
WHERE todays_date IN (  -- Filter by all days with home games that were won

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

);
Manipulação de dados no Snowflake

WHERE ... IN ( ... )

Conjunto de resultados de uma consulta usando subquery para achar dados de clima de cada jogo em casa

Manipulação de dados no Snowflake

Vamos praticar!

Manipulação de dados no Snowflake

Preparing Video For Download...