socar-inc / techblog-comments

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

data/2022/07/25/analytics-engineering-with-dbt #26

Open utterances-bot opened 1 year ago

utterances-bot commented 1 year ago

데이터에 신뢰성과 재사용성까지, Analytics Engineering with dbt - SOCAR Tech Blog

https://tech.socarcorp.kr/data/2022/07/25/analytics-engineering-with-dbt.html

kboseong commented 1 year ago

안녕하세요. 좋은 글 정말 감사드립니다. 저도 오토피디아라는 차량 정비시장에 속한 스타트업에서 일하고 있는데요. (닥터차 서비스를 운영하고있습니다 ㅎㅎ) 모빌리티 분야에서 데이터 쪽으로 크게 앞서가고 계신 쏘카 글들을 보면서 항상 많이 배우고 있습니다. 쏘카도 정비에 대한 니즈가 있으실텐데, 언젠가 쏘카와도 함께 일할 기회가 생길것 같아 두근거리네요. 기회가 된다면 커피챗 하고싶습니다:)

세 가지 질문이 있습니다.

현재 저희 회사도 dbt를 활용하고 있고, staging과 mart 사이의 간극이 커 중간단계의 mid table을 view로 materialize하고, mart에서 mid table을 불러쓰는 방식으로 구성하였는데요. mart에서 여러 mid table을 들고와 union 하는 과정에서 too many subqueries or query is too complex 에러를 발생시키는 경우가 종종 있습니다. mid 를 거치지 않고 mart에서 직접 쿼리를 작성하면 문제가 없는데, 이럴 경우 중간 단계의 table이 의미가 없어지는 문제가 있어 질문드립니다. 혹시 비슷한 경험이 있으실까요?

두번째 질문은 저희가 사용하는 mid table이 쏘카에서는 ods와 intermediate 폴더 내 테이블에 대응될 것 같은데, intermediate table은 table 로 materialize하시는지 view 로 materialize하시는지도 궁금합니다. 추가적으로 ods와 intermediate 의 차이가 어떤 것인지도 궁금합니다.

세번째로 view/table materialize 기준이 궁금합니다. 저희는 현재 내부적으로 view/table materialize 기준을 1.비즈니스 로직 상 중요한 집계테이블일 경우(유저, 차량, 주요 전환, 결제 등)

  1. 쿼리시간이 n초이상 소요되는 경우(데이터 스튜디오 상에서 로딩이 너무 오래걸림) 에 table로 materialize한다로 설정하고 있는데, 쏘카만의 분류방식이 있으실까요?

감사합니다.

socar-humphrey commented 1 year ago

안녕하세요. 글쓴 험프리/안상태 입니다! 먼저 정성이 느껴지는 답변 너무너무 감사합니다. (커피챗 너무너무 좋습니다!)

  1. too many subqueries or query is too complex 에러 저희도 굉장히 자주 겪었던 문제였는데요. view를 중첩해서 사용하면 빅쿼리에서 에러가 나는 경우가 있는데, 이 경우 저희는 materialized view를 만들어내는 custom materialization을 만들어서 어느정도 해결을 했는데요. 아래 링크 한번 참고해보시면 도움이 될거에요! https://docs.getdbt.com/guides/legacy/creating-new-materializations

  2. ods가 댓글 작성자 분이 말씀해주신 mid table이랑 같다고 봐주시면 될거 같아요. 기본적으로 view로 materialize하지만 마트 모델의 구조 상 table로 만들 수 밖에 없는 모델도 있었습니다. intermediate 개념은 저희는 사용하지 않고, mart 레이어에서 ods의 모델을 ref해서 사용한다 정도로 이해해주시면 될 거 같습니다!

  3. 저희의 분류 방식은 (물론 아직 정립되어있지는 않습니다만) 해당 테이블의 사용 방식에 더 큰 무게를 둡니다. 사용하는 측면에서 빠르게 조회해야하면 table, 재사용 가능해야하고, 파이프라인 디자인 상 최신 데이터를 가지고 있어 다른 테이블을 만들어내는 데 사용되는 데이터는 view로 만들어서 사용했습니다.

답변이 되었길 바랍니다.

kboseong commented 1 year ago

답변 너무 감사드립니다.

적어주신 dbt 폴더 구조에 보면, intermediate 라는 폴더가 mart/core/intermediate 의 경로에 존재하는데 혹시 쓰지 않으시는 폴더이실까요?

socar-humphrey commented 1 year ago

네네 위에 작성된 폴더 구조는 dbt best practice의 구조를 인용했구, 현재 저희 내부적으로 쓰이고 있는 구조는 아닙니다!