MaxCompute + API 數(shù)據(jù)源
本文將介紹以MaxCompute為數(shù)據(jù)源時如何添加表。
前置條件
了解MaxCompute(原ODPS) ,如果您對MaxCompute 沒有過多的了解,可什么是MaxCompute進行參考。
表權限,在配置MaxCompute 數(shù)據(jù)表時需要登錄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開啟了字段權限校驗,導致拉取數(shù)據(jù)的時候無法訪問高權限的字段,表索引build不出來,碰到這種情況需要授權給賬號字段級別的訪問權限。
-- 給整個Project統(tǒng)一授權
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;
詳細的建表語句說明和參數(shù)配置可參考MaxCompute數(shù)據(jù)源建表語句說明。
添加表
在實例詳情>表管理頁,點擊添加表:
填寫表的基礎信息,點擊下一步:
配置說明:
表名稱:可自定義
數(shù)據(jù)分片數(shù):分片數(shù)設置時,請?zhí)顚懖怀^256的正整數(shù), 用于提升全量構建速度、單次查詢性能。(部分存量實例,仍需各索引表分片數(shù)保持一致;或至少一個索引表分片數(shù)為1,其余索引表分片數(shù)一致)
數(shù)據(jù)更新資源數(shù):數(shù)據(jù)更新所用資源數(shù),每個索引默認免費提供2個4核8G的更新資源,超出免費額度的資源將產(chǎn)生費用,詳情可參考向量檢索版計費概述
場景模板:向量檢索版內(nèi)置了3種模板可供用戶選擇:通用、向量-圖片搜索、向量-文本語義模板
數(shù)據(jù)同步,配置數(shù)據(jù)源,校驗通過后,點擊下一步:
配置參數(shù)說明:
數(shù)據(jù)源類型:選擇MaxCompute
Project:訪問的目標MaxCompute項目名稱
accesskeyId:阿里云賬號或RAM用戶的AccessKey ID
accesskeySecret:AccessKey ID對應的AccessKey Secret
Table:訪問的目標MaxCompute表名
分組鍵partition:MaxCompute數(shù)據(jù)源必須設置分區(qū)鍵; 示例:ds=20170626
時間戳:如果有API的增量數(shù)據(jù),該配置表示回追多久的增量數(shù)據(jù),系統(tǒng)默認最大能回追3天的API增量數(shù)據(jù)
自動索引重建:是否開啟自動索引重建任務,如果開啟,則將在識別到當前數(shù)據(jù)源的變更時,自動對引用該數(shù)據(jù)源的索引表進行索引重建;
開啟自動索引重建,則必須創(chuàng)建done表,創(chuàng)建方式,可參考下方自動索引重建;
字段配置,配置完成后,點擊下一步:
必選字段有:主鍵字段和向量字段,主鍵字段為int或string類型并且需要勾選主鍵按鈕,向量字段為float類型并且需要勾選向量字段按鈕;
向量字段默認為多值的float類型,多值分隔符默認使用ha3分割符^] 進行切分(其對應utf編碼為\x1D),也可以輸入自定義多值分隔符
當數(shù)據(jù)中缺少字段或字段為空時,系統(tǒng)將自動補充默認值,數(shù)字類型默認補0,STRING類型默認補空字符串,支持自定義默認值
索引結構配置,配置完成后,點擊下一步:
此處主要針對向量索引進行配置:
主鍵字段、向量字段必須填寫,命名空間字段非必填,可以為空。
僅支持選擇固定的三個字段,不支持新增。
向量維度:根據(jù)模型生成的向量按需選擇
向量距離:根據(jù)模型生成的向量按需選擇,系統(tǒng)支持的距離類型有兩種:SquareEuclidean和InnerProduct
向量索引算法:根據(jù)模型生成的向量按需選擇,系統(tǒng)支持的向量索引算法有量化聚類(Quantized Clustering)、linear、HNSW(Hierarchical Navigable Small World)
實時索引:表示API的增量數(shù)據(jù)是否需要實時構建向量索引,默認為true
其他高級配置,可點擊展開進行配置,參數(shù)說明可參考向量索引通用配置:
確認創(chuàng)建,點擊確認創(chuàng)建后,系統(tǒng)將自動創(chuàng)建配置好的表:
可在變更歷史中查看創(chuàng)建表進度:
當表狀態(tài)在使用中時,即可在查詢測試頁面進行查詢測試:
自動索引重建
done 表的作用:當用戶在配置數(shù)據(jù)源開啟自動索引重建時,表示向量檢索版實例會根據(jù)用戶的done表變動去自動索引重建。
舉例:假設用戶的MaxCompute 數(shù)據(jù)表mytable,分區(qū)為ds=20220113,首次配置數(shù)據(jù)源索引重建之后,以后每天產(chǎn)出一個新分區(qū)(新分區(qū)數(shù)據(jù)是表的全量數(shù)據(jù)),需要向量檢索版實例掃描到新分區(qū)然后自動進行索引重建拉取新分區(qū)數(shù)據(jù),此時就需要:自動索引重建+done表 實現(xiàn)此功能。
操作步驟如下:
添加數(shù)據(jù)源的時候,開啟自動索引重建:
在MaxCompute 設置done 表,假設數(shù)據(jù)表名為mytable,分區(qū)鍵名稱為ds,那么done表表名為mytable_done,分區(qū)鍵名稱為ds,兩張表在MaxCompute 顯示為:
odps:sql:xxx> show tables;
InstanceId: xxx
SQL: .
ALIYUN$****@aliyun.com:mytable #全量數(shù)據(jù)源的表
ALIYUN$****@aliyun.com:mytable_done #控制自動全量的done表
done 表的示意圖:
創(chuàng)建done表語句:
create table mytable_done (attribute string) partitioned by (ds string);
當數(shù)據(jù)表mytable分區(qū)ds=20220114 數(shù)據(jù)完成產(chǎn)出后,需要設置done表,以觸發(fā)向量檢索版實例的索引重建;
-- 添加分區(qū)
alter table mytable_done add if not exists partition (ds="20220114");
-- 插入自動全量信號數(shù)據(jù)
insert into table mytable_done partition (ds="20220114") select '{"swift_start_timestamp":1642003200}';
最終done表內(nèi)容如下所示:
odps:sql:xxx> select * from mytable_done where ds=20220114 limit 1;
InstanceId: xxx
SQL: .
+-----------+----+
| attribute | ds |
+-----------+----+
| {"swift_start_timestamp":1642003200} | 20220114 |
+-----------+----+
最終當done表插入自動全量信號數(shù)據(jù)后,向量檢索版實例會掃描done的信號,然后自動觸發(fā)索引重建。
要求done表至少有一個分區(qū)鍵,并且分區(qū)鍵名稱必須與數(shù)據(jù)表的分區(qū)鍵名稱一致,若數(shù)據(jù)表的分區(qū)鍵為ds,那么done表的分區(qū)鍵也需要設置為ds;
done表只有一個string類型的字段,字段名必須為“attribute”;
done表添加的分區(qū)必須是數(shù)據(jù)表中存在的分區(qū),若數(shù)據(jù)表的分區(qū)有、ds="20220114"、ds="20220115"、ds="20220116",那么done表新加的分區(qū)也必須在數(shù)據(jù)表分區(qū)范圍內(nèi);
done表在插入數(shù)據(jù)時,attribute字段值為字符串類型的JSON串,如{"swift_start_timestamp":1642003200}該時間戳表示追實時增量的開始位點
注意事項
MaxCompute不支持外部表,需要創(chuàng)建內(nèi)部表;
MaxCompute的數(shù)據(jù)源所配置的表需要是有分區(qū)的表;
用戶在MaxCompute上產(chǎn)出的表作為全量輸入,使用API數(shù)據(jù)源推送實時數(shù)據(jù);