数据回溯功能(user_event_import)
数据回溯功能是通过SQL语句对TA数据库内的数据进行查询后,再将返回结果录入到TA数据库中,以生成新事件或新的用户属性的功能。
编写数据回溯配置文件
数据回溯功能的核心,是包含查询语句与配置参数的配置文件。一个配置文件,对应了一个数据回溯任务,一条回溯事件的配置文件如下:
{
"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 '三日' WHEN CURRENT_DATE - interval '6' DAY THEN '七日' WHEN CURRENT_DATE - interval '13' DAY THEN '十四日' WHEN CURRENT_DATE - interval '29' DAY THEN '三十日' 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"
}
每个配置文件都是以JSON来表示的,以下是每个元素的意义:
event_desc
:JSON对象,用以设置新建事件的显示名,key
值为事件名,value
值为显示名,可选配置appid
:必须配置,写入查询结果的目标项目的APPIDtype
:必须配置,共有两个取值"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:
调用数据回溯命令
登录到任意一台TA服务器,执行su - ta
命令,切换至ta用户
执行ta-tool user_event_import -conf
读取配置文件,命令如下:
ta-tool user_event_import -conf <config文件> [--date 数据日期]
参数:
config文件
:必传,参数为对应数据回溯任务配置文件的路径,支持通配符的方式,例如:/data/config/*
或者./config/*.json
--date
:可选,参数表示数据日期,时间宏会基于此基准时间进行替换,可不传,不传则默认取当前日期,格式为YYYY-MM-DD
,时间宏的具体使用方法,可参考时间宏使用方法
示例如下:
ta-tool user_event_import -conf /data/home/ta/import_configs/*.json
参数为配置文件的完整路径,支持使用通配符读取多个配置文件
时间宏使用方法
在数据回溯任务配置文件内部可以使用时间宏替换时间参数,在执行数据回溯命令时,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-31
@[{yyyyMMddHH}+{2hour}]
替换为2018070117
@[{yyyyMMddHHmm00}-{10minute}]
替换为20180701150300