가상 속성 생성 모범 사례
가상 속성은 이미 적재된 속성 필드를 SQL 표현식으로 다시 계산하여 생성하는 속성입니다. 가상 속성의 SQL 표현식은 trino 문법을 사용하며, Trino 문서에서 trino 문법과 함수 사용 방법을 확인할 수 있습니다.
활용 시나리오 1: 시간 차이 계산
트래킹 시에는 일반적으로 유저 라이프사이클 일수를 이벤트 속성으로 수집하지 않습니다. 이 경우 이벤트 속성에 유저 가입 시간을 추가한 다음, 다음 방법으로 유저가 이벤트를 발생시킨 시점의 라이프사이클을 구할 수 있습니다. date_diff(unit, timestamp1, timestamp2) 함수로 유저 속성 가입 시간과 이벤트 속성 이벤트 시간의 간격 일수를 계산하여 유저 라이프사이클 (일) 이라는 가상 유저 속성을 생성할 수 있습니다. 예: date_diff('day', date("register_time"), date("#event_time")).
활용 시나리오 2: 타입 변환
사용 중에 전송된 속성 타입이 예상과 다른 경우가 있습니다. 이때 cast(value AS type) 함수로 속성 타입을 변환할 수 있습니다. 속성 값을 예상 타입으로 강제 변환할 수 없으면 새 속성 값은 비어 있게 되므로 주의하십시오. 규칙 예: cast(old_prop_string as int)
활용 시나리오 3: 타임스탬프 변환
가입 시간 등의 커스텀 속성이 숫자 타입의 타임스탬프로 업로드된 경우, from_unixtime(unixtime) 함수로 시간 형식으로 변환하면 시스템에서 필터, 그룹 등의 작업을 할 수 있습니다. 규칙 예: from_unixtime("register_time")
활용 시나리오 4: 문자 추출
경우에 따라 한 속성에 전송된 내용이 여러 정보의 조합일 수 있습니다. 예를 들어 보상 획득 속성의 값이 문자열 "다이아 300"으로 전송된 경우, 이 속성에서 고정된 위치의 문자를 잘라 새 속성으로 만들고 싶다면 cast(substring("get_reward", 5, 4) as int) 표현식으로 구현할 수 있습니다. substring(string, start, length) 함수는 문자열에서 start부터 길이 length만큼의 부분을 잘라내며, cast(value AS type) 함수로 잘라낸 부분을 숫자 타입으로 변환하여 이후 분석에 사용합니다.
활용 시나리오 5: 복합 중복 제거
게임 데이터 분석 시나리오에서는 계정 ID, 서버 ID 등을 공통 이벤트 속성으로 기록하는 경우가 많습니다. 하지만 현재 시스템은 단일 속성에 대한 중복 제거 계산만 제공하므로, 계정 ID와 서버 ID를 함께 기준으로 중복을 제거하려면 concat(server_id, '@',account_id) 규칙으로 가상 속성을 생성하면 됩니다. 여기서 concat(string1, ..., stringN) 함수는 여러 텍스트형 속성을 이어 붙이는 데 사용합니다.
활용 시나리오 6: 조건 판단
게임 테스트 단계에서는 데이터 초기화가 이루어지는 경우가 있습니다. 초기화 전후로 유저 ID는 바뀌지 않지만 초기화 전후의 이벤트 데이터는 서로 독립적이어서 이어지지 않으며, 서버 구간마다 초기화 시간이 다를 수도 있습니다. 이때 하나의 속성으로 개별 유저의 이벤트가 초기화 전인지 후인지 구분하려면 다음과 같은 가상 속성을 생성하면 됩니다:
case
when "serverid" = 1 and "#event_time" > cast('2020-11-15 10:30:00.000' as timestamp) then '초기화 후'
when "serverid" = 2 and "#event_time" > cast('2020-11-22 10:30:00.000' as timestamp) then '초기화 후'
else '초기화 전'
end
활용 시나리오 7: 상수
IF 함수로 값이 상수인 가상 속성을 생성할 수 있습니다. 예를 들어 잔존 분석 모델에서 재방문 유저 수의 누적 합계를 함께 보고 싶다면, 상수 1인 가상 속성을 생성한 다음 이 속성으로 집계 계산을 하면 됩니다. 규칙은 다음과 같습니다
if("#event_time" is not null, 1, 1). 여기서 "#event_time"은 일반적으로 값이 비어 있지 않은 시스템 필드로 설정하면 됩니다.

