前置條件
了解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數據源推送實時數據;