[ 파이프라인 ]
Oozie -> Sqoop -> Hive
[ 문제 ]
RDB의 타임존이 UTC라 한국시간보다 9시간 느리다.
그래서 Oozie XML에서 Sqoop Query작성을 아래와 같이
- SELECT convert_tz('${created_date} 00:00:00', '+00:00', '+09:00') as DATE FROM ...
시간을 +9하여 한국시간에 맞춰 가져온다면
Hive에서는 +9시간 더 더해져 가져오는 경우가 있다.
날짜로 파티션을 하는 하이브테이블일 경우 날짜자체가 달라져
데이터 정합성에 오류가 일어날 수 있다.
- RDB 시간 : 2021-04-07 14:00:00 (UTC)
- 예상한 HIVE 시간 : 2021-04-07 23:00:00 (KST)
- 결과 HIVE 시간 : 2021-04-08 08:00:00
[ 해결 ]
Ooize Scheduler의 시간을 서울로 지정했다면
Sqoop실행시 연결된 RDB의 시간을 비교하여
자동적으로 한국시간에 맞게 +9시간을 해준다.
따라서 Sqoop쿼리에서 convert_tz를 사용하지 않고 쿼리를 작성한다.
Sqoop쿼리의 Where절과는 상관없다.
최종결과 아웃풋이 나오고 SELECT된 컬럼(DATE관련 타입)들에게 Oozie시간대에 맞게 조정하기 때문이다.
Builds a new list by applying a function to all elements of this list.
the element type of the returned list.
the function to apply to each element.
a new list resulting from applying the given function
f
to each element of this list and collecting the results.