프로그래밍
빅쿼리 와일드카드(*) 사용
haong_
2023. 7. 11. 17:34
빅쿼리의 이벤트 로그 테이블은 아래와 같이 테이블 이름뒤에 년월일이 붙어서 매일 새로 생긴다.
table-name.event_20230710
table-name.event_20230711
원하는 일자의 모든 테이블을 검색하고 싶다면 와일드카드와 테이블 서픽스를 사용해서 검색해야 한다. 년월일 부분에 와일드카드를 붙이고 where 절에 _table_suffix 원하는 날짜를 적으면 해당 날짜의 모든 테이블을 검색 할 수 있다.
FROM `table-name.events_*`
where _table_suffix between '20230101' and '20230331'
아래 코드는 2023 1월부터 3월까지의 방문한 유저의 수 요청이 와서 와일드 카드를 적용해 짰던 쿼리이다.
SELECT event_date, COUNT(DISTINCT user_id)
FROM `table-name.events_*`
where _table_suffix between '20230101' and '20230331'
GROUP BY
event_date
ORDER BY
event_date
조금 더 응용하면 월별 방문한 평균 유저의 수도 셀 수 있다.
PARSED_DATE 함수를 이용해 원하는 포맷으로 날짜를 파싱하고, EXTRACT를 사용해 월과 평균 유저수를 뽑아낸다.
SELECT EXTRACT(YEAR FROM parsed_date) * 100 + EXTRACT(MONTH FROM parsed_date) AS year_month,
AVG(user_count) AS average_user_count
FROM (
SELECT PARSE_DATE('%Y%m%d', _table_suffix) AS parsed_date,
COUNT(DISTINCT user_id) AS user_count
FROM `table-name.events_*`
WHERE _table_suffix BETWEEN '20221001' AND '20230331'
GROUP BY parsed_date
)
GROUP BY year_month
ORDER BY year_month