하이브 SQL NULL값 바꾸기 - NVL, COALESCE!

2021. 12. 3. 10:41

데이터 분석을 하다 보면 NULL값을 처리해야 하는 일이 자주 발생한다. 일부 프로그램에서는 통계치를 계산할 때 임의로 NULL값을 제외하기 때문에, 미리 확인하는 것이 중요하다. R이나 파이썬에는 함수 하나로 쉽게 바꾸었는데, 하이브나 스파크에서는 어떻게 해야 될지 조금 난감하다.

오늘은 SQL에서 NULL값을 바꾸는 방법에 대해서 알아보고자 한다. 하이브SQL을 기준으로 했지만, 다른 SQL언어에서 동일하게 적용이 되지 않을까 싶다.

 

 

하이브 SQL - NVL, COALESCE

 

 

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값을 바꿀 때 유용하게 사용할 수 있을 것이다.

댓글()