全部产品
云市场

推送数据

更新时间:2019-08-27 14:24:36

相关概念

数据表

将数据根据数据属性分为不同的集合,称为数据表。不同场景对数据表的划分有所不同,一般来说需要用户表、内容表和行为表三张表。

文档

数据上传的基本单元为文档,文档结构如下(JSON格式):

  1. {
  2. "fields": {
  3. "field_1": "value_1",
  4. "field_2": "value_2",
  5. "_timestamp": "1520327038003"
  6. },
  7. "cmd": "add"
  8. }

其中 field_1、field_2 为内容字段,字段名和字段值根据 数据规范 填写,cmd、_timestamp为保留字段。

保留字段

字段名 取值范围 说明
cmd add、update、delete 新增、更新、删除文档,以下将进行详细介绍
_timestamp 正整数 文档产生时间,如不能获取确切产生时间,使用文档推送时间即当前时间。以毫秒为单位。

内容字段

内容字段为文档的有效信息,请按照 数据规范 填写。

推送请求

一次请求可以包含一个数据表的多个文档,需要尽可能多的将多个文档放到一个请求,以提高性能(例如,累积800个文档或者间隔10秒钟触发一次推送请求),但不能超过800个。一次请求的多个文档的cmd字段可以不同。

配额限制

当user表或者item表上传数据过多,超出实例购买配额时,数据推送接口会返回超出限额错误码,详见本文档错误码说明页面。可以在一次推送请求里面,推送只包含delete命令字的文档,可以删除已经不需要的文档。

文档操作

文档中的cmd字段决定对数据表进行的操作。cmd为add,表示往数据表中添加文档,若数据表中已经存在相同的文档(数据表唯一标识字段完全相同的文档),已经存在的文档将会被删除。cmd为update,表示更新数据表中已经存在的文档。cmd为delete,表示删除数据表中已经存在的文档。各数据表唯一标识字段组合如下所示:

数据表 唯一标识字段组合
用户表 user_id、user_id_type
内容表 item_id、item_type
行为表 无,行为表无法对文档进行更新和删除操作

一个推送文档,根据操作类型的不同,数据完整性要求也不同,具体如下:

操作类型 保留字段 内容字段
add 所有保留字段 数据表唯一标识字段组合以及本说明文档数据规范定义的必填字段
update 所有保留字段 数据表唯一标识字段组合以及本说明文档数据规范定义的必填字段
delete 所有保留字段 维护局表唯一标识字段组合

接口调用说明

一次接口调用,需要指定实例ID、数据表名和推送文档数据。其中推送文档数据为如下所示JSON数组表示:

  1. [
  2. {
  3. "fields": {
  4. "item_id": "1",
  5. "item_type": "video",
  6. "title": "感动中国的大学生,今成副书记",
  7. "content": "内容",
  8. "user_id": 1,
  9. "pub_time": "1520327038",
  10. "_timestamp": "1520327037243"
  11. },
  12. "cmd": "add"
  13. },
  14. {
  15. "fields": {
  16. "item_id": "1",
  17. "item_type": "video",
  18. "title": "感动中国的大学生,今成副书记",
  19. "_timestamp": "1520327038003"
  20. },
  21. "cmd": "update"
  22. }
  23. ]

数据要求:

  1. 如果一次请求只有一个文档,也需要表示为json数组格式。
  2. 可以使用JSON的pretty风格,也可以使用不带换行和缩进的紧凑风格。

接口使用限制

  1. 单次请求不超过800个文档;
  2. 单次请求数据大小不超过1M;
  3. 单个文档不超过10K;
  4. 单个字段不超过5K。

参数说明

参数
类型
描述
是否必填
value
tableName
String
需要推送的表
用户数据:user
内容数据:item
行为数据:behavior
content
JSON
文档,详情见上文
content-cmd
String
content中必填字段,操作类型。详情见上文
add
update
delete
content-_timestamp
String
content中必填字段,时间戳。详情见上文
文档产生时间,如不能获取确切产生时间,使用文档推送时间即当前时间。以毫秒为单位。

示例代码

  1. package com.aliyun.airec;
  2. import com.aliyuncs.DefaultAcsClient;
  3. import com.aliyuncs.airec.model.v20181012.PushDocumentRequest;
  4. import com.aliyuncs.airec.model.v20181012.PushDocumentResponse;
  5. import com.aliyuncs.http.FormatType;
  6. import com.aliyuncs.profile.DefaultProfile;
  7. import com.aliyuncs.profile.IClientProfile;
  8. public class PushDocument {
  9. private static final String accessKeyId = "your access key";
  10. private static final String accessKeySecret = "your access key secret";
  11. public static void main(String args[]) {
  12. IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
  13. DefaultProfile.addEndpoint("cn-hangzhou", "Airec", "airec.cn-hangzhou.aliyuncs.com");
  14. DefaultAcsClient client = new DefaultAcsClient(profile);
  15. PushDocumentRequest request = new PushDocumentRequest();
  16. request.setAcceptFormat(FormatType.JSON);
  17. request.setInstanceId("airec-xxxx");
  18. request.setTableName("user");
  19. String content = "[
  20. {
  21. "fields": {
  22. "item_id": "1",
  23. "item_type": "video",
  24. "title": "感动中国的大学生,今成副书记",
  25. "content": "内容",
  26. "user_id": 1,
  27. "pub_time": "1520327038",
  28. "_timestamp": "1520327037243"
  29. },
  30. "cmd": "add"
  31. },
  32. {
  33. "fields": {
  34. "item_id": "1",
  35. "item_type": "video",
  36. "title": "感动中国的大学生,今成副书记",
  37. "_timestamp": "1520327038003"
  38. },
  39. "cmd": "update"
  40. }
  41. ]";
  42. request.setHttpContent(content.getBytes(), "UTF-8", FormatType.JSON);
  43. try {
  44. PushDocumentResponse response = client.getAcsResponse(request);
  45. System.out.println(response.getResult());
  46. } catch (Exception e) {
  47. e.printStackTrace();
  48. }
  49. }
  50. }