socar-inc / techblog-comments

utterances를 사용해 기술 블로그 댓글을 저장합니다
1 stars 0 forks source link

data/2021/03/24/what-socar-data-engineering-team-does.html #17

Open socar-kyle opened 2 years ago

socar-kyle commented 2 years ago

쏘카 데이터 그룹 - 데이터 엔지니어링 팀이 하는 일

https://tech.socarcorp.kr/data/2021/03/24/what-socar-data-engineering-team-does.html

socar-kyle commented 2 years ago

Prefect.io 는 어떻게 생각하시나요?

This comment was made by Disqus. 2021-03-24 10:48:51 김응진

socar-kyle commented 2 years ago

안녕하세요 :) 항상 좋은 글 감사합니다.
궁금한점이 있어 코멘트 남겨봅니다.
여러 데이터저장소에 데이터를 저장하면 저장소간 데이터 정합성 문제(중복 or 유실)가 필연적으로 발생할 것 같은데요,
혹시 쏘카의 데이터 파이프라인에서 이런 정합성에 대한 문제는 어떻게 처리되고있는지에 대해서 알 수 있을까요 ?

This comment was made by Disqus. 2021-03-30 03:20:46 박홍민

socar-kyle commented 2 years ago

아직 써보진 않았지만 추후에 내부적으로 PoC로 다뤄볼 예정이긴 합니다!
현재까지 에어플로우 사용에 큰 문제가 없었기 때문에 당장 바꾸지는 않겠지만, Prefect.io가 더 적합하다고 생각이 들면 바꿔볼 여지는 충분히 두고 있습니다.

This comment was made by Disqus. 2021-04-06 01:15:33 heumsi

socar-kyle commented 2 years ago

데이터베이스를 원본 저장소로 예를 들어 간단하게 설명을 드리겠습니다.

UPSERT 쿼리가 발생하는 데이터(테이블)의 경우, updated_at 컬럼을 파이프라인 실행시점과 비교하여 최근의 발생한 데이터만 증분해서 가져옵니다.
증분해서 가져온 데이터는 MERGE 쿼리를 이용하여 통합 저장소(빅쿼리)에 입력합니다. 데이터를 넉넉히 증분해서 가져오기 때문에 데이터 유실이 없고, MERGE 쿼리를 통해 데이터 중복을 일으키지 않습니다.

APPEND 쿼리가 발생하는 데이터(테이블)의 경우, 가장 마지막에 가져온 데이터의 PK 값을 기억하고 있다가 다음 파이프라인 스케쥴링에서 이 PK 값부터 최근에 발생한 데이터를 모두 가져오고 있습니다. 이 방식대로면 마찬가지로 데이터 유실이나 중복은 없습니다.

위와 같은 방법이 안될 경우, 최악의 상황으로 TRUNCATE & INSERT 방식으로 데이터를 적재합니다. 그러나 이조차도 데이터가 너무 크거나 리소스 사용이 심할 때는 DBA와 논의하여 좀 더 커스텀하게 진행합니다.

한편, 원본 데이터와 따로 적재된 데이터를 주기적으로 검증(중복, 유실)하는 별도의 모니터링 서버를 두어 이상이 있을 시 슬랙 알람을 받도록 해두었습니다.

This comment was made by Disqus. 2021-04-06 03:19:40 heumsi

socar-kyle commented 2 years ago

자세한 답변 감사드립니다. :) 많은 도움이 되었습니다! ㅎㅎ

This comment was made by Disqus. 2021-04-07 10:48:48 박홍민