前置条件
了解MaxCompute(原ODPS) ,如果您对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数据源建表语句说明
配置MaxCompute 数据源
1. 进入OpenSearch控制台,在左上角切换到OpenSearch-召回引擎版,在实例管理页面对应的列表中找到所属实例,点击操作栏中的管理:
在配置中心>数据源配置界面,点击添加数据源,在添加数据源时选择MaxCompute,填写红框中数据源名称、Project、accesskeyId、accesskeySecret、Table、分组键partition、自动索引重建等信息:
3. 配置完成后,点击校验后,校验通过后,确定按钮可点击:
4. 新添加数据源后,需要配置索引结构为其添加索引表,详情可参考添加索引表;
5. 索引表配置完成后,需要更新配置并索引重建才可供线上集群使用,详情可参考配置更新;
注意:
数据源名称:用户创建的数据源名称,命名规则为实例名称_用户自定义名称;
Project、accesskeyId、accesskeySecret、Table、分组键partition:用户访问MaxCompute数据源所需要的参数;
自动索引重建:是否开启自动索引重建任务,如果开启,则将在识别到当前数据源的变更时,自动对引用该数据源的索引表进行索引重建;
开启自动索引重建,则必须创建done表,创建方式,可参考下方自动索引重建;
自动索引重建
done 表的作用:当用户在配置数据源开启自动索引重建时,表示召回引擎版实例会根据用户的done表变动去自动索引重建。
举例:假设用户的MaxCompute 数据表mytable,分区为ds=20220113,首次配置数据源索引重建之后,以后每天产出一个新分区(新分区数据是表的全量数据),需要召回引擎版实例扫描到新分区然后自动进行索引重建拉取新分区数据,此时就需要:自动索引重建+done表 实现此功能。
操作步骤如下:
1.添加数据源的时候,开启自动索引重建:
2.在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 表的示意图:
创建done表语句:
create table mytable_done (attribute string) partitioned by (ds string);
3.当数据表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 数据源
在数据源配置界面,找到对应的数据源,点击右侧操作栏中的“修改”按钮:
进入编辑数据源页面对Project、accesskeyId、accesskeySecret、Table、分组键partition等信息进行修改:
修改相应信息后,点击“校验”,校验通过后,点击确定按钮即可保存修改。
数据源修改后,需要更新配置并索引重建才可供线上集群使用,详情可参考配置更新;
建议分区设置到小时维度,比如yyyyMMddHH,2022011314,这样方便以后一天产出多个全量。
删除MaxCompute数据源
选择数据源配置,点击删除
点击删除后,会判断当前数据源是否被索引表引用:
如果数据源未被索引表引用时,点击确定后,删除当前数据源;修改之后,需要推送配置,索引重建后才生效;
如果数据源被索引表引用时,直接删除数据源会有相应的报错,如下图:
需要先删除数据源被引用的索引表(删除索引表),才能删除该数据源。
注意事项
编辑数据源时,不可修改数据源名称;
MaxCompute不支持外部表,需要创建内部表;
MaxCompute的数据源所配置的表需要是有分区的表;
用户在MaxCompute上产出的表作为全量输入,使用API数据源推送实时数据;