Xử lý dữ liệu trong Snowflake
Jake Roach
Field Data Engineer
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.
$$
$$
FROM ( ... ) hoặc WHERE ... IN ( ... )

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.
$$
JOIN, WHERE, v.v.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;
-- Bắt đầu với truy vấn con, rồi mới tổng hợpSELECT 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.
...
-- 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.
$$
IN một tập kết quả không hằngAVG, MAX, MIN, v.v.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