全部产品
Search
文档中心

智能开放搜索 OpenSearch:MaxCompute + API 数据源

更新时间:Jun 12, 2024

本文将介绍以MaxCompute为数据源时如何添加表。

前置条件

  • 了解MaxCompute(原ODPS) ,如果您对MaxCompute 没有过多的了解,可什么是MaxCompute进行参考。

  • 表权限,在配置MaxCompute 数据表时需要登录OpenSearch的账号对该表有相应的权限(describe,select,download,字段的label权限)。

赋权语句如下:

-- 添加账号
add user ****@aliyun.com;

-- 给该账号赋相应的表权限
GRANT describe,select,download ON TABLE table_xxx TO USER ****@aliyun.com
GRANT describe,select,download ON TABLE table_xxx_done TO USER ****@aliyun.com

-- 由于MaxCompute开启了字段权限校验,导致拉取数据的时候无法访问高权限的字段,表索引build不出来,碰到这种情况需要授权给账号字段级别的访问权限。
-- 给整个Project统一授权
SET LABEL 3 to USER ****@aliyun.com

-- 给单表授权
GRANT LABEL 3 ON TABLE table_xxx(col1, col2) TO ****@aliyun.com
  • 向量检索版引擎支持的MaxCompute 表字段类型有:STRING 、BOOLEAN、DOUBLE、BIGINT、DATETIME;

说明

详细的建表语句说明和参数配置可参考MaxCompute数据源建表语句说明

添加表

  1. 实例详情>表管理页,点击添加表

image.png

  1. 填写表的基础信息,点击下一步

image.png

配置说明

  • 表名称:可自定义

  • 数据分片数:分片数设置时,请填写不超过256的正整数, 用于提升全量构建速度、单次查询性能。(部分存量实例,仍需各索引表分片数保持一致;或至少一个索引表分片数为1,其余索引表分片数一致)

  • 数据更新资源数:数据更新所用资源数,每个索引默认免费提供2个4核8G的更新资源,超出免费额度的资源将产生费用,详情可参考

  • 场景模板:向量检索版内置了3种模板可供用户选择:通用、向量-图片搜索、向量-文本语义模板

  1. 数据同步,配置数据源,校验通过后,点击下一步

image.png

配置参数说明

  • 数据源类型:选择MaxCompute

  • Project:访问的目标MaxCompute项目名称

  • accesskeyId:阿里云账号或RAM用户的AccessKey ID

  • accesskeySecret:AccessKey ID对应的AccessKey Secret

  • Table:访问的目标MaxCompute表名

  • 分组键partition:MaxCompute数据源必须设置分区键; 示例:ds=20170626

  • 时间戳:如果有API的增量数据,该配置表示回追多久的增量数据,系统默认最大能回追3天的API增量数据

  • 自动索引重建:是否开启自动索引重建任务,如果开启,则将在识别到当前数据源的变更时,自动对引用该数据源的索引表进行索引重建;

说明
  • 开启自动索引重建,则必须创建done表,创建方式,可参考下方自动索引重建

  1. 字段配置,配置完成后,点击下一步:

image

说明
  • 必选字段有:主键字段和向量字段,主键字段为int或string类型并且需要勾选主键按钮,向量字段为float类型并且需要勾选向量字段按钮;

  • 向量字段默认为多值的float类型,多值分隔符默认使用ha3分割符^] 进行切分(其对应utf编码为\x1D),也可以输入自定义多值分隔符

  • 当数据中缺少字段或字段为空时,系统将自动补充默认值,数字类型默认补0,STRING类型默认补空字符串,支持自定义默认值

  1. 索引结构配置,配置完成后,点击下一步:

image.png

此处主要针对向量索引进行配置:

  • 主键字段、向量字段必须填写,命名空间字段非必填,可以为空。

  • 仅支持选择固定的三个字段,不支持新增。

  • 向量维度:根据模型生成的向量按需选择

  • 向量距离:根据模型生成的向量按需选择,系统支持的距离类型有两种:SquareEuclidean和InnerProduct

  • 向量索引算法:根据模型生成的向量按需选择,系统支持的向量索引算法有量化聚类(Quantized Clustering)linearHNSW(Hierarchical Navigable Small World)

  • 实时索引:表示API的增量数据是否需要实时构建向量索引,默认为true

其他高级配置,可点击展开进行配置,参数说明可参考向量索引通用配置

image.png

  1. 确认创建,点击确认创建后,系统将自动创建配置好的表:

image.png

可在变更历史中查看创建表进度:

image.png

  1. 当表状态在使用中时,即可在查询测试页面进行查询测试:

image.png

自动索引重建

done 表的作用:当用户在配置数据源开启自动索引重建时,表示向量检索版实例会根据用户的done表变动去自动索引重建。

举例:假设用户的MaxCompute 数据表mytable,分区为ds=20220113,首次配置数据源索引重建之后,以后每天产出一个新分区(新分区数据是表的全量数据),需要向量检索版实例扫描到新分区然后自动进行索引重建拉取新分区数据,此时就需要:自动索引重建+done表 实现此功能。

操作步骤如下

  1. 添加数据源的时候,开启自动索引重建:

image.png

  1. 在MaxCompute 设置done 表,假设数据表名为mytable,分区键名称为ds,那么done表表名为mytable_done,分区键名称为ds,两张表在MaxCompute 显示为:

odps:sql:xxx> show tables;
InstanceId: xxx  
SQL: .                                                                                              

ALIYUN$****@aliyun.com:mytable          #全量数据源的表
ALIYUN$****@aliyun.com:mytable_done     #控制自动全量的done表

done 表的示意图:

image.png

创建done表语句:

create table mytable_done (attribute string) partitioned by (ds string);

  1. 当数据表mytable分区ds=20220114 数据完成产出后,需要设置done表,以触发向量检索版实例的索引重建;

-- 添加分区
alter table mytable_done add if not exists partition (ds="20220114");

-- 插入自动全量信号数据
insert into table mytable_done partition (ds="20220114") select '{"swift_start_timestamp":1642003200}';

最终done表内容如下所示:

odps:sql:xxx> select * from mytable_done where ds=20220114 limit 1;
InstanceId: xxx  
SQL: .                                                                                              
+-----------+----+
| attribute | ds |
+-----------+----+
| {"swift_start_timestamp":1642003200} | 20220114 |
+-----------+----+

最终当done表插入自动全量信号数据后,向量检索版实例会扫描done的信号,然后自动触发索引重建。

重要
  • 要求done表至少有一个分区键,并且分区键名称必须与数据表的分区键名称一致,若数据表的分区键为ds,那么done表的分区键也需要设置为ds;

  • done表只有一个string类型的字段,字段名必须为“attribute”;

  • done表添加的分区必须是数据表中存在的分区,若数据表的分区有、ds="20220114"、ds="20220115"、ds="20220116",那么done表新加的分区也必须在数据表分区范围内;

  • done表在插入数据时,attribute字段值为字符串类型的JSON串,如{"swift_start_timestamp":1642003200}该时间戳表示追实时增量的开始位点

注意事项

  • MaxCompute不支持外部表,需要创建内部表;

  • MaxCompute的数据源所配置的表需要是有分区的表;

  • 用户在MaxCompute上产出的表作为全量输入,使用API数据源推送实时数据;