# 데이터 백트랙 기능
# 1. 개요
데이터 백트랙 기능은 SQL 문을 통해 TA 데이터베이스의 데이터를 조회한 후, 반환된 결과를 TA 데이터베이스에 입력하여 새로운 이벤트 또는 새로운 유저 속성을 생성하는 기능입니다.
# 2. 사용 지침
# 2.1 명령어 설명
TA 서버에 로그인한 후 su - ta
명령어를 실행하여 TA 유저로 전환합니다.
ta-tool user_event_import -conf
명령어를 실행하여 구성 파일을 읽습니다. 명령어는 다음과 같습니다:
ta-tool user_event_import -conf <config file> [--date data date]
# 2.2 명령어 파라미터 설명
# 2.2.1 -conf
필수 파라미터로, 데이터 백트랙 작업 구성 파일의 경로를 지정합니다. 와일드카드 방법을 지원하며, 예를 들어 /data/config/
또는 ./config/.json
과 같이 지정할 수 있습니다.
# 2.2.1 --date
선택적 파라미터로, 데이터 날짜를 나타내며, 이 참조 시간을 기준으로 시간 매크로가 대체됩니다. 파라미터가 없으면 기본적으로 현재 날짜를 사용하며, 형식은 YYYY-MM-DD
입니다. 시간 매크로 사용에 대한 자세한 내용은 시간 매크로 사용법을 참조하십시오.
# 2.2.3 예제
ta-tool user_event_import -conf /data/home/ta/import_configs/*.json
파라미터는 구성 파일의 전체 경로이며, 와일드카드를 사용하여 여러 구성 파일을 읽는 것을 지원합니다.
# 2.3 구성 파일 설명
# 2.3.1 샘플 구성 파일
데이터 백트랙 기능의 핵심은 쿼리 문과 구성 파라미터를 포함하는 구성 파일입니다.
구성 파일 하나는 하나의 데이터 백트랙 작업에 해당하며, 백트랙 이벤트에 대한 구성 파일은 다음과 같습니다:
{
"event_desc": {
"ltv_event": "user life cycle"
},
"appid": "APPID",
"type": "event",
"property_desc": {
"register_date": "registration date",
"date_prop": "LTV days"
},
"sql": "SELECT 'thinkinggame' \"#account_id\",'ltv_event' \"#event_name\",register_date \"#time\",register_date,ltv,date_prop FROM (SELECT recharge_money ltv,register_date,CASE date_trunc('day', cast(register_date AS TIMESTAMP)) WHEN CURRENT_DATE - interval '1' DAY THEN 'next day' WHEN CURRENT_DATE - interval '2' DAY THEN '3 days' WHEN CURRENT_DATE - interval '6' DAY THEN '7 days' WHEN CURRENT_DATE - interval '13' DAY THEN '14 days' WHEN CURRENT_DATE - interval '29' DAY THEN '30 days' ELSE NULL END date_prop FROM (SELECT sum(recharge_money) recharge_money ,register_date FROM (SELECT \"#user_id\" ,sum(recharge_value) recharge_money ,\"$part_date\" recharge_date FROM v_event_0 WHERE \"$part_event\" = 'recharge' AND \"$part_date\" > '2018-06-30' AND \"$part_date\" < '2018-07-30' GROUP BY \"#user_id\" , \"$part_date\") a LEFT JOIN (SELECT \"#user_id\" , \"$part_date\" register_date FROM v_event_0 WHERE \"$part_event\" = 'player_register' AND \"$part_date\" > '2018-06-30' AND \"$part_date\" < '2018-07-30') b ON a.\"#user_id\" = b.\"#user_id\" WHERE b.\"#user_id\" IS NOT NULL AND recharge_date >= register_date GROUP BY register_date) c) d WHERE date_prop IS NOT NULL"
}
TIP
List 타입을 역추적해야 할 때, 기본 저장 리스트 타입이 탭 문자로 구분된 문자열이기 때문에 다음과 같이 해야 합니다:
split("arrayColumn", chr(0009)) as arrayColumn
# 2.3.2 설정 파라미터 설명
각 설정 파일은 JSON 형식으로 나타내며, 각 요소의 의미는 다음과 같습니다:
event_desc
:- 설명: 선택적 설정, 새 이벤트의 표시 이름을 설정하기 위한 JSON 객체
- 키: 이벤트 이름
- 값: 표시 이름
appid
:- 설명: 필수 설정, 쿼리 결과의 대상 프로젝트의 APPID를 작성
type
:- 설명: 필수 설정, 대상 항목의 이벤트 테이블 또는 사용자 테이블을 작성
- 사용 가능한 값: event, user
property_desc
:- 설명: 선택적 설정, 속성 이름의 표시 이름을 설정하기 위한 JSON 객체
- 키: 속성 이름
- 값: 표시 이름
sql
:- 설명: 필수 설정, 문자열, 쿼리문. 반환된 결과의 열 이름이 열 데이터의 구체적인 의미를 결정하므로 다음을 반드시 포함해야 합니다:
- 필수 열 이름 1:
#account_id
또는#distinct_id
, 둘 중 하나는 트리거 유저의 계정 ID 및 익명 ID에 대응해야 함. 생성된 이벤트가 개인에 의해 트리거되지 않은 경우(예: 위의 예에서 LTV), 'system', 'admin'과 같은 ID 규칙 외부의 고정 값을 사용하는 것이 좋습니다. - 필수 열 이름 2:
#event_name
, 이벤트 이름, 권장 설정 값 - 필수 열 이름 3:
#time
, 이벤트 시간, 형식 yyyy-MM-dd HH:mm:ss 또는yyyy-MM-dd HH:mm:ss.SSS
- 필수 열 이름 1:
- 설명: 필수 설정, 문자열, 쿼리문. 반환된 결과의 열 이름이 열 데이터의 구체적인 의미를 결정하므로 다음을 반드시 포함해야 합니다:
위의 열 이름 외에도, 나머지 열의 데이터는 이벤트의 속성으로 사용되며, 열 이름이 속성 이름이 됩니다.
역추적 이벤트 외에도 쿼리 결과를 통해 새 사용자 속성을 생성하거나 기존 사용자 속성을 덮어쓸 수 있습니다. 설정 파일은 다음과 같습니다:
{
"appid": "8d1820678a064397bbfcc9732f352e75",
"type": "user",
"property_desc": {
"user_level": "user level",
"coin_num": "coin number"
},
"sql": "select \"#account_id\",localtimestamp \"#time\",user_level,coin_num from v_user_0"
}
역추적 이벤트와 유사하게, 설정 파일은 JSON 형식으로 표시되며, 역추적 이벤트의 설정 파일과의 차이점은 다음과 같습니다:
event_desc
불필요type
은 "user"- sql의 필수 열 이름은
#event_name
을 필요로 하지 않으며, 다음 두 가지 열만 필요:- 필수 열 1:
#account_id
또는#distinct_id
, 둘 중 하나 - 필수 열 2:
#time
, 시간을 나타냄
- 필수 열 1:
# 2.4 시간 매크로 사용
데이터 역추적 작업 설정 파일 내에서 시간 매개변수를 시간 매크로로 대체할 수 있습니다. 데이터 역추적 명령을 실행할 때 ta-tool 도구는 --date
를 기준으로 시간 매크로의 매개변수를 기반으로 시간의 오프셋을 계산하고 설정 파일의 시간 매크로를 대체합니다. 사용 가능한 시간 매크로 형식은 @[{yyyyMMdd}]
, @[{yyyyMMdd}-{nday}]
, @[{yyyyMMdd}+{nday}]
등입니다.
yyyyMMdd
는 Java dateFormat에서 파싱할 수 있는 모든 날짜 형식으로 대체할 수 있습니다. 예:yyyy-MM-dd HH:mm:ss.SSS
,yyyyMMddHH000000
- n은 시간 오프셋을 나타내는 임의의 정수일 수 있습니다.
- day는 시간 오프셋 단위를 나타내며, 다음과 같이 설정할 수 있습니다:
day
,hour
,minute
,week
,month
- 예: 현재 시간이
2018-07-01 15:13:23.234
인 경우@[{yyyyMMdd}]
는20180701
로 대체@[{yyyy-MM-dd}-{1day}]
는2018-06-31
로 대체@[{yyyyMMddHH}+{2hour}]
는2018070117
로 대체@[{yyyyMMddHHmm00}-{10minute}]
는20180701150300
으로 대체