๐ ํธ๋์ญ์
- SQL๋ค์ ๋ฌถ์ด์ ํ๋์ ์์
์ฒ๋ผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ
- ๋ ์ด์ ์ชผ๊ฐค ์ ์๋ ์
๋ฌด ์ฒ๋ฆฌ์ ์ต์ ๋จ์์ด๋ค.
- ๊ฑฐ๋๋ด์ญ์ด๋ผ๊ณ ๋ ํ๋ค.
- ์ด๋ DDL์ด๋ DML์ค์์ ๋ ์ฝ๋๋ฅผ ์์ /์ถ๊ฐ/์ญ์ ํ ๊ฒ์๋ง ์๋ฏธ๊ฐ ์๋ค.
- SELECT์๋ ํธ๋์ญ์
์ ์ฌ์ฉํ ์ด์ ๊ฐ ์๋ค.
- BEGIN, END ํน์ BEGIN, COMMIT ์ฌ์ด์ ํด๋น SQL๋ค์ ์ฌ์ฉํ๋ค.
- ROLLBACK
๐ ํธ๋์ญ์
(์ปค๋ฐ ๋ชจ๋) - AUTOCOMMIT
- autocommit = True
- ๋ชจ๋ ๋ ์ฝ๋ ์์ /์ถ๊ฐ/์ญ์ ์์
์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ๋ก DB์ ์ฐ์ฌ์ง๋ค.
- ์ด๋ฅผ ์ปค๋ฐ๋๋ค๊ณ ํ๋ค.
- ๋ง์ฝ ํน์ ์์
์ ํธ๋์ญ์
์ผ๋ก ๋ฌถ๊ณ ์ถ๋ค๋ฉด BEGIN๊ณผ END(COMMIT)/ROLLBACK์ผ๋ก ์ฒ๋ฆฌํ๋ค.
- autocommit = False
- ๋ชจ๋ ๋ ์ฝ๋ ์์ /์ญ์ /์ถ๊ฐ ์์
์ด COMMIT ํธ์ถ๋ ๋๊น์ง ์ปค๋ฐ๋์ง ์๋๋ค.
๐ ํธ๋์ญ์
๋ฐฉ์
- Google Colab์ ํธ๋์ญ์
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ SQL statement๊ฐ ๋ฐ๋ก ์ปค๋ฐ๋๋ค.(autocommit = True)
- ์ด๋ฅผ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด BEGIN;END; ํน์ BEGIN;COMMIT;์ ์ฌ์ฉํ๋ค.(๋๋ ROLLBACK)
- psycopg2์ ํธ๋์ญ์
- autocommit์ด๋ผ๋ ํ๋ผ๋ฏธํฐ๋ก ์กฐ์ ๊ฐ๋ฅํ๋ค.
- autocommit=True๊ฐ ๋๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก PostgreSQL์ ์ปค๋ฐ ๋ชจ๋์ ๋์ผํ๋ค.
- autocommit=False๊ฐ ๋๋ฉด ์ปค๋ฅ์
๊ฐ์ฒด์ .commit()๊ณผ .rollback()ํจ์๋ก ํธ๋์ญ์
์กฐ์ ์ด ๊ฐ๋ฅํ๋ค.
- ์ด๋ค๊ฒ์ ์ฌ์ฉํ ์ง๋ ๊ฐ์ธ์ ์ทจํฅ์ด๋ค.
๐ DELETE FROM vs. TRUNCATE
- DELETE FROM table_name (not DELETE* FROM)
- ํ
์ด๋ธ์์ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ์ญ์
- vs. DROP TABLE table_name
- WHERE์ ์ฌ์ฉํ์ฌ ํน์ ๋ ์ฝ๋๋ง ์ญ์ ๊ฐ ๊ฐ๋ฅํ๋ค.
- DELETE FROM raw_data.user_session_channel WHERE channel = 'Google'
- TURNCATE table_name
- ํ
์ด๋ธ์์ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ์ญ์ ํ๋ค.
- DELETE FROM์ ์๋๊ฐ ๋๋ฆฌ๋ค.
- TRUNCATE๋ ์ ์ฒด ํ
์ด๋ธ์ ๋ด์ฉ ์ญ์ ์์๋ ์ฌ๋ฌ๋ชจ๋ก ์ ๋ฆฌํ๋ค.
- ๋จ์
- WHERE์ ์ง์ํ์ง ์๋๋ค.
- Transction์ ์ง์ํ์ง ์๋๋ค.
๐ UNION, EXCEPT, INTERSECT
- UNION(ํฉ์งํฉ)
- ์ฌ๋ฌ๊ฐ์ ํ
์ด๋ธ๋ค์ด๋ SELECT ๊ฒฐ๊ณผ๋ฅผ ํ๋์ ๊ฒฐ๊ณผ๋ก ํฉ์ณ์ค๋ค.
- UNION vs. UNION ALL
- UNION์ ์ค๋ณต์ ์ ๊ฑฐํ๋ค.
- EXCEPT(MINUS)
- ํ๋์ SELECT ๊ฒฐ๊ณผ์์ ๋ค๋ฅธ SELECT ๊ฒฐ๊ณผ๋ฅผ ๋นผ์ฃผ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
- INTERSECT(๊ต์งํฉ)
- ์ฌ๋ฌ ๊ฐ์ SELECT๋ฌธ์์ ๊ฐ์ ๋ ์ฝ๋๋ค๋ง ์ฐพ์์ค๋ค.
๐COALESCE, NULLIF
- COALESCE(Expression1, Expression2,...)
- ์ฒซ ๋ฒ์งธ Expression๋ถํฐ ๊ฐ์ด NULL์ด ์๋ ๊ฒ์ด ๋์ค๋ฉด ๊ทธ ๊ฐ์ ๋ฆฌํดํ๊ณ ๋ชจ๋ NULL์ด๋ฉด NULL์ ๋ฆฌํดํ๋ค.
- NULL๊ฐ์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ฐ๊พธ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
- NULLIF(Expression1, Expression2)
- Expression1, Expression2์ ๊ฐ์ด ๊ฐ์ผ๋ฉด NULL์ ๋ฆฌํดํ๋ค.
๐LISTAGG
- GROUP BY์์ ์ฌ์ฉ๋๋ Aggregateํจ์ ์ค์ ํ๋์ด๋ค.
- ์ฌ์ฉ์ ID๋ณ๋ก ์ฑ๋์ ์์๋๋ก ๋์ด
SELECT
userid,
LISTAGG(channel) WITHIN GROUP (ORDER BY ts) channels
FROM raw_data.user_session_channel usc
JOIN raw_data.session_timestamp st ON usc.sessionid = st.sessionid
GROUP BY 1
LIMIT 10;
- ๋ฆฌ์คํธ๋ฅผ ,๋ก ๋์ดํ๊ธฐ
SELECT
userid,
LISTAGG(channel, ',') WITHIN GROUP (ORDER BY ts) channels
FROM raw_data.user_session_channel usc
JOIN raw_data.session_timestamp st ON usc.sessionid = st.sessionid
GROUP BY 1
LIMIT 10;
๐ WINDOW
- Syntax
- function(expression) OVER([PARTITION BY expression][ORDER BY expression])
- Useful functions
- ROW_NUMBER, FIRST_VALUE, LAST_VALUE, LAG
- Math functions : AVG, SUM, COUNT, MAX, MIN, MEDIAN, NTH_VALUE
๐ WINDOW - LAG
- ์ด๋ค ์ฌ์ฉ์ ์ธ์
์์ ์๊ฐ์์ผ๋ก ๋ดค์ ๋
- ์ ์ธ์
์ ์ฑ๋์ด ๋ฌด์์ธ์ง ์๊ณ ์ถ๋ค๋ฉด?
- ํน์ ๋ค์ ์ธ์
์ ์ฑ๋์ด ๋ฌด์์ธ์ง ์๊ณ ์ถ๋ค๋ฉด?
SELECT
usc.*,
st.ts,
LAG(channel,1) OVER(PARTITION BY userid ORDER BY ts) prev_channel
FROM raw_data.user_session_channel usc
JOIN raw_data.session_timestamp st ON usc.sessionid = st.sessionid
ORDER BY usc.userid, st.ts
๐ JSON Parsing Functions
- JSON์ ํฌ๋งท์ ์ด๋ฏธ ์๋ ์ํฉ์์๋ง ์ฌ์ฉ๊ฐ๋ฅํ ํจ์
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":"1"},"f4":{"f5":"99","f6":"star"}}','f4','f6');
{
"f2":{
"f3":"1"
},
"f4":{
"f5":"99",
"f6":"star"
}
}