Subkueri

Manipulasi Data di Snowflake

Jake Roach

Field Data Engineer

Apa itu subkueri?

Subkueri memungkinkan hasil dari satu kueri dipakai oleh kueri lain.

$$

  • Gabungkan beberapa kueri
  • Fokus pada keterbacaan
  • Memungkinkan modularitas
  • Mempermudah manipulasi data

$$

FROM ( ... ) atau WHERE ... IN ( ... )

Proses logis memanipulasi data agar lebih mudah dibaca dan modular dengan subkueri

Manipulasi Data di Snowflake

Subkueri dan FROM

SELECT
    ...
-- Ambil dari kueri, bukan dari tabel
FROM (

    -- Buat himpunan hasil yang akan 
    -- dipakai oleh kueri utama
    SELECT 
        <fields>
    FROM <table>
    WHERE ...

);

Ambil data dari hasil kueri lain alih-alih langsung dari tabel.

$$

  • Pisahkan manipulasi dari analisis
  • Membuat kueri lebih mudah dibaca dan dipahami
  • Memungkinkan “portabilitas” dan perubahan lebih mudah
  • JOIN, WHERE, dll.
Manipulasi Data di Snowflake

Sebelum subkueri

SELECT
    month_num,
    -- windchill - temperature harus dipakai dua kali di sini. Bagaimana jika rumusnya berubah?
    AVG(windchill - temperature) AS avg_differential
    MIN(windchill - temperature) AS most_differential
FROM weather
WHERE 
    -- Penyaringan terjadi di kueri yang sama dengan agregasi/analisis
    season = 'Winter' AND
    temperature < 32
GROUP BY month_num;
Manipulasi Data di Snowflake

Setelah subkueri

-- Mulai dengan subkueri, lalu agregasi

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        |

Analisis mudah dipahami dan diubah setelah datanya dibersihkan.

Manipulasi Data di Snowflake

WHERE ... IN ( ... )

...

-- Filter berdasarkan rekaman dengan nilai 
-- dalam hasil subkueri
WHERE <field> IN (

    SELECT <other-field> FROM ... 

);

Buat himpunan hasil kecil untuk transformasi, filter, atau manipulasi data.

$$

  • Filter rekaman IN himpunan hasil non-konstan
  • Dapat dipakai di bagian lain kueri
  • AVG, MAX, MIN, dll.
Manipulasi Data di Snowflake

WHERE ... IN( ... )

SELECT
    todays_date,
    temperature,
    status
FROM weather
WHERE todays_date IN (  -- Filter semua hari dengan laga kandang yang dimenangkan

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

);
Manipulasi Data di Snowflake

WHERE ... IN ( ... )

Himpunan hasil kueri yang memakai subkueri untuk menemukan data cuaca tiap laga kandang

Manipulasi Data di Snowflake

Ayo berlatih!

Manipulasi Data di Snowflake

Preparing Video For Download...