数据格式
数据分析工作台的数据传输过程以JSON作为数据传输格式,通过表名与属性名锁定一个唯一属性。这也意味着,同一个数据表中的同一个属性,数据类型必须保持一致。
同时,在JSON的基础上,我们定义了数种数据类型:
数据类型
类型中文名
类型限制
数据示例
STRING
字符串
使用UTF-8编码,最大长度为1024字节
"数据分析"
NUMBER
数值
-9E15~9E15,小数点后至多3位
12.234
DATETIME
日期时间
年的取值范围是[1900,2099],时间格式上最长符合yyyy-mm-dd hh-mm-ss.sss
2020-01-01 01:12:23 12.23
BOOL
布尔
无
ture
LIST
集合
最多由500个元素组成,单元素长度限制为255字节
["game","sports"]
考虑到用户触达终端产品类型的不同,我们为不同的产品类型设计了不同的SDK用来采集数据,租户可以根据自己的产品类型进行选择,需要注意的是,使用不同SDK进行数据采集时,需要的数据格式是统一的,下面将从事件,用户,物品三大方面介绍基本数据格式,以及不同接口的作用。
事件相关
track
track接口主要用来记录一条Event及其所携带的properties,数据样例如下:
各个字段的含义如下:
track_signup
此条数据表示,一个匿名用户在设备ID为“ABCDE”的设备上发生了注册行为,触发了注册事件,事件数据同时携带了业务ID distinct_id与匿名ID original_id,ID-mapping模块将会把这两个ID进行关联,并在内部分配一个统一的ID进行标识,后续用户在此设备上进行操作时,无论登录与否,都会被视为一个用户。
用户相关
profile_set
此接口用以配置一个用户的属性,如果该用户已经存在,则覆盖原本的数据,如果该用户不存在,则直接创建,数据样例如下:
此条数据的接口类型为profile_set,表示该条数据将写入User表:
如果User表中不存在distinct_id为“12345”的用户,将直接创建一个distinct_id为“12345”的用户,同时将properties中的所有属性值同时写入。
如果User表中存在distinct_id为“12345”的用户,此条数据所携带的属性值将覆盖原先表中的数据。
profile_set_once
此接口与profile_set的功能大致相同,区别在于,如果该用户已存在,那么这条数据将会被忽略,如果该用户不存在,则直接创建,数据样例如下:
此条数据的接口类型为profile_set_once,表示该条数据将写入User表:
如果User表中不存在distinct_id为“12345”的用户,将直接创建一个distinct_id为“12345”的用户,同时将properties中的所有属性值同时写入。
如果User表中存在distinct_id为“12345”的用户,此条数据将会被忽略。
profile_increment
此接口用来对用户的某个数值类型的数据进行增加或减少,如果用户表中已经存在该用户,那么直接对设置的字段进行更改操作,如果不存在该用户,那么将直接创建一条用户记录,并附带设置的属性值,所设置的属性值会在默认为0的基础上进行增减,数据样例如下:
此条数据的接口类型为profile_increment,表示该条数据将写入User表:
如果User表中不存在distinct_id为“12345”的用户,将直接创建一个distinct_id为“12345”的用户,接下来以VIP等级为0的基础上,对VIP等级执行+1操作,也就是最终写入User表时该用户的VIP等级为1。
如果User表中存在distinct_id为“12345”的用户,则直接对此用户的VIP等级执行+1操作,例如原先该用户的VIP等级为3,上方数据写入后,此用户的VIP等级会变更为4。
profile_append
此接口用来对用户属性中某个集合类型的字段进行添加一个或多个数据的操作,需要注意的是,如果此次添加的值与该字段的原有值发生重复,是不会进行去重操作的,如果此次添加的值本身存在重复值,也是不会进行去重操作的,数据样例如下:
此条数据的接口类型为profile_append,表示该条数据将写入User表:
如果User表中不存在distinct_id为“12345”的用户,将直接创建一个distinct_id为“12345”的用户,同时在hobbies字段中添加数据中的三个值。
如果User表中存在distinct_id为“12345”的用户,则直接在此用户的hobbies字段中加入数据中三个值。假定用户的hobbies字段中已经存在basketball这个值,在写入时也不会进行去重,最终hobbies字段中将存在三个“basketball”。
样例中的数据中,hobbies字段值存在重复,写入的过程不会去重
profile_delete
此接口用来删除某个distinct_id的全部用户属性数据,数据样例如下:
此条数据表示直接将distinct_id为“12345”的用户属性数据从User表中删除。
profile_unset
此接口用来将用户的某个属性值设置为空,在该接口的使用过程中,需要设置为空的字段可以赋予任何除null以外的值。
词条数据表示将distinct_id为“12345”的用户的hobbies字段设置为空。
数据类型校验
数据类型的判定以第一次数据上报时的数据类型为准,例如第一次数据上报时vip_level的数据类型为number数值类型,那么在之后针对于同一表下的vip_level字段的数据类型将以number类型作为判断依据。
当数据上报时如果发现上报的数据类型与元数据类型不符,将触发数据格式强制转换操作,各个数据类型的强制转换规则如下表所示:
原始类型
目标类型
转换方法
数值类型
布尔类型
不为0的值转换为true,为0的值转换为false
数值类型
日期时间类型
按照UNIX的时间戳的秒或毫秒进行转换
数值类型
字符串类型
原值作为字符串
布尔类型
数值类型
ture转换为1,false转换为0
布尔类型
字符串类型
原值作为字符串
字符串类型
数值类型
空字符串则抛弃,其余的转换为数值类型
字符串类型
布尔类型
原值按照true与false转换为布尔类型的true与false
字符串类型
日期时间类型
按照匹配的日期时间格式进行转换
字符串数组
字符串类型
原值作为字符串
日期时间类型
字符串类型
原值作为字符串
如果数据无法转换格式,则会直接忽略这条数据。
特别注意
在历史数据的导入过程中,有时会使用到$is_login_in这个字段,该字段的数据类型为布尔类型,其含义表示该条数据的distinct_id是否是一个业务ID,如该字段值为true,在该业务ID没有与设备ID进行管理的大前提下,如果用户在导入过程中开启了多对一的情况下,该业务ID后续可与设备ID进行绑定,如果用户在导入过程中没有开启多对一,那么该业务ID后续将无法与其他设备ID进行绑定。
如果该字段值为false,那么表示该条数据的distinct_id不是业务ID,而是一个设备ID,后续可以与业务ID进行绑定。
最后更新于
这有帮助吗?