Warren's blog

Product Analysis, Growth

GA4 & 빅쿼리 테이블 만료시간(table expiration) 일괄 변경

이전에 포스팅한 글을 통해 GA4의 데이터를 Bigquery로 보내는 방법을 설명했습니다. 이 글을 보시는 분들은 대부분 이것을 완료 했을 것이라고 생각하지만, 궁금하신 분들을 위해 링크를 남겨놓습니다. 이번 글에서는 GA4에서 전송한 빅쿼리 데이터 세트의 events_ 테이블의 만료시간(table expiration)을 변경하는 것에 대해 설명합니다.

Google Analytics 4(GA4)를 통해 수집한 데이터를 Google Cloud Platform의 BigQuery로 내보내어 활용하는 경우, 데이터의 보관 기간을 필수적으로 확인해야 합니다.

GA4에서 BigQuery로 데이터를 내보낸 테이블은 유료플랜이 아닌 GCP 샌드박스 모드의 경우 60일 후에 만료됩니다. 그러나 이후 유료 결재 모드로 전환한다면, 데이터 세트의 기본 테이블 만료시간(Table expiration)을 설정할 수 있습니다. 이를 통해 데이터를 보다 오랫동안 보관하거나 영구 보존할 수 있습니다.

Bigquery 샌드박스 모드에서는 GA4에서 내보낸 analytics_yourpropertyid 데이터 세트의 events_ 의 기본적인 테이블 만료시간(Table expiration)은 60일 입니다.

샌드박스 모드를 변경하기 위해서는 결재정보를 추가하고, 유료 결재 모드로 변경해야 합니다. 이것은 데이터 보존과 Bigquery 사용량, GCP에 포함된 기능을 얼마나 활용하는지에 따라 결재 금액이 달라집니다. 데이터를 지속적으로 보관해야 하는 경우 유료 결재 수단을 등록하고 변경할 것을 추천합니다.

이 글에서는 유료 결재 이후 BigQuery에서 GA4 이벤트 데이터를 보다 오래 유지하고자 할 때 참고하면 좋습니다.
테이블의 만료시간(Table expiration)을 일괄적으로 변경하는 방법을 안내합니다. 기존에 쌓인 GA4 이벤트 데이터의 테이블 만료시간(Table expiration)을 수정하여 영구 보존하도록 설정할 것입니다.

먼저, 유료 결재 이후에는 데이터 세트의 기본 테이블 만료시간(Table expiration)을 “none”으로 설정합니다. 이렇게 하면 새로운 데이터가 BigQuery에 적재될 때 만료 시간이 자동으로 설정되지 않습니다.

기본 테이블 만료시간 변경 이후 쌓이는 테이블은 “만료되지 않음”으로 표시됩니다.

하지만, 이미 쌓인 GA4 이벤트 데이터의 테이블 만료 시간(Table expiration)의 경우 수동으로 변경해야 합니다. 이미 쌓여버린 테이블의 수가 많은 경우 테이블마다 만료시간을 재설정하는 것은 번거롭기 때문에 GCP에서는 이것을 일괄변경할 수 있는 기능을 제공하고 있습니다. BigQuery의 ALTER TABLE 문을 사용하여 각 테이블의 만료시간을 수정할 수 있습니다.

GCP에서도 해당 내용을 참고할 수 있습니다.

https://cloud.google.com/bigquery/docs/managing-tables?hl=ko#updating_a_tables_expiration_time

GCP에서는 데이터세트 수준에서 기본 테이블 만료시간(Table expiration)을 설정하거나 테이블을 만들 때 테이블 만료시간을 설정할 수 있고, 테이블 만료시간(Table expiration)을 ‘수명’ 또는 TTL이라고도 한다고 설명합니다. GCP에서 제공하는 쿼리의 예시는 다음과 같습니다.

ALTER TABLE mydataset.mytable
  SET OPTIONS (
    description = 'Description of mytable');

이것을 실전에서 적용하기 편하도록 변경해보겠습니다.

ALTER TABLE `project_id.dataset_id.events_20240101` SET OPTIONS (expiration_timestamp = NULL);
ALTER TABLE `project_id.dataset_id.events_20240102` SET OPTIONS (expiration_timestamp = NULL);
ALTER TABLE `project_id.dataset_id.events_20240103` SET OPTIONS (expiration_timestamp = NULL);
ALTER TABLE `project_id.dataset_id.events_20240104` SET OPTIONS (expiration_timestamp = NULL);

위의 쿼리에서 project_iddataset_id는 해당하는 프로젝트와 데이터 세트의 식별자로 대체되어야 합니다. 각 테이블의 이름은 해당하는 이벤트 날짜에 따라 달라집니다. 이를 적절히 수정하여 실행하여야 합니다.

이를 성공적으로 완료했다면, 기존에 이미 쌓인 테이블역시 테이블 정보에서 “표 만료”항목이 “사용 안함” 혹은 “None”등으로 표시될 것입니다.

유료결재가 부담스럽다면, 샌드박스 모드에서 주기적으로 필요에 따라 데이터 세트를 가공해 로컬에 저장하는 것이 좋겠습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다