AutoETL提供多個會話變數(Session Variable),用於在建立搜尋視圖(Search View)時配置進階同步行為,如JSON欄位轉換、搜尋路由、寫入模式等。本文介紹各參數的使用方法和實踐案例。
參數說明
在建立搜尋視圖之前,您可以通過SET語句設定以下會話變數來配置同步行為。設定後,在當前會話中建立的搜尋視圖將使用這些配置。
參數 | 說明 |
| ETL SQL參數配置,用於控制搜尋視圖同步鏈路的運行參數。 |
| MySQL源表同步參數配置,用於控制從源表讀取資料的行為。 |
| PolarSearch目標表同步參數配置,用於控制向PolarSearch索引寫入資料的行為。 |
會話變數僅在當前會話中生效。設定後建立的搜尋視圖將持久化這些配置,即使會話關閉後,搜尋視圖仍按建立時的參數運行。
實踐案例
JSON欄位自動轉換
當源表包含JSON類型欄位時,AutoETL預設將JSON欄位以字串形式儲存到PolarSearch中。您可以通過esl_sink_options參數配置JSON欄位的轉換方式。
資料準備
CREATE DATABASE IF NOT EXISTS db3; USE db3; CREATE TABLE IF NOT EXISTS t1 ( id INT PRIMARY KEY, c1 JSON ); INSERT INTO t1 VALUES (1, '{"name": "Alice", "age": 30}'); INSERT INTO t1 VALUES (2, '{"name": "Bob", "age": 25}');預設行為(字串儲存)
不設定任何參數,JSON欄位將以字串形式儲存到PolarSearch中。
CREATE SEARCH VIEW view_json_default AS SELECT * FROM db3.t1;驗證資料(部分資料):
{ "hits": [ { "_index": "view_json_default", "_id": "2", "_score": 1, "_source": { "id": 2, "c1": "{\"age\":25,\"name\":\"Bob\"}" } }, { "_index": "view_json_default", "_id": "1", "_score": 1, "_source": { "id": 1, "c1": "{\"age\":30,\"name\":\"Alice\"}" } } ] }Nested類型儲存
通過
sink.json-flatten.fields參數指定需要轉換為Nested類型的JSON欄位。多個欄位之間用英文分號;分隔。SET esl_sink_options = "'sink.json-flatten.fields' = 'c1'"; CREATE SEARCH VIEW view_json_nested AS SELECT * FROM db3.t1;驗證資料(部分資料):
{ "hits": [ { "_index": "view_json_nested", "_id": "1", "_score": 1, "_source": { "id": 1, "c1": { "age": 30, "name": "Alice" } } }, { "_index": "view_json_nested", "_id": "2", "_score": 1, "_source": { "id": 2, "c1": { "age": 25, "name": "Bob" } } } ] }Flatten模式儲存
通過
sink.json-flatten.mode參數設定為flatten,將JSON欄位展平為獨立的頂級欄位。SET esl_sink_options = "'sink.json-flatten.fields' = 'c1', 'sink.json-flatten.mode' = 'flatten'"; CREATE SEARCH VIEW view_json_flatten AS SELECT * FROM db3.t1;驗證資料(部分資料):在Flatten模式下,JSON中的
name和age欄位將被展平為PolarSearch索引中的獨立頂級欄位。{ "hits": [ { "_index": "view_json_flatten", "_id": "2", "_score": 1, "_source": { "id": 2, "name": "Bob", "age": 25 } }, { "_index": "view_json_flatten", "_id": "1", "_score": 1, "_source": { "id": 1, "name": "Alice", "age": 30 } } ] }
搜尋路由欄位設定
通過routing-fields參數,可以指定PolarSearch索引的路由欄位。路由欄位的值將用於確定文檔儲存在哪個分區中,最佳化特定欄位的查詢效能。多個欄位之間用英文分號;分隔。
資料準備
CREATE DATABASE IF NOT EXISTS db4;
USE db4;
CREATE TABLE IF NOT EXISTS t1 (
id INT PRIMARY KEY,
c1 VARCHAR(100),
c2 VARCHAR(100)
);
INSERT INTO t1(id, c1, c2) VALUES
(1, 'apple', 'red'),
(2, 'banana', 'yellow'),
(3, 'grape', 'purple');樣本
以c1欄位作為路由欄位建立搜尋視圖:
SET esl_sink_options = "'routing-fields' = 'c1'";
CREATE SEARCH VIEW view_routing AS SELECT * FROM db4.t1;忽略刪除
在多表匯聚情境中,搜尋視圖對PolarSearch索引的更新模式為先刪除後插入。如果您不希望在查詢時訪問到被刪除資料的中間狀態,可以通過ignore-delete參數設定為true來忽略刪除操作。
忽略刪除可能會導致PolarSearch索引中的資料膨脹。建議在源表中使用虛刪除標記(如添加is_deleted欄位),配合定期清理策略使用。
樣本
SET esl_sink_options = "'ignore-delete' = 'true'";
CREATE SEARCH VIEW view_no_delete AS SELECT t1.id, t1.c1, t2.c2 FROM db3.t1 AS t1 JOIN db2.t2 AS t2 ON t1.id = t2.id;替換寫入模式
預設情況下,搜尋視圖使用更新模式(Update)向PolarSearch寫入資料,即僅更新變更的欄位。如果您希望使用替換模式(Index),即每次寫入都替換整個文檔,可以通過sink.force-index-request參數設定為true。
兩種模式對比
特性 | 更新模式(預設) | 替換模式 |
寫入方式 | 僅更新變更的欄位 | 替換整個文檔 |
適用情境 | 僅同步源表部分欄位時,避免未同步欄位的值被清除 | 同步源表全部欄位,或需要確保PolarSearch文檔與來源資料完全一致 |
樣本
SET esl_sink_options = "'sink.force-index-request' = 'true'";
CREATE SEARCH VIEW view_replace AS SELECT * FROM db3.t1;