全部产品
Search
文档中心

云原生数据库 PolarDB:AutoETL参数配置和实践案例

更新时间:Mar 25, 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;