Manipularea datelor în Snowflake
Jake Roach
Field Data Engineer
Subinterogările permit utilizarea rezultatului unei interogări de către o altă interogare.
$$
$$
FROM ( ... ) sau WHERE ... IN ( ... )

SELECT
...
-- Preluare din interogare, nu dintr-un tabel
FROM (
-- Creați un set de rezultate care va
-- fi utilizat de interogarea principală
SELECT
<fields>
FROM <table>
WHERE ...
);
Preluați date din rezultatul altei interogări, nu direct dintr-un tabel.
$$
JOIN, WHERE, etc.SELECT
month_num,
-- windchill - temperature trebuie utilizat de două ori. Ce se întâmplă dacă se modifică?
AVG(windchill - temperature) AS avg_differential
MIN(windchill - temperature) AS most_differential
FROM weather
WHERE
-- Filtrarea are loc în aceeași interogare ca agregarea/analiza
season = 'Winter' AND
temperature < 32
GROUP BY month_num;
-- Începeți cu subinterogarea, apoi agregațiSELECT 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 |
Analiza este ușor de înțeles și modificat odată ce datele sunt curățate.
...
-- Filtrați înregistrările cu o valoare din
-- setul de rezultate al subinterogării
WHERE <field> IN (
SELECT <other-field> FROM ...
);
Creați un set mic de rezultate pentru transformarea, filtrarea sau manipularea datelor.
$$
IN un set de rezultate non-constantAVG, MAX, MIN, etc.SELECT
todays_date,
temperature,
status
FROM weather
WHERE todays_date IN ( -- Filtrați după zilele cu meciuri acasă câștigate
SELECT
game_date
FROM game_schedule
WHERE stadium = 'Home' AND did_win = TRUE
);

Manipularea datelor în Snowflake