[Bigquery] GCP 탐색
빅쿼리 스터디 시작~
Jul 12, 2023
문제풀이 형태로 진행하고 있었던 타임어택 SQL 스터디를 빅쿼리 스터디로 전환하기로 했다. 우리의 next 목표는 7월안에 <구글 빅쿼리 완벽 가이드> 책을 끝내고, 당당하게 GCP 이해도 높음을 이력서에 어필하는 것이다.
Google Analytics4, Firebase 예시 데이터셋을 위주로 뜯어보고 실제 서비스의 로그 데이터를 분석할 때, 어떤 쿼리문을 작성하면 좋을지를 위주로 연습하려고 한다.
GCP를 공부해야하는 이유
- Bigquery를 다양하게 다뤄보신 분 (당근마켓 DA 공고)
- Appsflyer, Adjust 등의 어트리뷰션 툴 또는 Google Analytics, Firebase, BigQuery 등의 로그분석 툴을 사용한 경험이 있는 분 (마이리얼트립 DA공고)
- SQL(Bigquery, Mysql, Redshift 등), Python(Pandas), R, Excel 등을 활용한 데이터 분석이 가능한 분 (콴다 DA공고)
어떻게 효율적으로 공부할까
- coursera 강의 (월$9.99~)
- 카일스쿨님 핸드북 (기본적인 내용만 있음)
- 빅쿼리 SQL 그 이상의 기능 탐색 + 고급 SQL -
starts from here
dataset <flood it!> - 일단 샘플 데이터셋부터 뜯어보쟈!
내가 준비한 세션 : 빅쿼리에 쿼리를 날려보기/결과값 확인하기/ looker studio&colab 연결해서 시각화하기/ firebase 데이터셋 구조(event property, user property란?), 데이터타입(array, struct)
- 게임앱 데이터셋 (가상)
- data schema
- 따라서 쿼리를 쳐보자!
- 빅쿼리 document와 친해져야해!
- google analytics, firebase의 독특한 데이터타입을 공부해보자!
- UDF (Function을 만들어서 사용해요) https://zzsza.github.io/gcp/2019/09/20/bigquery-udf/
CREATE { TEMPORARY | TEMP } FUNCTION function_name ([named_parameter[, ...]]) [RETURNS data_type] AS (function_definition);
# UDF for event parameters CREATE TEMP FUNCTION paramValueByKey(k STRING, params ARRAY<STRUCT<key STRING, value STRUCT<string_value STRING, int_value INT64, float_value FLOAT64, double_value FLOAT64 >>>) AS ( (SELECT x.value FROM UNNEST(params) x WHERE x.key=k) ); # UDF for user properties CREATE TEMP FUNCTION propertyValueByKey(k STRING, properties ARRAY<STRUCT<key STRING, value STRUCT<string_value STRING, int_value INT64, float_value FLOAT64, double_value FLOAT64, set_timestamp_micros INT64 >>>) AS ( (SELECT x.value FROM UNNEST(properties) x WHERE x.key=k) ); SELECT user_pseudo_id, event_name, event_timestamp, propertyValueByKey('num_levels_available', user_properties).string_value AS num_levels_available, paramValueByKey('board', event_params).string_value AS board, paramValueByKey('firebase_screen_class', event_params).string_value as firebase_screen_class from `firebase-public-project.analytics_153293282.events_20181003` LIMIT 10
빅쿼리란?
- 쿼리엔진이 내장된 서버리스 서비스로 확장성이 높은 데이터 웨어하우스. 인프라 운영이 필요없음.
- OLTP(Online Transaction Processing) 데이터베이스 like mysql, postgresql
- 장점 : 데이터베이스 칼럼에서 raw데이터 뿐만 아니라 파싱, 집계, 필터링, 그룹화를 지원한다
- 단점 : 애드혹 쿼리 실행에 적합하지 않음 (필요에 따라 성능이 떨어지더라도 즉석에서 작성해서 실행하는 쿼리)
- 맵리듀스 프레임워크 : 효율적인 분산
- 서비리스 : 기술적으로 부서간에 필요한 데이터를 서로 나누어 유연하게 협업이 가능함
- 워크플로우와 구조
워크플로우 | 구조 | 사용 케이스 |
EL | 구글 클라우드 스토리지 파일에서 데이터 추출
빅쿼리 기본 스토리지에서 불러옴
클라우드 컴포저, 클라우드 펑션, 예약 쿼리에서 실행 | 히스토리 데이터를 배치 단위에서 불러오는 경우, 정기적으로 로그 파일을 불러오는 경우 |
ETL | 클라우드 데이터 플로우로 데이터 변환, 데이터플로우 파이프라인을 통해 빅쿼리 테이블에 저장 | 원시 데이터를 빅쿼리에 불러오기 전 품질관리, 변환, 보강해야하는 경우
데이터 불러오기가 지속적으로 필요한 경우 스트리밍
CI/CD 시스템과 통합하고 모든 구성요소에서 장치 테스트를 수행하는 경우 |
ELT | 구글 클라우드 스토리지의 파일에서 데이터 추출
원시형식으로 데이터 저장, 빅쿼리 뷰로 데이터를 즉시 변환 | 데이터 사용시 어떤 종류의 변환이 필요한지 아직 모르는 실험 데이터셋 |
GCP의 다양한 제품들
- Dataflow https://cloud.google.com/dataflow : 분산 데이터 처리 서비스. 데이터 처리 작업을 간단하게 구현하고 실행할 수 있는 플랫폼으로, 대규모 데이터셋을 처리하고 변환하는 데 사용됨
- Pub/Sub : 실시간 메시지 전달 서비스. Pub/Sub은 Publisher(발행자)와 Subscriber(구독자) 간에 비동기적으로 메시지를 전달하는 메시징 시스템.
→ 데이터 엔지니어링 쪽은 아직 낯선 용어들이 많다! 이 쪽도 열심히 파봐야징
Share article