광고 문의

← 팩트체크 / 측정/데이터/리포팅

측정/데이터/리포팅

빅쿼리와 GA4를 연동해서 원시 로그 데이터를 SQL 쿼리로 직접 추출해 유저별 마이크로 세그먼트를 생성하려면 어떤 쿼리 템플릿이 필요한가요?

먼저 GA4 BigQuery 내보내기의 구조부터 알아야 쿼리를 짤 수 있습니다. GA4를 BigQuery로 내보내면 이벤트 단위로 하루치 데이터가 event_date 기준 테이블(events_YYYYMMDD)에 쌓이고, event_params·user_properties·items 같은 필드는 중첩·반복 레코드 구조로 들어옵니다. 일반 관계형 테이블처럼 SELECT event_params.value만으로는 값을 못 꺼내고, UNNEST() 함수로 배열을 펼친 뒤 원하는 key를 필터링해야 값을 추출할 수 있다는 게 가장 기본적인 특징입니다.

기본 쿼리 템플릿 패턴은 'SELECT user_pseudo_id, (SELECT value.int_value FROM UNNEST(event_params) WHERE key = "ga_session_id") AS session_id, event_name, event_timestamp FROM `프로젝트.analytics_속성ID.events_*` WHERE _TABLE_SUFFIX BETWEEN "20260801" AND "20260831"'처럼, 서브쿼리로 UNNEST(event_params)에서 원하는 key의 값을 뽑고, 와일드카드 테이블에 _TABLE_SUFFIX 조건으로 조회 기간을 지정하는 구조입니다.

마이크로 세그먼트는 user_pseudo_id로 GROUP BY 한 뒤 COUNTIF·SUM 같은 집계함수와 HAVING 절 조건을 조합해 만듭니다. 예를 들어 '최근 30일 내 특정 페이지를 3회 이상 방문했지만 구매는 안 한 유저'는 'GROUP BY user_pseudo_id HAVING COUNTIF(event_name="page_view" AND 페이지조건) >= 3 AND COUNTIF(event_name="purchase") = 0' 같은 패턴으로 정의합니다. HAVING에 조건을 계속 추가하면 세그먼트를 더 세밀하게 좁힐 수 있습니다.

마지막으로 비용 관리를 꼭 챙기셔야 합니다. BigQuery는 스캔한 데이터량 기준으로 과금되므로, _TABLE_SUFFIX 조건 없이 전체 events_* 테이블을 스캔하는 쿼리를 실수로 돌리면 비용이 크게 늘 수 있습니다. 조회 기간을 반드시 _TABLE_SUFFIX BETWEEN으로 제한하고, 콘솔의 '쿼리 유효성 검사기'로 실행 전 예상 스캔 용량을 확인하는 습관을 들이시길 권합니다.

비슷한 상황이신가요

우리 계정에 똑같이 적용되는지는 상황마다 다릅니다. 무료로 점검해드립니다.

광고 문의하기
← 팩트체크 전체로 돌아가기

관련 팩트체크