빅쿼리의 이벤트 로그 테이블은 아래와 같이 테이블 이름뒤에 년월일이 붙어서 매일 새로 생긴다.
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
'프로그래밍' 카테고리의 다른 글
파이썬 가비지 컬렉터 (3) | 2024.10.17 |
---|---|
print vs logging (0) | 2023.12.01 |
copy-on-write & defensive copy(함수형 프로그래밍) (1) | 2023.01.23 |
[Python] map, filter, reduce 함수 (0) | 2023.01.23 |
MYSQL & PostgreSQL JSON 데이터 (0) | 2023.01.22 |