Spark SQL에서 두 날짜의 차이를 구하는 방법에 관한 글입니다.
배경
Spark SQL 함수에는 DATE 끼리의 차이를 구하는 함수는 있습니다(DATE_SUB). 하지만, TIMESTAMP(DATETIME) 끼리의 차이를 구하는 함수는 없습니다. 따라서 다른 방법으로 우회해서 구하는 수밖에 없습니다. 참고로 DATE와 TIMESTAMP의 차이는 아래와 같습니다.
- DATE : 2022-09-01
- TIMESTAMP(DATETIME) : 2022-09-01 00:00:00
UNIX_TIMESTAMP로 두 날짜의 차이 구하기
결론부터 말하자면, 두 DATETIME을 UNIX 시간으로 변환해준 후 차이를 구해야 합니다.
SELECT UNIX_TIMESTAMP(시간1) - UNIX_TIMESTAMP(시간2) AS diff_seconds,
UNIX_TIMESTAMP(시간1) - UNIX_TIMESTAMP(시간2) / 60 AS diff_minutes,
UNIX_TIMESTAMP(시간1) - UNIX_TIMESTAMP(시간2) / 60 / 60 AS diff_hours,
ROUND(UNIX_TIMESTAMP(시간1) - UNIX_TIMESTAMP(시간2) / 60 / 60, 1) AS diff_hours_round
- 첫 번째 줄은, 두 시간의 차이를 초(Seconds)로 반환하는 방식입니다.
- 두 번째 줄은, 두 시간의 차이를 분(Minutes)로 반환하는 방식입니다.
- 세 번째 줄은, 두 시간의 차이를 시간(Hours)로 반환하는 방식입니다.
- 네 번째 줄은, 두 시간의 차이를 시간(Hours)으로 반환하고, ROUND 함수를 이용해서 소수점 한 자리 수까지 출력하는 방식입니다.