SQL을 마케터가 왜 알아야 하나

빅쿼리에 GA4 로우 데이터가 쌓이기 시작하면, "지난달에 특정 상품을 구매한 유저만 뽑아달라" 같은 요청이 자주 생깁니다. 이런 요청을 매번 개발팀에 넘기면 회신을 기다리는 시간이 필요하고, 급하게 캠페인 타겟팅에 써야 할 리스트가 하루이틀 늦어지기도 합니다.

빅쿼리는 표준 SQL(정확히는 GoogleSQL이라는 이름의 방언)을 씁니다(공식 문서 기준). SQL의 기본 문법인 SELECT-FROM-WHERE 구조만 익혀도, 수천만 행의 이벤트 데이터 중 원하는 조건에 맞는 행만 몇 초 만에 뽑아낼 수 있습니다. 마케터가 SQL 전문가가 될 필요는 없지만, 이 정도 기본기만 있어도 데이터 추출을 위해 매번 개발팀 일정을 기다리는 병목을 줄일 수 있습니다.

SELECT-FROM-WHERE 기본 구조는 어떻게 읽나

빅쿼리 표준 SQL의 기본 문장 구조는 "SELECT 어떤 열을 볼지, FROM 어느 테이블에서, WHERE 어떤 조건에 맞는 행만"이라는 순서를 따릅니다(공식 문서 기준). 예를 들어 다음과 같은 문장을 생각해볼 수 있습니다.

SELECT user_pseudo_id, event_name, event_date
FROM `프로젝트명.데이터셋명.events_202607*`
WHERE event_name = 'purchase'

이 문장을 그대로 읽으면 "events로 시작하는 테이블에서, event_name이 'purchase'인 행만, user_pseudo_id·event_name·event_date 세 열을 보여줘"라는 뜻입니다. WHERE 절은 그룹화나 집계가 일어나기 전에 행 단위로 조건을 걸러내는 역할을 합니다(공식 문서 기준). 조건을 여러 개 걸고 싶다면 WHERE 뒤에 AND나 OR로 조건을 이어 붙이면 됩니다.

특정 상품·특정 기간 조건은 어떻게 추가하나

"지난달 특정 상품을 구매한 유저"라는 요청을 SQL로 옮기면, purchase 이벤트이면서 items 배열 안에 해당 상품명이 포함된 행을 찾는 조건이 됩니다. GA4 이커머스 이벤트는 item_name, item_id 같은 정보를 items라는 배열 형태로 담고 있어서, 이 배열 안의 값을 조회하려면 UNNEST라는 함수로 배열을 풀어주는 절차가 하나 더 필요합니다. 처음에는 이 부분이 낯설게 느껴질 수 있는데, 이커머스 데이터를 다룰 때 반복적으로 나오는 패턴이라 몇 번 써보면 익숙해집니다.

기간 조건은 GA4 익스포트 테이블의 구조와 관련이 있습니다. GA4 BigQuery Export는 하루마다 events_YYYYMMDD라는 별도 테이블을 만들기 때문에(공식 문서 기준), "지난달" 전체를 조회하려면 테이블명에 와일드카드(*)를 써서 여러 날짜 테이블을 한 번에 묶어 조회하거나, _TABLE_SUFFIX라는 특수 조건으로 날짜 범위를 지정합니다. 테이블이 날짜별로 쪼개져 있다는 구조를 모른 채 테이블명 하나만 지정하면 하루치 데이터만 조회되는 실수를 하기 쉬우므로, GA4 익스포트 테이블을 다룰 때는 항상 이 점을 염두에 둬야 합니다.

처음 쿼리를 실행할 때 주의할 점은 무엇인가

빅쿼리는 조회하는 데이터양(스캔한 바이트 수)에 비례해 비용이 청구되는 구조입니다. 그래서 쿼리를 작성하는 중에는 LIMIT 절로 결과 행 수를 10~100건 정도로 제한해두고, 문법이 맞게 작동하는지 먼저 확인한 뒤 조건을 완성하는 순서가 안전합니다. LIMIT은 반환되는 행 수만 줄일 뿐 스캔 비용 자체를 줄이지는 않지만, 쿼리 문법 오류를 빠르게 확인하는 데는 여전히 유용합니다.

또한 빅쿼리 콘솔은 쿼리를 실행하기 전에 "이 쿼리가 몇 GB를 스캔할 예정인지" 미리 보여주는 기능이 있습니다. 실행 버튼을 누르기 전 이 예상 스캔량을 확인하는 습관을 들이면, 실수로 전체 데이터셋을 스캔하는 값비싼 쿼리를 사전에 걸러낼 수 있습니다. 처음에는 작은 조건으로 연습하다가, 점점 필요한 조건을 늘려가는 방식으로 SQL에 익숙해지는 것을 권장합니다.

GROUP BY까지는 알아두면 좋은가

개별 유저 목록을 뽑는 것을 넘어 "상품별로 몇 명이 구매했는가"처럼 집계된 숫자가 필요하다면 GROUP BY 절이 필요합니다. GROUP BY는 지정한 열의 값이 같은 행끼리 묶어, COUNT나 SUM 같은 집계 함수로 합계·개수를 계산하게 해줍니다. WHERE로 조건을 거른 뒤 GROUP BY로 묶고 집계 함수로 세는 흐름은 마케팅 데이터 추출에서 가장 자주 반복되는 패턴이므로, SELECT-FROM-WHERE에 익숙해진 다음 단계로 GROUP BY를 익혀두면 활용 범위가 크게 넓어집니다.

처음부터 조인(JOIN)이나 서브쿼리 같은 고급 문법까지 욕심낼 필요는 없습니다. 마케터 실무에서는 SELECT·WHERE·GROUP BY 세 가지 조합만으로도 유저 세그먼트 추출, 상품별 구매자 수 집계, 기간별 이벤트 건수 확인 같은 요청의 상당 부분을 스스로 처리할 수 있습니다.