가장 많이 사용된 채널은 무엇인가?
- 가장 많이 사용되었다는 정의는?
- 사용자 기반 아니면 세션 기반?
- 필요한 정보 - 채널 정보, 사용자 정보 혹은 세션 정보
- 먼저 어느 테이블을 사용해야 하는지 생각!
- user_session_channel?
- session_timestamp?
- 혹은 이 2개의 테이블을 조인해야 하나?
SELECT
channel,
COUNT(1) AS session_count,
COUNT(DISTINCT 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
가장 많은 세션을 만들어낸 사용자 ID는 무엇인가?
SELECT
userid,
COUNT(1) AS count,
FROM raw_data.user_session_channel
GROUP BY 1 -- GROUP BY userid
ORDER BY 2 DESC -- ORDER BY count DESC
LIMIT (1);
항상 시도해봐야 하는 데이터 품질 확인 방법
- 중복된 레코드들 체크하기
- 최근 데이터의 존재 여부 체크하기 (freshness)
- Primary key uniqueness가 지켜지는지 체크하기
- 값이 비어있는 컬럼들이 있는지 체크하기
1. 중복된 레코드들 체크하기
1) 다음 두 개의 카운트를 비교
SELECT COUNT(1)
FROM adhoc.keeyong_session_summary;
SELECT COUNT(1)
FROM(
SELECT DISTINCT userid, sessionid, ts, channel
FROM adhoc.keeyong_session_summary
);
2) CTE를 상용해서 중복 제거 후 카운트 해보기
With ds AS (
SELECT DISTINCT userid, sessionid, ts, channel
FROM adhoc.keeyong_sesison_summary
)
SELECT COUNT(1)
FROM ds;
2. 최근 데이터의 존재 여부 체크하기 (freshness)
SELECT MIN(ts), MAX(ts)
FROM adhoc.keeyong_session_summary;
3. Primary key uniqueness가 지켜지는지 체크하기
SELECT sessionid, COUNT(1)
FROM adhoc.keeyong_session_summary
GROUP BY 1
ORDER BY 2 DESC
LIMIT 1;
4. 값이 비어있는 컬럼들이 있는지 체크하기
SLELECT
COUNT(CASE WHEN sessionid is NULL THEN 1 END) sessionid_null_count,
COUNT(CASE WHEN userid is NULL THEN 1 END) userid_null_count,
COUNT(CASE WHEN ts is NULL THEN 1 END) ts_null_count,
COUNT(CASE WHEN channel is NULL THEN 1 END) channel_null_count
FROM adhoc.keeyong_session_summary;
반응형