数据上报格式

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
- 联系管理员获取,该字段标识数据索引类型。