Truy vấn con

Xử lý dữ liệu trong Snowflake

Jake Roach

Field Data Engineer

Truy vấn con là gì?

Truy vấn con cho phép dùng kết quả của một truy vấn trong một truy vấn khác.

$$

  • Kết hợp nhiều truy vấn
  • Tập trung vào khả năng đọc
  • Tăng tính mô-đun
  • Dễ thao tác dữ liệu hơn!

$$

FROM ( ... ) hoặc WHERE ... IN ( ... )

Quy trình thao tác dữ liệu dễ đọc và có tính mô-đun hơn với truy vấn con

Xử lý dữ liệu trong Snowflake

Truy vấn con với FROM

SELECT
    ...
-- Lấy dữ liệu từ truy vấn, không phải từ bảng
FROM (

    -- Tạo một tập kết quả
    -- để truy vấn chính sử dụng
    SELECT 
        <fields>
    FROM <table>
    WHERE ...

);

Truy xuất dữ liệu từ kết quả của truy vấn khác thay vì trực tiếp từ bảng.

$$

  • Tách rời bước thao tác và phân tích
  • Dễ đọc, dễ hiểu hơn
  • Linh hoạt, dễ thay đổi
  • Dùng trong JOIN, WHERE, v.v.
Xử lý dữ liệu trong Snowflake

Trước khi dùng truy vấn con

SELECT
    month_num,
    -- windchill - temperature phải dùng hai lần. Nếu công thức đổi thì sao?
    AVG(windchill - temperature) AS avg_differential
    MIN(windchill - temperature) AS most_differential
FROM weather
WHERE 
    -- Lọc diễn ra trong cùng truy vấn với tổng hợp/phân tích
    season = 'Winter' AND
    temperature < 32
GROUP BY month_num;
Xử lý dữ liệu trong Snowflake

Sau khi dùng truy vấn con

-- Bắt đầu với truy vấn con, rồi mới tổng hợp

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        |

Phân tích dễ hiểu và dễ chỉnh sửa khi dữ liệu đã được làm sạch.

Xử lý dữ liệu trong Snowflake

WHERE ... IN ( ... )

...

-- Lọc theo các bản ghi có giá trị
-- nằm trong kết quả truy vấn con
WHERE <field> IN (

    SELECT <other-field> FROM ... 

);

Tạo một tập kết quả nhỏ để dùng khi biến đổi, lọc hoặc thao tác dữ liệu.

$$

  • Lọc các bản ghi IN một tập kết quả không hằng
  • Có thể dùng ở các vị trí khác trong truy vấn
  • AVG, MAX, MIN, v.v.
Xử lý dữ liệu trong Snowflake

WHERE ... IN( ... )

SELECT
    todays_date,
    temperature,
    status
FROM weather
WHERE todays_date IN (  -- Lọc theo mọi ngày có trận sân nhà đã thắng

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

);
Xử lý dữ liệu trong Snowflake

WHERE ... IN ( ... )

Tập kết quả cho truy vấn dùng truy vấn con để tìm dữ liệu thời tiết cho mỗi trận sân nhà

Xử lý dữ liệu trong Snowflake

Hãy luyện tập!

Xử lý dữ liệu trong Snowflake

Preparing Video For Download...