BigQuery 테이블¶
개요¶
BigQuery 권한을 받은 뒤 조회할 수 있는 데이터셋과 테이블의 종류, 테이블별 용도와 주요 컬럼을 확인할 수 있습니다.
BigQuery 권한 신청과 접속 방법은 BigQuery 설정을 참고하세요.
| 데이터셋 | 설명 |
|---|---|
habq-storage.analytics_N_live | 상용 환경 데이터. 상용 환경에서 권한을 신청하면 조회 가능 |
habq-storage.analytics_N_sandbox | 샌드박스 환경 데이터. 샌드박스 환경에서 권한을 신청하면 조회 가능 |
Note
BigQuery에 접속하면 권한이 부여된 데이터셋만 표시됩니다. N에 해당하는 값은 별도로 확인하지 않아도 됩니다.
테이블 목록¶
테이블은 용도에 따라 이벤트 테이블과 서비스 테이블로 구분됩니다.
| 구분 | 설명 |
|---|---|
| 이벤트 테이블 | 지표의 데이터 소스가 되는 테이블과 격리 테이블. 데이터를 분석하거나 확인할 때 직접 조회하는 테이블 |
| 서비스 테이블 | 이벤트 테이블을 만들거나 콘솔·분석 기능을 지원하기 위해 생성하는 테이블. 직접 조회하지 않아도 되며 참고용으로 제공 |
이벤트 테이블¶
| 테이블 | 설명 |
|---|---|
t_raw_event_log | (지표 데이터 소스) 모든 이벤트 로그가 통합 저장되는 원본 테이블 |
t_raw_event_log_rescue | 전송 규칙을 위반해 t_raw_event_log에 저장되지 못한 로그를 원본 그대로 보관하는 격리 테이블 |
t_aggregation_index | (지표 데이터 소스) 누적 지표를 별도로 제공하기 위해 집계한 최종 결과 |
서비스 테이블¶
서비스 테이블은 직접 조회하는 용도가 아니라, 데이터가 어떻게 만들어지는지 이해하기 위한 참고용으로 제공됩니다.
| 테이블 | 설명 |
|---|---|
t_aggregation_login_master | t_aggregation_index를 만들기 위한 중간 집계 테이블. 접속한 유저(userId)를 처음 확인한 날짜 기록 (누적 접속자 수 집계용) |
t_aggregation_terms_master | t_aggregation_index를 만들기 위한 중간 집계 테이블. 약관에 동의한 기기(deviceId)를 처음 확인한 날짜 기록 (누적 설치 수 집계용) |
t_aggregation_buyer_master | t_aggregation_index를 만들기 위한 중간 집계 테이블. 결제한 유저(userId)를 처음 확인한 날짜 기록 (누적 구매자 수 집계용) |
t_aggregation_prerelease_revenue | 게임 정식 출시일 이전에 발생한 매출을 날짜·조건별로 미리 계산해 둔 테이블 (출시 전 매출이 있는 경우에만 데이터 존재) |
tmp_aggregation_stg_* | 집계 처리 중에만 존재하는 임시 테이블 (생성 1일 후 자동 삭제) |
system_custom_event_user_state | t_raw_event_log에 반영하기 위한 중간 집계 테이블. 유저·이벤트별로 처음 발생했을 때와 마지막으로 발생했을 때의 시각과 속성을 저장한 테이블 |
system_derived_event_* | 파생 이벤트 생성 작업의 진행 상태를 기록하는 내부 처리용 테이블 |
meta_event | 보유한 이벤트 목록 |
meta_event_dimension | 이벤트별 속성 정의 (속성명, 자료형, 출처) |
meta_event_dimension_value | 속성에 실제로 수집된 값 (문자형은 값 목록, 숫자형·시간형은 최솟값·최댓값 범위) |
meta_event_latest_date | 이벤트별 마지막 데이터 날짜 |
system_attribute_raw | meta_event_dimension_value를 만드는 원본 속성 목록. attributes JSON에서 파이프라인이 생성한 hiveAttributes를 제외한 모든 속성과 값, 값별 수집 횟수, 최초·최종 수집 시각 |
segment_* / snapshot_* | 콘솔에서 생성한 세그먼트·스냅샷 결과 ({종류}_{번호}_{일시}_{난수} 형식, 생성할 때마다 새 테이블 생성) |
테이블별 상세¶
이벤트 테이블¶
t_raw_event_log¶
게임에서 전송된 모든 이벤트 로그가 저장되는 테이블입니다. 한 행이 "누가(userId) / 어떤 기기로(deviceId) / 어떤 게임에서(appIdGroup) / 언제(dateTime) / 어떤 속성으로(attributes) / 무엇을 했는지(eventName)"를 나타냅니다.
컬럼 구조와 attributes JSON의 세부 속성은 이벤트 저장 구조를 참고하세요.
t_raw_event_log_rescue¶
t_raw_event_log에 저장되지 못한 로그를 원본 그대로 보관하는 격리 테이블입니다. t_raw_event_log와 같은 컬럼에 원본 문자열(rawData), 격리 사유(errorReason), 상세 정보(errorStackTrace)가 추가됩니다.
- 격리된 로그가 있는 경우에만 생성됩니다.
dateTime은 잘못된 값도 보관해야 하므로 TIMESTAMP가 아닌 STRING으로 저장됩니다.t_raw_event_log에서 데이터가 보이지 않으면 이 테이블을 먼저 확인하세요.
격리 사유와 대응 방법은 이벤트 저장 구조의 데이터 격리를 참고하세요.
t_aggregation_index¶
누적 지표를 별도로 제공하기 위해 원본 로그를 집계해 저장하는 테이블로, t_raw_event_log와 함께 지표의 데이터 소스가 됩니다. 누적 접속자 수처럼 고유 인원을 세는 지표는 중간 집계 테이블의 결과를 바탕으로 저장됩니다. 한 행이 "어떤 게임의 / 어떤 날짜의 / 어떤 기간 방식으로 본 / 어떤 지표의 / 어떤 조건별 값" 하나를 나타냅니다.
| 컬럼 | 설명 | 예시 |
|---|---|---|
appIdGroup | 게임 식별자 | com.sample.test |
dateTime | 대상 날짜 | 2026-10-04 |
periodType | 기간 방식. day(해당 일), cumulative(전체 기간 누적) | day |
aggName | 지표 묶음. agg_users(접속), agg_sales(매출), agg_terms(설치) | agg_sales |
dimKey | 조건 축. *는 해당 축 전체를 의미 | country=*\|market=*\|serverId=* |
attributes | 실제 지표 값이 저장되는 JSON (measure 아래에 지표별 값) | measure.au, measure.revenue, measure.pu |
checksum | 행 식별용 해시값 |
지표 값은 컬럼이 아니라 attributes JSON 안에 있으므로 JSON_VALUE로 조회합니다.
SELECT JSON_VALUE(attributes, '$.measure.revenue') AS revenue
FROM `habq-storage.analytics_N_live.t_aggregation_index`
WHERE aggName = 'agg_sales'
AND periodType = 'cumulative'
AND appIdGroup = 'com.sample.test' -- 사용하는 실제 appIdGroup
AND dimKey = 'country=*|market=*|serverId=*' -- 전체 합계
AND DATE(dateTime) = '2026-10-04'
Warning
같은 날짜·지표라도 dimKey에 따라 "전체", "한국", "한국 × Google Play"처럼 여러 행이 있습니다. 전체 합계는 모든 축이 *인 행 하나만 조회하세요. 여러 행을 더하면 중복 집계됩니다.
서비스 테이블¶
서비스 테이블은 참고용으로 제공되며, 직접 조회하지 않아도 됩니다.
t_aggregation_*_master¶
t_aggregation_index를 만들기 위한 중간 집계 테이블로, 유저나 기기를 처음 확인한 날짜만 기록합니다. 누적 접속자 수처럼 날짜별로 더할 수 없는 고유 인원을 집계하는 데 사용되며, 집계 결과는 t_aggregation_index에 저장됩니다.
| 테이블 | 대상 | 사용 지표 |
|---|---|---|
t_aggregation_login_master | 접속한 유저(userId) | agg_users 누적 접속자 수 |
t_aggregation_terms_master | 약관에 동의한 기기(deviceId) | agg_terms 누적 설치 수 |
t_aggregation_buyer_master | 결제한 유저(userId) | agg_sales 누적 구매자 수 |
| 컬럼 | 설명 |
|---|---|
appIdGroup | 게임 식별자 |
userId / deviceId | 대상 식별자 |
country, market (serverId) | 처음 확인했을 때의 국가·마켓 (t_aggregation_buyer_master는 서버 포함) |
firstSeenDate / firstSeenAt | 처음 확인한 날짜 / 시각 |
updatedAt | 행이 마지막으로 갱신된 시각 |
Note
이 테이블들은 새 유저·기기를 추가만 하고 삭제하지 않습니다. 또한 집계 시점 이후에 늦게 도착한 데이터는 반영되지 않습니다. 이로 인해 이 테이블 기반 누적 지표는 원본 로그로 다시 계산한 값과 다를 수 있습니다.
system_custom_event_user_state¶
t_raw_event_log에 반영하기 위한 중간 집계 테이블로, 유저·이벤트별로 처음 발생했을 때와 마지막으로 발생했을 때의 시각과 속성을 한 행으로 저장합니다.
| 컬럼 | 설명 |
|---|---|
userId | 계정 기준 유저 식별자 |
deviceId | 단말 기준 유저 식별자 |
appIdGroup | 게임 식별자 |
eventName | 이벤트명 |
firstEventTime, firstAttributes | 최초 발생 시각과 당시 속성 |
lastEventTime, lastAttributes | 최종 발생 시각과 당시 속성 |
meta_event¶
보유한 이벤트 목록입니다. 한 행이 이벤트 하나를 나타냅니다.
| 컬럼 | 설명 |
|---|---|
eventName | 이벤트명 |
dataSource | 이벤트가 유입된 경로 (custom_server, custom_sdk 등) |
tableName | 이벤트 데이터가 저장된 테이블명 |
meta_event_dimension¶
이벤트별 속성 정의입니다. 한 행이 이벤트의 속성 하나를 나타냅니다.
| 컬럼 | 설명 |
|---|---|
eventName | 이벤트명 |
dimensionName | 속성명 |
dataType | 속성의 자료형 |
attributeSource | 속성이 저장된 영역 (hiveAttributes 또는 eventAttributes) |
meta_event_dimension_value¶
속성에 실제로 수집된 값입니다. 문자형은 값 목록을, 숫자형·시간형은 최솟값·최댓값 범위를 저장합니다.
| 컬럼 | 설명 |
|---|---|
key | 속성명 |
value | 수집된 값 (숫자형·시간형은 최솟값·최댓값) |
dataType | 속성의 자료형 |
valueType | 값의 저장 방식 (값 목록 또는 최솟값·최댓값 범위) |
meta_event_latest_date¶
이벤트별 마지막 데이터 날짜입니다.
| 컬럼 | 설명 |
|---|---|
lastDataDate | 데이터가 있는 마지막 날짜 |
sourceTable | 날짜를 확인한 원본 테이블 |
system_attribute_raw¶
meta_event_dimension_value를 만드는 원본 속성 목록으로, attributes JSON에서 파이프라인이 생성한 hiveAttributes를 제외한 모든 속성과 값을 정리합니다.
| 컬럼 | 설명 |
|---|---|
eventName, appIdGroup | 이벤트와 게임 |
key, value | 속성명과 수집된 값 |
dataType | 속성의 자료형 |
valueCount | 값이 수집된 횟수 |
firstTime, lastTime | 최초·최종 수집 시각 |
attributeSource | 속성이 저장된 영역 (hiveAttributes 또는 eventAttributes) |
dataSource | 이벤트가 유입된 경로 |
주의사항 & Tips¶
t_raw_event_log,t_aggregation_index는dateTime기준 일별 파티션 테이블입니다. 조회 비용을 줄이려면 날짜 조건을 함께 지정하세요.