데이터 백필 기능
1. 개요
데이터 백필 기능은 SQL 문으로 AE 데이터베이스의 데이터를 조회한 후, 반환된 결과를 AE 데이터베이스에 입력하여 새 이벤트나 새 유저 속성을 생성하는 기능입니다.
2. 사용 설명
2.1 명령 설명
2차 개발 도구가 배포된 서버(분산 배포 시 기본적으로 처음 3대)에 로그인하고 su - ta 명령을 실행하여 ta 사용자로 전환합니다.
ta-tool user_event_import -conf를 실행하여 설정 파일을 읽습니다. 명령은 다음과 같습니다.
ta-tool user_event_import -conf <config 파일> [--date 데이터 날짜]
2.2 명령 파라미터 설명
2.2.1 -conf
필수입니다. 파라미터는 해당 데이터 백필 작업 설정 파일의 경로이며, 와일드카드를 지원합니다. 예: /data/config/* 또는 ./config/*.json
2.2.2 --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": "유저 라이프사이클"
},
"appid": "APPID",
"type": "event",
"property_desc": {
"register_date": "가입 날짜",
"date_prop": "LTV 일수"
},
"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 '익일' WHEN CURRENT_DATE - interval '2' DAY THEN '3일' WHEN CURRENT_DATE - interval '6' DAY THEN '7일' WHEN CURRENT_DATE - interval '13' DAY THEN '14일' WHEN CURRENT_DATE - interval '29' DAY THEN '30일' 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"
}
List 타입을 백필해야 하는 경우, 하위 저장소에서 리스트 타입은 \t로 구분된 문자열로 저장되므로 다음과 같이 처리해야 합니다.
split("arrayColumn", chr(0009)) as arrayColumn
2.3.2 설정 파라미터 설명
각 설정 파일은 JSON으로 표현되며, 각 요소의 의미는 다음과 같습니다.
-
event_desc:- 설명: 선택 설정. JSON 객체로, 새로 생성할 이벤트의 표시 이름을 설정합니다.
- key: 이벤트 이름
- value: 표시 이름
-
appid:- 설명: 필수 설정. 조회 결과를 쓸 대상 프로젝트의 APPID입니다.
-
type:- 설명: 필수 설정. 대상 프로젝트의
event테이블과user테이블 중 어디에 쓸지 지정합니다. - 가능한 값: event, user
- 설명: 필수 설정. 대상 프로젝트의
-
property_desc:- 설명: 선택 설정. JSON 객체로, 속성 이름의 표시 이름을 설정합니다.
- key: 속성 이름
- value: 표시 이름
-
sql:-
설명: 필수 설정. 문자열로, 조회 문입니다. 반환 결과의 열 이름에 따라 해당 열 데이터의 구체적인 의미가 결정되므로 주의하십시오. 반드시 다음 열이 있어야 합니다.
- 필수 열 이름 1:
#account_id또는#distinct_id. 둘 중 하나 이상이 있어야 하며, 각각 트리거한 유저의 계정 ID와 게스트 ID에 해당합니다. 생성되는 이벤트가 개인이 트리거한 것이 아닌 경우(예: 위 예시의 LTV)에는 ID 규칙에서 벗어난 고정값(예: "system", "admin" 등)으로 나타내는 것을 권장합니다. - 필수 열 이름 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": "유저 레벨",
"coin_num": "골드 보유량"
},
"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는 JavadateFormat으로 해석할 수 있는 임의의 날짜 형식으로 바꿀 수 있습니다. 예: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-30으로 치환됩니다@[{yyyyMMddHH}+{2hour}]는2018070117로 치환됩니다@[{yyyyMMddHHmm00}-{10minute}]는20180701150300으로 치환됩니다

