쿼리엔진 마이그레이션 후 데이터 정합성 비교하는 법

헬리코박도·2023년 7월 24일
0

데이터 엔지니어

목록 보기
3/3

쿼리엔진 마이그레이션 후 데이터 정합성 비교

기존 우리 데이터 파이프라인은 Spark SQL을 통해 배치 작업을 수행하였다.

2023 연초 기존 자체 배포판 Hadoop에서 Cloudera의 배포판으로 넘어가면서 배치 작업들을 Impala로 전환하였다.

Impala와 Spark 모두 Hadoop 환경에서 쓸 수 있는 쿼리 엔진이며 SQL에 기반하여 쿼리를 작성할 수 있지만 세세한 부분이 조금씩 달랐다. Spark에서 사용하던 힌트, 함수들이 Impala에서는 지원이 안 되거나 대체 되는 기능으로 바꾸어 주어야 했던 것들이 있다.

가장 큰 차이는 Spark에서 지원하던 암시적 데이터 타입 변환을 Impala가 지원하지 않는 것이었다. 원천 DB로부터 데이터를 받아와 시간을 제외하고 전부 String으로 저장하는 영역이 있는데 이후 타입을 원천과 맞춘 뒷단으로 넘어갈 때 기존에는 암시적으로 신경쓰지 않던 명시적 형변환을 해주기 위해 CAST 함수를 쿼리에 추가해주어야 했다.

아무튼 이러저러한 변경점을 가지면서 과연 이전 Spark 쿼리와 동일한 아웃풋으로 데이터가 나오는지 정합성이 문제가 되었었는데 이를 체크할 수 있는 방법을 남기고자 한다.

방법

Spark 쿼리의 결과로 작성된 데이터와 Impala 쿼리의 결과로 작성된 데이터를 Union하고 중복되는 행을 제거했을 때 나온 결과의 개수가 기존 데이터 개수와 동일하면 정합성에 문제가 없다고 판단할 수 있을 것이다.

Spark와 Impala 양쪽 모두 데이터를 불러와 Union하고 distinct 따위를 사용해 중복 행을 제거하고 카운트할 수 있을 것이다.

그리고 이런 작업은 Impala가 Spark보다 훨씬 빠르게 결과를 내보낼 것이다.

그러나 구체적으로 생각해봤을 때 Impala는 그렇게 나온 결과(데이터 개수)를 변수에 저장하여 기존 테이블의 결과와 비교하기는 조금 어려울 것이다. 불가능한 것은 아니나 Impala를 이용해 수백 개가 넘는 테이블들을 자동으로 비교하는 로직을 짜기엔 자유도가 낮은 Impala가 적합하지 않다.

그런 면에서 Spark를 이용하여 결과를 비교하는 자동화 프로그램을 짜는 것이 좋은 솔루션이 될 수 있을 것이다.

profile
Data Engineer

1개의 댓글

comment-user-thumbnail
2023년 7월 24일

개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.

답글 달기