数据规范

物品详情表

  1. 物品详情表至少需要有两个数据字段,其中一个字段为主键,同时也是分片字段,其他字段为物品属性字段。

  2. 表中的记录和物品一一对应,主键为物品的唯一标识,因此主键必须是唯一的。

  3. 主键的字段类型必须为STRING

  4. 其他物品属性字段的字段类型按照数据需要定义即可。

  5. 物品详情表应符合数据表分区规范,仅支持“依赖数据源产出新分区”调度策略,因此必须为分区表。

Vector向量表

  1. 物品向量表要求有两个数据字段,其中一个字段为主键,同时也是分片字段,另一个字段为向量

  2. 表中的记录和物品一一对应,主键为物品的唯一标识,因此主键必须是唯一的。主键的字段类型必须为STRING

  3. 向量字段的字段类型应为STRING,其值应为一串以逗号连接的浮点数所组成的字符串,例如1.10,2.03,3.45,7.89,且值中所含的浮点数的个数应与注册该表时填写的维度一致。

  4. 物品向量表应符合数据表分区规范,仅支持“依赖数据源产出新分区”调度策略,因此必须为分区表。

KKV类型表

数据规范

  1. KKV类型的召回表要求有三个数据字段,其中一个为主键,一个为分片字段,另一个为召回分

  2. 每条记录代表一个召回关系,其中主键为召回的trigger,而分片字段为召回的物品的唯一标识,召回分一般代表此召回关系的强度,可以被用于召回打分。因此一个主键能够对应多条记录,这些记录的集合即是该主键所对应的召回物品集合。

  3. 主键分片字段的字段类型必须为STRING

  4. 召回分一般代表此召回关系的强度,必须为数值类型,例如BIGINTDOUBLE

  5. KKV类型的召回表应符合数据表分区规范,仅支持“依赖数据源产出新分区”调度策略,因此必须为分区表。

数据示例

一个KKV类型的召回表的示例如下:

trigger_id

item_id

score

A

10001

1.12

A

10002

1.04

B

10001

0.97

C

10003

0.89

在这个例子中,共有三个trigger,其中trigger为A可以召回两个物品,即10001和10002;trigger为B可以召回一个物品,即10001;trigger为C可以召回一个物品,即10003。

KV类型表

数据规范

  1. KV类型召回表要求有两个数据字段,其中一个为主键,另一个为召回集合

  2. 每条记录代表一个trigger所对应的完整召回集合,其中主键为召回的trigger,必须是唯一的。

  3. 召回集合的类型为STRING,其值表示多对召回物品召回分的集合,格式形如:<召回物品1>:<召回分1> <召回物品2>:<召回分2> ……,其中每一对就对应了一个召回关系。注册时,aime会将每一对中的召回物品解析为分列字段,而将召回分解析为召回分字段。

  4. 主键的字段类型必须为STRING

  5. 召回分一般代表此召回关系的强度,必须为数值类型,例如BIGINTDOUBLE

  6. KV类型的召回表应符合数据表分区规范,仅支持“依赖数据源产出新分区”调度策略,因此必须为分区表。

数据示例

一个KV类型的召回表的示例如下:

trigger_id

recall_items

A

10001:1.12 10002:1.04

B

10001:0.97

C

10003:0.89

在这个例子中,共有三个trigger,其中trigger为A可以召回两个物品,即10001和10002;trigger为B可以召回一个物品,即10001;trigger为C可以召回一个物品,即10003。

PAI类型表

由PAI所产出的召回表,一般符合KV类型表的规范,不再赘述。

用户行为表(KKV类型)

数据规范

  1. KKV类型的用户表要求有三个数据字段,其中一个为主键,一个为分片字段,另一个为用户行为时间(时间戳)

  2. 每条记录代表一次用户行为发生的时间,其中主键为用户id(user_id),而分片字段为物品id(item_id),用户行为时间代表用户行为发生的时间,可以通过用户行为事件进行曝光过滤。因此一个主键能够对应多条记录,这些记录的集合即是该主键所对应的所有用户行为集合。

  3. 主键分片字段的字段类型必须为STRING

  4. 用户行为时间因为是时间戳,必须为数值类型,例如INT64

  5. KKV类型的召回表应符合数据表分区规范,仅支持“依赖数据源产出新分区”调度策略,因此必须为分区表。

数据示例

用户行为表的示例如下:

user_id

item_id

behavior_timestamp

A

10001

1642506060364

A

10002

1642506020123

B

10001

1642506190412

C

10003

1642504290415

在这个例子中,共有三个用户,A用户在对应时间下查看了商品10001,10002,同理B,C查看商品的记录也记录在表中。

数据表分区

依赖数据源产出新分区

aime对接的离线数据往往是周期性更新的,这种情况下您可以将数据表的全量调度策略设置为“依赖数据源产出新分区”,这种策略下,aime会自动检测您的数据表是否有更新。为了使数据更新事件能够被aime感知,并及时将离线数据同步到召回引擎中,您的ODPS数据表需要满足以下规范:

  1. 数据表为分区表,关于分区的操作详见MaxCompute文档

  2. 有且仅有一个分区字段,字段类型为STRING,最新的数据分区的分区字段值必须是所有分区字段值中按字典序最大的。一般我们建议使用格式化的业务日期/时间作为分区字段值,例如202108222021082214

  3. 对于已经产出完成暨可用的数据分区,需要产出一个标识分区,分区字段值为对应数据分区的分区字段值后加.done,例如数据分区为20210822,则对应的标识分区为20210822.done

定时执行

如果您设置的全量调度策略为“定时执行”,则aime会按照您设置的定时计划执行全量更新。这种情况下,您的ODPS数据表需要满足如下规范:

  1. 数据表为非分区表。