[데이터랩] 코딩 테스트(과제형)
디파이너리 개발팀 소개
https://iga-dev.atlassian.net/wiki/spaces/IG/pages/475070493?moved=true
데이터랩의 업무와 목표
- 우리는 아래 요소에 집중합니다.
- RAW 데이터에 집착합니다.
- 데이터 파이프 라인에 집중합니다.
- Batch성 업무 보다는 Ad-hoc query 환경에 집중합니다.
- 위 집중을 통해 아래 목표를 이루어 냅니다.
- ETL에 드는 노력을 0에 가깝게 합니다.
- 별도의 Data 조직이 없는 고객사에 자유도 및 접근성 높은 Big Data Platform을 제공합니다.
- 그리고 다음과 같은 일은 하지 않습니다.
- 웹개발에 필요한 테이블 작성, 디비 관리, 프로시저 작성
- IDC 관리, 소프트웨어 설치
데이터랩 코딩 테스트(과제형) 안내
디파이너리 개발팀의 입사 과제(데이터랩)는 데이터 업무의 기본이 되는 가벼운 수준의 과제를 요청드립니다. 아래 과제를 제출해주시는 분만 이후 전형 진행이 가능합니다.
코딩 테스트(과제형)를 통해 확인하려는 기본적인 역량은 아래와 같습니다.
- ETL 프로그래밍 ( csv → parquet )
- AWS Athena 학습 및 이해
- SQL 작성 역량
AWS 회원가입 진행
- AWS는 우선 개인 자격으로 가입해주시면 됩니다. (일정 부분 free tier 사용 가능합니다.)
- 과제 제출 후 발생한 비용에 대해서는 비용 지원드립니다.
과제 개요
- CSV형태로 되어 있는 Event Data, Attribution Data 를 다운로드 하고 S3에 업로드 합니다.
- 프로그래밍을 통해 csv파일을 parquet으로 변환합니다.
- athena metastore와 연결합니다.
- SQL을 통해 결과를 얻습니다.
Event Data
- 스키마
No. | Column Name | Type | Description |
---|---|---|---|
1 | identity_adid | string | 사용자 고유 아이디 |
2 | os | string | 사용자 기기 OS |
3 | model | string | 사용자 기기 모델 |
4 | country | string | 사용자 접속 국가 |
5 | event_name | string | 이벤트 이름 |
6 | log_id | string | 로그 고유 아이디 |
7 | server_datetime | timestamp | 서버 로그 시간 |
8 | quantity | int | 구매 횟수 (event_name이 abx:purchase일때만 사용) |
9 | price | decimal | 구매 금액 (event_name이 abx:purchase일때만 사용) |
<표 1. Event >
- 데이터 설명 : 사용자 행동을 기록한 데이터 입니다.
Attribution Data
- CSV : https://s3-ap-northeast-1.amazonaws.com/adbrix-employment/DataLab/V20180613/attribution/part-00000
- 스키마
No. | Column Name | Type | Description |
---|---|---|---|
1 | partner | string | 광고 파트너 아이디 |
2 | campaign | string | 광고 캠페인 아이디 |
3 | server_datetime | timestamp | 서버 로그 시간 |
4 | tracker_id | string | 광고 추적 URL 아이디 |
5 | log_id | string | 로그 고유 아이디 |
6 | attribution_type | int | 광고 전환 타입 0: new install 1: re install 2: re open |
7 | identity_adid | string | 사용자 고유 아이디 |
< 표2. attribution >
- 데이터 설명 : 광고를 통합 유입을 기록한 데이터입니다.
SQL Query 작성
모든 쿼리에는 조건에 시작 날짜와 종료 날짜를 넣습니다.
이 점 고려해서 Athena 구성과 쿼리 작성해주세요.
일별 Active User 데이터 추출
일자 | active User |
---|---|
2018-05-27 | 25,000 |
2018-05-28 | 30,000 |
2018-05-29 | 40,000 |
일별 구매 유저 및 구매 금액 추출
일자 | active User | 구매 금액 |
---|---|---|
2018-05-27 | 25,000 | 1,000,000 |
2018-05-28 | 30,000 | 1,500,000 |
2018-05-29 | 40,000 | 2,000,000 |
이벤트별 User 데이터 추출
event | active user |
---|---|
abx:first_open | 50,000 |
abx:login | 35,000 |
abx:purchase | 30,000 |
캠페인별 User 데이터 추출
campaign_id | active user |
---|---|
campaign1 | 20,000 |
campaign2 | 30,000 |
campaign3 | 40,000 |
캠페인별 구매 금액 추출
campaign_id | active_user | 구매 금액 |
---|---|---|
campaign1 | 20,000 | 1,000,000 |
campaign2 | 30,000 | 1,500,000 |
campaign3 | 40,000 | 2,000,000 |
국가, 캠페인별 구매 금액 추출
country | campaign_id | active_user | 구매 금액 |
---|---|---|---|
kr | campaign1 | 15,000 | 850,000 |
kr | campaign2 | 25,000 | 1,200,000 |
jp | campaign1 | 5,000 | 150,000 |
Funnel 데이터 추출
일자 | abx:firstopen 수행 유저 | abx:login 수행 유저 | abx:purchase 수행 유저 |
---|---|---|---|
2018-05-27 | 30,000 | 25,000 | 20,000 |
2018-05-28 | 25,000 | 22,000 | 20,000 |
2018-05-29 | 20,000 | 17,000 | 15,000 |
파트너별 new_install 유저의 funnel 데이터 추출
partner | new install user | abx:firstopen 수행 유저 | abx:login 수행 유저 | abx:purchase 수행 유저 |
---|---|---|---|---|
8MCosUQMik2Muvd-MU0lew | 40,000 | 40,000 | 30,000 | 20,000 |
일자별 리텐션
신규 접속 일자(abx:firstopen을 처음 수행한 유저) | D+0 | D+1 | D+2 | D+3 | D+7 |
---|---|---|---|---|---|
50,000 | 50,000 | 30,000 | 25,000 | 20,000 | 10,000 |
과제 결과물 제출
- Athena에 질의한 SQL과 결과물들을 zip 압축하여 제출
- 파일 포맷
- 작성한 SQL : query-1.sql
- 결과데이터 : query-1.csv
- 수행로그 스크린샷 : query-1.[ jpg, png, bmp, ... ]
- 파일 포맷
- EMR 소스 코드를 github 업로드 후 제출
- aws accesskey, secretkey는 github에 업로드는 피해주세요. 해킹 위험 혹은 과도한 서버 비용이 발생할 수 있습니다.
참고 자료
- 리텐션 정의 및 쿼리 작성방법 : https://www.periscopedata.com/blog/how-to-calculate-cohort-retention-in-sql
- 펀널 정의 및 쿼리 작성방법 : https://www.periscopedata.com/blog/funnel-metrics-step-over-step-drop-rates
- dotnet core parquet : https://github.com/elastacloud/parquet-dotnet
- scala parquet : https://spark.apache.org/docs/latest/sql-programming-guide.html
제출 기한
- 과제 전달 시점으로부터 최대 7일 이내 제출
- 과제 결과물 제출이 빠를수록 추가 점수 부여
과제 문의
- 서류 합격 연락을 받은 이메일 혹은 abx_dev@igaworks.com 으로 문의주시면 최대한 빠르게 답변드리겠습니다