Develop/DevCourseTIL

05.10 데이터 엔지니어링 23일차 - SQL Analysis (3)

향식이 2023. 5. 10. 16:54

가장 많이 사용된 채널은 무엇인가?

  • 가장 많이 사용되었다는 정의는?
    • 사용자 기반 아니면 세션 기반?
  • 필요한 정보 - 채널 정보, 사용자 정보 혹은 세션 정보
  • 먼저 어느 테이블을 사용해야 하는지 생각!
    • 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;
반응형