Slide 1

Slide 1 text

Airbnb’s Metric Platform raf kim

Slide 2

Slide 2 text

Metric Platform Metric - 1일당 unique user 수 - 한달동안 unit에서 발생한 매출 합계 - 1시간동안 찍힌 impression 수 Metric Platform - 위의 Metric들을 매번 유저가 직접 쿼리/코드로 만드는 것이 아니라, Metric을 정의하여 언제나 일관된 방식으로 플랫폼을 사용하는 모든 사람이 일관된 값을 볼 수 있도록 만들어주는 서비스

Slide 3

Slide 3 text

Metric Consistency 같은 Metric을 만들 때 “일관된” 한 방법만 사용하도록 하자

Slide 4

Slide 4 text

A Brief History of Analytics at Airbnb “core_data” 라는 주요한 table set을 만들고 분석을 활성화 시켰음 - Experimental Reporting Framework - Democratizing Data at Airbnb - Superset: Airbnb’s Data Exploration Platform - How Airbnb Democratizes Data Science With Data University - Scaling Knowledge at Airbnb

Slide 5

Slide 5 text

Growing Pains core data를 기반으로 생성되는 테이블들이 너무 복잡하게 엮여있음

Slide 6

Slide 6 text

Example INSERT INTO table_b ( SELECT DATE_TRUNC(‘day’, P.created_at) AS data_at, P.unit_id, P.resource_id, P.resource_type, SUM(amount) AS reward FROM prod_pointsvc.g_vw_point P WHERE P.resource_type in (‘feed’, ‘lottery’) GROUP BY 1, 2, 3, 4 ); SELECT SUM(amount) FROM table_b roulette이 추가된 것을 반영하지 못함 INSERT INTO TABLE_A ( SELECT DATE_TRUNC(‘day’, P.created_at) AS data_at, P.unit_id, P.resource_id, P.resource_type, SUM(amount) AS reward FROM prod_pointsvc.g_vw_point P WHERE P.resource_type in (‘feed’, ‘roulette’, ‘lottery’) GROUP BY 1, 2, 3, 4 ); SELECT SUM(amount) FROM table_a

Slide 7

Slide 7 text

Overcoming Our Growing Pains with Minerva Metric을 모두 Minerva라는 플랫폼에서 만들고 제공

Slide 8

Slide 8 text

Data Production in Minerva Minerva는 raw data로부터 일관성있는 metric을 만들어주는 Platform

Slide 9

Slide 9 text

Design Principles for Standardized Metric Minerva를 통해 표준화된 Metric을 서빙하기 위해 필요한 Design Principle

Slide 10

Slide 10 text

Minerva is Standardized Event와 Dimension으로 분류하여 denormalize 하는 것으로 일반화 Event - impression - click - … Dimension - unit - lineitem - ad_group - device - …

Slide 11

Slide 11 text

Minerva is Declarative 어떻게 dataset을 만드는지 유저가 신경쓰지 않아도 된다 dataset을 만드는 모든 과정은 자동화 되어있다

Slide 12

Slide 12 text

Minerva is Scalable Ingestion Data Check Join Post-Processing and Serving

Slide 13

Slide 13 text

Minerva is Scalable - Self-healing Error가 발생해서 실패하게되는경우 1. data asset owner에게 실패 알림을 전달함 (manual re-execution이 필요한 작업) 2. 처리하지 않는다면 다음 DAG run에서 자동으로 같이 처리 (물론 재시도한다고 성공한다는 보장은 없음) >>>

Slide 14

Slide 14 text

Minerva is Scalable - Automated Backfill 2020년 데이터 전체를 backfill해야 하는 데, 하루씩 수행하면 너무 느리므로 monthly batch로 실행 (underlying infrastructure가 받쳐줘야 함)

Slide 15

Slide 15 text

Minerva is Consistent Dimension Source 1이 업데이트 되면, Dimension Set A123, B123의 data version이 업데이트 됨 data version이 업데이트 되면, backfill 동작

Slide 16

Slide 16 text

Minerva is Highly Available production data를 바탕으로 staging data 생성 현재 시점까지 staging data가 모두 만들어지면 production data로 승격

Slide 17

Slide 17 text

Minerva is Well Tested

Slide 18

Slide 18 text

Minerva is Well Tested - Design Spec

Slide 19

Slide 19 text

Minerva is Well Tested - Design Spec

Slide 20

Slide 20 text

Consistent Data Consumption Minerva Consumer들이 Metric을 조회하는 방법

Slide 21

Slide 21 text

A Metric-Centric Approach General use case - 유닛(dimension)에 따른 CTR (metric)을 대시보드/서비스 등으로 저장 - 쿼리할 테이블을 찾고, 조인/필터를 한 뒤, 집계 Challenges 1. Where: 테이블을 찾는 것 2. How: 조인/필터, 집계 3. Downstream Application과 통합

Slide 22

Slide 22 text

Minerva API

Slide 23

Slide 23 text

Metadata Fetcher: Abstracting the “Where” Valid Minerva data source list를 받아와서 - Druid를 통해 각 data source에 대한 metric, dimension 리스트, valid date range 등의 metadata를 MySQL에 저장 - 유저가 “내가 필요로 하는 데이터를 가진 테이블을 찾는 행위" 를 하지 않아도 된다

Slide 24

Slide 24 text

Data API: Abstracting the “How” “price_per_night” metric은 “gross_booking_value_stays / nights_booked” 로 계산됨 따라서 request를 두개 metric 기준으로 분리하여 계산한 다음 최종 결과를 합침 Request Sample

Slide 25

Slide 25 text

The Data Consumption Experience Python, R, JDBC library 제공

Slide 26

Slide 26 text

Metric Layer raw data 로부터 metric을 뽑아내기 위한 과정을 별도의 layer로 분리 하자

Slide 27

Slide 27 text

진짜로 알고싶으면.. Airbnb Minerva 1, 2, 3 Airbnb Data Quality 1, 2, 3, webinar Uber Metric Standardization, Data Quality Transform Metric Store Summit 2022 ModernDataStack