数据上报格式
event实体
简单来说,就是描述了一个用户在某个时间,某个地方,以某种方式完成了具体事情。这是一个完整的envent
主要包含
- who
- 参与这个事件的是谁,目前使用(userNam作为唯一id,该字段必须存在)
- when
- 事件发生的事件,使用timestamp字段(精确到毫秒值)
- where
- 时间发生地点,(目前使用area字段表示地区,存储之前一定要确定地区表是否统一)
- how
- 触发这个事件的方式(用户登录的终端类型使用terminal字段,沿用传统统一使用1234)
- what
- 具体事件的内容
- 如购买(可能需要商品id,商品名称,商品类型,购买数量,购买金额等)
- 如点击(可能需要点击的接口的地址,点击位置‘直播/录播/只能刷题/模考大赛……’)
user实体
简单来说,每一个user实体对应一个真实的user用户(使用userName进行标识)主要存放一些固定的用户信息,如注册信息
其他实体
如模考id名臣对应列表,直播录播房间列表等用于完成统计平台基础业务的数据。
用户行为(各种操作事件)
- 接口
- 请求头拼接
try {
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
//添加密码验证
headers.add("Authorization", "Basic amJ6bTp6aGVuZ3lpd29haW5p");
//拼装
DataStorm dataStorm = DataStorm.builder().data(JSON.toJSON(collect)).dataType("elasticsearch").index("galaxy_active").type("user_active").build();
HttpEntity<DataStorm> formEntity = new HttpEntity<>(dataStorm, headers);
Object responseBody = restTemplate.postForObject(searchUserActiveIpAddress + "/user/data/storm", formEntity, Object.class);
} catch (Exception e) {
log.error("~~~~~~~~~调用数据平台接口异常~~~~~~~~~~", e);
}
}
- 上报格式
- 时间必须为毫秒值(时间字段名必须包含time)
- 单次上传数据长度不得超过2000(具体长度待定)
- 字段均已驼峰命名
- 接受类如下格式
public class DataStorm {
/**
* 索引名称
*/
private String index;
/**
* 索引类型
*/
private String type;
/**
* 接收数据
*/
private List<Map<String, Object>> data;
/**
* 数据存储位置
*/
private String dataType;
/**
* 偏移量类型
*/
private int offsetType;
}
- 数据json示例
{
"data": [
{
"userId": 4540084,
"userName": "015339432244",
"productId": 50251,
"title": "直播峰会之细说言语中的关键词",
"moneyReceipt": "0",
"payDate": "2016-01-02T08:28:00.000Z",
"origin": "m",
"type": 3,
"payType": 4,
"classType": 1
},
{
"userId": 4540084,
"userName": "015339432244",
"productId": 50251,
"title": "直播峰会之细说言语中的关键词",
"moneyReceipt": "0",
"payDate": "2016-01-02T08:28:00.000Z",
"origin": "m",
"type": 3,
"payType": 4,
"classType": 1
}
],
"index": "galaxy",
"type": "user_active",
"dataType": "elasticsearch"
}
- 索引介绍
- 上传数据之前需要和jbzm联系,确定index和type的命名.
关于清洗后的数据接入
对于接入清洗后的数据需要按量接入,接入前需要联系管理员,对数据进行审核,需要提交清洗后数据的上传字段报表。
按量接入
换取偏移量
http://galaxy.htexam.com/galaxy-index/index/findCursor?type=1
改接口用来换取偏移量,换取偏移量的type字段需要和管理员商定。
返回值index表示当前偏移量所处位置,long表示本次传输的长度
{"index":"1050441","long":"1000"}
在对数据清洗和转化之后需要按量发送到数据收集接口,需要提供一以几个字段
- offsetType
- 联系管理员获取,为永久字段,用来换取偏移量。
- offsetId
- 联系管理员定义,该字段为数据清洗后标识单条数据的唯一字段,用来确定每次存储的位置。
- dataType
- 联系管理员获取,该字段标识接收数据接后存储的位置。
- index
- 联系管理员获取,该字段标识数据索引位置。
- type
- 联系管理员获取,该字段标识数据索引类型。