본문 바로가기
SQL

SQL 데이터 품질 확인

by 우솨 2024. 4. 28.

데이터 품질 확인방법
1. 중복된 레코드들 체크
2. 최근 데이터의 존재여부 체크(freshness)
3. Primary key uniqueness가 지켜지는지 체크
4. 값이 비어있는 컬럼들이 있는지 체크

CTAS : SELECT를 가지고 테이블을 생성
- adhoc위에서 write가능
DROP TABLE IF EXISTS adhoc.suha_session_summary;
CREATE TABLE adhoc.suha_session_summary AS
SELECT B.*, A.ts FROM raw_data.session_timestamp A
JOIN raw_data.user_session_channel B ON A.sessionid = B.sessionid;

1. 중복체크 
SELECT COUNT(1) FROM adhoc.suha_session_summary;

SELECT COUNT(1)
FROM (
    SELECT DISTINCT userId, sessionId, ts, channel FROM adhoc.suha_session_summary
);
위 둘의 값이 같아야한다.

CTE 사용
With ds AS (
  SELECT DISTINCT userId, sessionId, ts, channel FROM adhoc.suha_session_summary
)
SELECT COUNT(1)
FROM ds;

2. 최근 데이터의 존재여부 체크
SELECT MIN(ts), MAX(ts)
FROM adhoc.suha_session_summary;

3. Primary key uniqueness가 지켜지는지 체크하기
SELECT sessionId, COUNT(1)
FROM adhoc.suha_session_summary
GROUP BY 1
ORDER BY 2 DESC
LIMIT 1;
값이 항상 1이어야 한다.

4. 값이 비어있는 칼럼들이 있는지 체크하기
SELECT
    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.suha_session_summary;

 

예제

 

월별 유니크한 사용자 수
SELECT
TO_CHAR(A.ts, 'YYYY-MM') AS month,
COUNT(DISTINCT B.userid) AS mau
FROM raw_data.session_timestamp A
JOIN raw_data.user_session_channel B ON A.sessionid = B.sessionid
GROUP BY 1
ORDER BY 1 DESC;

'SQL' 카테고리의 다른 글

[solvesql - day1] 크리스마스 게임 찾기  (0) 2025.01.10
SQL 함수와 Union  (1) 2024.04.28
SQL의 조인(Join)과 NULL값  (0) 2024.04.28
SQL의 기본 언어  (0) 2024.04.28
데이터베이스의 구조와 SQL  (0) 2024.04.28