์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- spark executor memory
- disk spill
- SQL
- Docker
- ๋น ๋ฐ์ดํฐ
- aws
- CI/CD
- ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ
- colab
- Spark Partitioning
- mysql
- AQE
- DataFrame Hint
- Spark Caching
- Speculative Execution
- topic
- backfill
- k8s
- etl
- KDT_TIL
- Kafka
- Salting
- Spark
- Kubernetes
- Spark ์ค์ต
- Dag
- off heap memory
- Airflow
- redshift
- Spark SQL
- Today
- Total
JUST DO IT!
SQL ํ์ต - GROUP BY, CTAS (TIL 230510) ๋ณธ๋ฌธ
๐ KDT WEEK 6 DAY 3 TIL
- GROUP BY
- CTAS
๐ฅ GROUP BY & Aggregate
ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ๊ทธ๋ฃนํ(GROUP BY)ํ์ฌ ๊ทธ๋ฃน๋ณ๋ก ๋ค์ํ ์ ๋ณด๋ฅผ ๊ณ์ฐ(Aggregate)ํ๋ค
- ๊ทธ๋ฃนํํ ํ๋ ์ด์์ ํ๋๋ฅผ ๊ฒฐ์ ํ๋ค.
- ๊ทธ๋ฃน๋ณ๋ก ๊ณ์ฐํ ๋ด์ฉ์ ๊ฒฐ์ ํ๊ณ ํจ์๋ฅผ ์ฌ์ฉ
- COUNT, SUM, AVG, MIN, MAX, LISTAGG...
์์ 1)
SELECT LEFT(ts,7) AS mon, COUNT(1) AS session_count
FROM raw_data.session_timestamp
GROUP BY 1 -- GROUP BY mon, GROUP BY LEFT(ts,7)
ORDER BY 1;
raw_data.session_timestamp ํ ์ด๋ธ์์ ์๋ณ ์ด ์ธ์ ์๋ฅผ ๊ตฌํ๋ ์ฟผ๋ฆฌ๋ฌธ์ด๋ค.
GROUP BY 1 ์ ์ฌ์ฉํ๋ฉด, 1์ ํด๋นํ๋ mon์ด ๊ทธ๋ฃนํ๋๋ค.
๋ฐ๋ผ์ ๊ทธ๋ฃนํ๋ mon๋ณ๋ก COUNT(1)์ ํตํด ์ด ์ธ์ ์ ์๋ฅผ ๊ตฌํ ์ ์๊ฒ๋๋ค.
์์ 2)
SELECT
channel,
COUNT(1) AS session_count,
COUNT(DISTNICT userId) AS user_count
FROM raw_data.user_session_channel
GROUP BY 1 --GROUP BY channel
ORDER BY 2 DESC; -- ORDER BY session_count DESC
raw_data.user_session_channel ํ ์ด๋ธ์์ ์ฑ๋๋ณ ์ธ์ ์๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๊ตฌํ๋ ์ฟผ๋ฆฌ๋ฌธ์ด๋ค.
์์ 3)
SELECT
TO_CHAR(A.ts, 'YYYY-MM') AS month,
COUNT(DINTINCT B.userid) AS mau,
FROM raw_data.session_timestamp A
JOIN raw_data.user_session_channel B ON A.sessionid = B.sessionid
GROUP BY 1
ORDER BY 1 DESC;
๋ ํ ์ด๋ธ์ ์กฐ์ธ(INNER JOIN)ํ์ฌ ์๋ณ ์ ๋ํฌํ ์ฌ์ฉ์ ์๋ฅผ ๊ตฌํ๋ ์ฟผ๋ฆฌ๋ฌธ์ด๋ค.
- TO_CHAR์ ๊ฒฝ์ฐ non charํ์ ์ ๋ฐ์ดํฐ๋ฅผ ํด๋น ํํ(YYYY-MM)์ ๋ฌธ์์ด๋ก ๋ฐ๊ฟ์ฃผ๋ ์ญํ ์ ํ๋ค.
- LEFT(A.ts, 7) ๊ณผ SUBSTRING(A.ts, 1, 7)์ ๋ฐ์ ์ธ์๊ฐ์ ๋ฐ๋ผ ๋ฌธ์์ด๋ก ์๋ผ์ฃผ๋ ์ญํ ๋ก์จ ๋์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- timestamp ํ์ ์ ์ ์งํ๋ค๋ฉด DATE_TRUNC('month', A.ts)์ ์ฌ์ฉํ๋ค.
๐ฆ CTAS
์์ฑ๊ณผ ๋์์ AS SELECT ๋ฌธ์ ๋ถ์ฌ์ ๋ฐ์ดํฐ๊น์ง ๋์์ ๋ฃ์ด์ฃผ๋ ๋ฐฉ๋ฒ
์์ฃผ JOINํ๋ ํ ์ด๋ธ์ด ์๋ค๋ฉด ์ ์ฉํ๋ค.
CREATE TABLE ํ ์ด๋ธ์ด๋ฆ AS SELECT ~
ex)
DROP TABLE IF EXISTS adhoc.test_session_summary; -- ์ด๋ฏธ ์กด์ฌํ๋ ๊ฑด ์ญ์
CREATE TABLE adhoc.test_session_summary AS
SELECT B.* , A.ts
FROM raw_data.session_timestamp A
JOIN raw_data.user_session_channel B ON A.sessionid = B.sessionid;
์์๋ก ์ฌ์ฉํ ํ ์ด๋ธ์ด๋ฏ๋ก raw_data ํด๋๊ฐ ์๋ adhoc ํด๋์ ์์ฑํ๋๋ก ํ๋ค.
AS SELECT ๊ตฌ๋ฌธ ๋ฐ์ผ๋ก ๋์ค๋ ํ ์ด๋ธ์ test_session_summary ์ด๋ฆ์ผ๋ก ์๋ก์ด ํ ์ด๋ธ ์์ฑํ ์ ์๋ค.
์์
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SQL ํ์ต - Transaction(for Python) & ์ถ๊ฐ SQL ๋ฌธ๋ฒ (TIL 230512) (0) | 2023.05.12 |
---|---|
SQL ํ์ต - JOIN (TIL 230511) (0) | 2023.05.12 |
Redshift cluster ์์ฑ ๋ฐ SQL ๋ฐ์ดํฐ ํ์ง ์ฒดํฌ (TIL 230509) (0) | 2023.05.10 |
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ SQL ๊ทธ๋ฆฌ๊ณ AWS (TIL 230508) (0) | 2023.05.08 |
[TIL]KDT_20230504 (0) | 2023.05.04 |