全部產品
Search
文件中心

OpenSearch:MaxCompute + API 資料來源

更新時間:Jul 13, 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類型預設補Null 字元串,支援自訂預設值

  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資料來源推送即時資料;