본문 바로가기
Project

[블로그프로젝트#13] 빅쿼리 raw event 데이터 추출하기(.csv)

by yj-data 2026. 4. 7.

이전 글:

2026.04.01 - [Project] - [블로그프로젝트#12] BigQuery Export로 쌓은 raw event 살펴보기

 

[블로그프로젝트#12] BigQuery Export로 쌓은 raw event 살펴보기

어떤 데이터가 쌓이고 있는지 확인해보자. 1. 데이터 항목 확인하기 필드 이름유형모드설명키대조기본값정책태그데이터 정책세부내용 event_dateSTRINGNULLABLE------이벤트 생성일 event_timestampINTEGERNULL

yj-data.tistory.com


목차


    마스터 테이블 만들기

     

    1. 마스터 테이블에 들어갈 데이터 선택

    이전 글에서 BigQuery Export에서 볼 수 있는 데이터를 나열 했으니, 이 데이터 중 내가 분석에 사용할 '마스터 테이블'로 뽑을 정보를 찾아보았다. 

    기본필드 user_pseudo_id, event_date, event_timestamp, event_name, batch_event_index
    event_params.key. ga_session_id, batch_ordering_id, batch_page_id, page_title, page_referrer
    session_traffic_source_last_click.manual_campaign. source, medium
    session_traffic_source_last_click.cross_channel_campaign. default_channel_group
    geo. country
    device. category, operating_system

     

    일단 이 정도가 있으면 어느정도 분석은 가능할 듯 하다.

     

     

    2. 데이터는 어떤 확장자로? : .csv vs .parquet

    csv에 비해 parquet이 파일 크기도 작고, 읽기 속도도 빠르다. 그러나 태블로 퍼블릭 유저로서(Power BI 미숙) parquet을 사용하려면 csv나 hyper 로 변환 후 사용이 가능하기 때문에ㅠㅠ csv로 추출하기로 결정했다.

     

    3. 빅쿼리 raw event - flat table 만들기

    현재 내 데이터는 아래 부분(event_params)만 제외하면 모두 단일 행 데이터이기 때문에, 이 부분만 값을 추출해서 사용하기로 했다.

     

    여기서 주의사항

    • 몇십개 되는 컬럼을 그대로 두고 flatten 하면 데이터 양이 커질 것이다.
    • 어차피 사용할 컬럼은 <1. 마스터 테이블에 들어갈 데이터 선택> 에서 선택을 완료했다.
    • 따라서 event_params에 해당하는 5개 변수만 unnest하고 나머지는 그대로 뽑아주자. 형식은 flat table형식으로.

     

    쿼리작성 test

    SELECT
        event_date,
        
        (SELECT ep.value.int_value
        FROM UNNEST(event_params) AS ep
        WHERE ep.key = 'ga_session_id') AS session_id
        
    FROM `analytics_526092412.events_20260328`;

     

    시범으로 unnest에 들어가는 변수와 들어가지않는 변수를 하나씩 선택해서 추출해봤다. 

    • SELECT 뒤에 ep.value 까지 써줘도 되지만, int_value라고 지정해주면 쿼리가 데이터를 덜먹는다. 저런식으로 써주는 이유는 스키마가 아래와 같기 때문이다.

    • 테스트이므로 가장 작은 테이블로 테스트해봤다.

    얼마나 데이터를 먹는지 표시해줘서 좋다. 앞에 event_date 추가해도 1kb정도 추가되므로 부담없이 쿼리 ㄱㄱ.

     

    그리고 하나를 더 unnest 해봤더니..??

    잡아먹는 메모리는 그대로..!! 오오..역시 한번만 연산하면 된다 이건가.

     

    테스트 결과

    총 53행이고 그 중에 9개만 뽑아서 스샷을 찍었다.

     

    flat table화가 완료되었다. 원래 53행이었고, 각 행 당 event_params가 잔뜩 붙어있었는데, 최종적으로 이렇게 event_params가 각 행 별로 풀려나온다.

     

    최종 쿼리

    기본필드 user_pseudo_id, event_date, event_timestamp, event_name, batch_event_index
    session_traffic_source_last_click.manual_campaign. source, medium
    session_traffic_source_last_click.cross_channel_campaign. default_channel_group
    geo. country
    device. category, operating_system
    event_params.key. ga_session_id, batch_ordering_id, batch_page_id, page_title, page_referrer

     

    SELECT
      user_pseudo_id,
      event_date,
      TIMESTAMP_MICROS(event_timestamp) AS event_time,
      event_name,
      batch_event_index,
    
      session_traffic_source_last_click.manual_campaign.source,
      session_traffic_source_last_click.manual_campaign.medium,
      
      session_traffic_source_last_click.cross_channel_campaign.default_channel_group,
    
      geo.country,
      
      device.category,
      device.operating_system,
    
      (SELECT ep.value.int_value
      FROM UNNEST(event_params) AS ep
      WHERE ep.key = 'ga_session_id') AS session_id,
    
      (SELECT ep.value.int_value
      FROM UNNEST(event_params) AS ep
      WHERE ep.key = 'batch_ordering_id') AS batch_ordering_id,
    
      (SELECT ep.value.int_value
      FROM UNNEST(event_params) AS ep
      WHERE ep.key = 'batch_page_id') AS batch_page_id,
    
      (SELECT ep.value.string_value
      FROM UNNEST(event_params) AS ep
      WHERE ep.key = 'page_title') AS page_title,
    
      (SELECT ep.value.string_value
      FROM UNNEST(event_params) AS ep
      WHERE ep.key = 'page_referrer') AS page_referrer
    
    FROM `analytics_526092412.events_*`
    WHERE _TABLE_SUFFIX BETWEEN '20260327' AND '20260430';

     

    4. 데이터 다운받기

    결과창에서 결과 저장 클릭 > csv 로컬로 다운받기 선택.

    로컬 태블로 퍼블릭에서 돌릴거라서 이렇게 선택했다.

    (참고로 파일 크기는 사용하는 메모리 대비 50%정도 크기로 나오는 듯 하다. 400kb정도 쿼리 때 사용하면 다운받은 파일 크기는 200kb정도로 찍힌다.)


    다음 글은 태블로로 분석하는 내용에 대해 작성할 예정이다.✨