全部產品
Search
文件中心

PolarDB:AutoETL參數配置和實踐案例

更新時間:Mar 26, 2026

AutoETL提供多個會話變數(Session Variable),用於在建立搜尋視圖(Search View)時配置進階同步行為,如JSON欄位轉換、搜尋路由、寫入模式等。本文介紹各參數的使用方法和實踐案例。

參數說明

在建立搜尋視圖之前,您可以通過SET語句設定以下會話變數來配置同步行為。設定後,在當前會話中建立的搜尋視圖將使用這些配置。

參數

說明

esl_sql_options

ETL SQL參數配置,用於控制搜尋視圖同步鏈路的運行參數。

esl_source_options

MySQL源表同步參數配置,用於控制從源表讀取資料的行為。

esl_sink_options

PolarSearch目標表同步參數配置,用於控制向PolarSearch索引寫入資料的行為。

說明

會話變數僅在當前會話中生效。設定後建立的搜尋視圖將持久化這些配置,即使會話關閉後,搜尋視圖仍按建立時的參數運行。

實踐案例

JSON欄位自動轉換

當源表包含JSON類型欄位時,AutoETL預設將JSON欄位以字串形式儲存到PolarSearch中。您可以通過esl_sink_options參數配置JSON欄位的轉換方式。

  1. 資料準備

    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}');
  2. 預設行為(字串儲存)

    不設定任何參數,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\"}"
                }
            }
        ]
    }
  3. 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"
                    }
                }
            }
        ]
    }
  4. 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中的nameage欄位將被展平為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;