ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ DBeaver๋ก MySQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ค๊ฐ ์๋์ ๋ฌธ์ ๋ก Google Cloud์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ก๋ํ์ฌ BigQuery๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ ์์ต๋๋ค! ๋์ผํ๊ฒ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋๋ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ค์ด ๋ฐ์ํ๋๋ผ๊ตฌ์!
BIgquery๊ฐ์ ๊ฒฝ์ฐ๋ Standard SQL์ ์ ๊ณตํ๋ค๊ณ ํ๋๋ฐ ์ ๊ฐ ๋์ค์ ๋ค์ ๋ณด๊ธฐ์ํด์ ์ ๋ฆฌ๋ฅผ ํด๋ด ๋๋ค!
(1) EXTRCT(ํ์ํ๊ฐ FROM ์๊ฐ์ปฌ๋ผ๋ช )
: DATETIME์์ ํ์ํ ๊ฐ(์ผ์, ์์ผ, ์ฃผ์ฐจ, ์, ๋ถ๊ธฐ, ์ฐ๋, ์๊ฐ ๋ฑ)์ ์ถ์ถ
MySQL์์๋ ๋น๊ต์ ์ฝ๊ฒ ์ถ์ถ์ด ๊ฐ๋ฅํฉ๋๋ค. YEAR(์๊ฐ์ปฌ๋ผ๋ช ) ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์์ฑํ๋ฉด ์ํ๋ ๊ฐ์ ์ฝ๊ฒ ์ถ์ถ ๊ฐ๋ฅํฉ๋๋ค!
- YEAR : ์ฐ๋ ์ถ์ถ
- MONTH : ์ ์ถ์ถ
- DAY : ์ผ ์ถ์ถ
- WEEK : ์ฃผ ์ถ์ถ
- HOUR : ์ ์ถ์ถ
- MINUTE : ๋ถ ์ถ์ถ
- SECOND : ์ด ์ถ์ถ
(2) COUNT(DISTINCT CONCAT(์ปฌ๋ผ1, '-', ์ปฌ๋ผ2))
์ ํ์จ์ ๊ณ์ฐํ๋ ๊ณผ์ ์์ user_id, user_session์ ๋ชจ๋ ๊ณ ๋ คํ์ฌ COUNT๋ฅผ ํด์ฃผ์ด์ผํ๋ ์ํฉ์ด์์ผ๋ ๋น ์ฟผ๋ฆฌ์์ "Number of arguments does not match for aggregate function COUNT. Supported signature: COUNT(ANY) ~" ์ด๋ฐ์์ ์ค๋ฅ๊ฐ ๋ํ๋๋๋ผ๊ตฌ์!
์ฒ์์๋ ์ธ์ ์๊ฐ ๋ง์ง ์๋ค๋ ์ค๋ฅ ๋๋ฌธ์ ์ ๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์๋ชป์งฐ๋? ์ด๋ ๊ฒ ์๊ฐ์ ํ์๋๋ฐ ์๊ณ ๋ณด๋ BigQuery์์๋ COUNT(DISTINCT ์ปฌ๋ผ1, ์ปฌ๋ผ2)๊ฐ ๋ง๋ ๋ฌธ๋ฒ์ด ์๋๋๋ผ๊ตฌ์.
COUNT(DISTINCT CONCAT(์ปฌ๋ผ1, '-', ์ปฌ๋ผ2)), ์ด๋ ๊ฒ "-"๋ก ์ฐ๊ฒฐํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๋ฐ๋ก ์ค๋ฅ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค!
(3) DATE(FORMAT_DATETIME("%Y-%m-01", ์๊ฐ์ปฌ๋ผ))
๊ฐ๊ฐ์ ์ฝํธํธ๋ณ๋ก ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ผ ๊ณ ๊ฐ๋ค์ ์ฌ๊ตฌ๋งค๋ฅผ ์ถ์ ํด๋ณด๋ ํด๋์ ๋ฆฌํ ์ ๊ณ์ฐ์์ DATE_FORMAT(์๊ฐ์ปฌ๋ผ๋ช , "%Y-%m-01") ํจ์๋ฅผ ํตํด "YYYY-MM-01" ํํ๋ก ๊ฐ๊ณตํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ์ธํด๋ณด๊ณค ํ๋๋ฐ์! ์ด ํจ์ ์ญ์ BigQuery์์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋๋ผ๊ตฌ์!
BigQuery์์๋ DATE_FORMAT()๊ฐ ์๋ FORMAT_DATE() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋ค์ด๊ฐ๋ ์์ฑ์ ์์๋ ์ฝ๊ฐ ๋ค๋ฅด๋ค๋ ๊ฒ์ ์ ์ํด์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค!
์๊ฐ | BigQuery Guide Book - ๋น ์ฟผ๋ฆฌ ๊ฐ์ด๋๋ถ
zzsza.github.io
BigQuery ๋ฌธ๋ฒ์ด ์ ์ ๋ฆฌ๋์ด์๋ ๋ธ๋ก๊ทธ๋ ์๊ฐ๋๋ฆฌ๋ฉด์ ์ด๋ฒ ๊ธ์ ๋ง์น๊ฒ ์ต๋๋ค!