데이터 분석을 하다 보면 NULL값을 처리해야 하는 일이 자주 발생한다. 일부 프로그램에서는 통계치를 계산할 때 임의로 NULL값을 제외하기 때문에, 미리 확인하는 것이 중요하다. R이나 파이썬에는 함수 하나로 쉽게 바꾸었는데, 하이브나 스파크에서는 어떻게 해야 될지 조금 난감하다.
오늘은 SQL에서 NULL값을 바꾸는 방법에 대해서 알아보고자 한다. 하이브SQL을 기준으로 했지만, 다른 SQL언어에서 동일하게 적용이 되지 않을까 싶다.
NULL값을 바꾸기 위해서 가장 쉽게는 CASE ~ WHEN ~문을 사용하면 될 듯 하다. '칼럼1 IS NULL' 이라고 조건식을 넣어서 값을 바꾸면 된다. 하지만 함수를 이용해서 더 쉽게 깔끔하게 바꿀 수 있는 방법이 있다.
아래와 같은 데이터셋이 있다고 가정해보자.
grp1 | grp2 | grp3 | var1 | var2 | var3 |
A | Z | 가 | 1 | NULL | NULL |
B | Y | 나 | 3 | 5 | -1 |
C | X | 다 | 9 | 4 | 2 |
A | Z | 가 | 3 | NULL | -3 |
B | Y | 다 | 2 | 2 | 1 |
C | Z | 나 | 4 | 3 | NULL |
1. 1개 칼럼의 NULL값 바꾸기
아래와 같이 NVL함수를 이용하면 칼럼의 NULL을 쉽게 바꿀 수 있다.
SELECT NVL(VAR2,0)
FROM TEMP.PRACTICE
[결과]
_c0 |
0 |
5 |
4 |
0 |
2 |
3 |
VAR2의 칼럼값이 NULL인 경우 0으로 바뀌었다. 다른 값을 원한다면 0대신 다른 숫자를 넣으면 되겠다.
2. NULL일 때 다른 칼럼의 값 넣기
COALESCE함수를 이용하면 NULL일 때 다른 칼럼의 값을 넣을 수 있다.
SELECT COALESCE(VAR2, VAR3, 0)
FROM TEMP.PRACTICE
[결과]
_c0 |
0 |
5 |
4 |
0 |
2 |
3 |
위와 같이 작성하면, VAR2의 값이 NULL이면 VAR3의 값을 넣는다. 그리고 VAR3값도 NULL이면 0의 값을 넣는다. 물론 CASE~ WHEN~구문으로 작성할 수도 있지만 코드도 깔끔하고 이해하기 더 쉽다.
참고로 NVL2함수도 있는데 하이브 SQL에서는 없다.
오늘은 이렇게 하이브 SQL에서 NULL값을 바꾸는 방법에 대해서 알아보았다. 스파크에서도 동일하게 작동하니 NULL값을 바꿀 때 유용하게 사용할 수 있을 것이다.
'데이터 > 데이터베이스' 카테고리의 다른 글
postgre sql 설치 및 사용법 알아보기(윈도우 기준) (0) | 2022.07.23 |
---|---|
DataBase 관련 웹사이트 (0) | 2022.07.23 |
SQLite 설치 및 실행, 사용 방법 알아보기 (0) | 2022.04.14 |
hive에서 원하는 순서대로 array 만드는 방법은?! (0) | 2022.03.10 |
SQL 칼럼 기준 텍스트 편집 - COLLECT_SET, COLLECT_LIST, CONCAT_WS?! (0) | 2022.02.01 |
하이브(hive) sql - 행(row)을 기준으로 최대값, 최소값 추출하는 방법! (0) | 2022.02.01 |
학습을 위한 가장 쉬운 하둡 설치 방법은? (0) | 2022.01.31 |
맥(mac)에서 하둡(hadoop) 설치하기 (0) | 2022.01.31 |