AutoETL は、JSON フィールド変換、検索ルーティング、書き込みモードなど、検索ビュー作成時の高度な同期動作を構成するためのいくつかのセッション変数を提供します。このトピックでは、これらのパラメーターの使用方法とユースケースについて説明します。
パラメーター
検索ビューを作成する前に、SET 文を使用して、以下のセッション変数を設定し、同期動作を設定します。これらの設定は、現在のセッションで作成されるすべての検索ビューに適用されます。
パラメーター | 説明 |
| 検索ビュー同期パイプラインのランタイム動作を制御する ETL SQL パラメーターを指定します。 |
| データが読み取られる方法を制御する MySQL ソーステーブルの同期パラメーターを指定します。 |
| データがインデックスに書き込まれる方法を制御する PolarSearch シンクテーブルの同期パラメーターを指定します。 |
セッション変数は現在のセッションにのみ適用されます。ただし、これらの変数で作成された検索ビューは、セッションが閉じられた後もその構成を永続的に保持します。
ユースケース
JSON フィールド変換
ソーステーブルに JSON フィールドが含まれている場合、AutoETL はデフォルトでそれらを 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\"}" } } ] }ネスト型として保存
sink.json-flatten.fieldsパラメーターを使用して、ネスト型に変換する 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" } } } ] }フラットモードで保存
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;データ検証 (部分的な結果): フラットモードでは、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 インデックスのルーティングフィールドを 1 つ以上指定します。ドキュメントは、ルーティングフィールドの値によって決定されるシャードに保存されます。この方法は、そのフィールドによるフィルタリング時にクエリパフォーマンスを最適化します。複数のフィールドはセミコロン (;) で区切ります。
データ準備
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;置換書き込みモード
デフォルトでは、検索ビューは PolarSearch へのデータ書き込みに**更新モード**を使用し、変更されたフィールドのみを更新します。**置換モード** (インデックスモードとも呼ばれます) を使用して、書き込みごとにドキュメント全体を置き換えるには、sink.force-index-request パラメーターを true に設定します。
2つのモードの比較
機能 | 更新モード (デフォルト) | 置換モード |
書き込み方法 | 変更されたフィールドのみを更新します。 | ドキュメント全体を置き換えます。 |
ユースケース | ソーステーブルからフィールドのサブセットを同期する場合に最適です。インデックス内の未同期フィールドの値を保持します。 | ソーステーブルからすべてのフィールドを同期する場合、または PolarSearch のドキュメントがソースデータと完全に一致することを保証する必要がある場合に最適です。 |
例
SET esl_sink_options = "'sink.force-index-request' = 'true'";
CREATE SEARCH VIEW view_replace AS SELECT * FROM db3.t1;