すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:動的パラメータ

最終更新日:Dec 28, 2024

概要

SQL ステートメントで疑問符 (?) をプレースホルダーとして使用して、動的パラメータを指定できます。OpenSearch Retrieval Engine Edition の iquan コンポーネントは、疑問符 (?) を対応する動的パラメータに自動的に変換します。

動的パラメータは、システムがキャッシュする実行プランのヒット率を向上させるのに役立ちます。同じテンプレートに基づいて SQL ステートメントを作成し、SQL ステートメントで動的パラメータを使用すると、クエリのパフォーマンスが向上します。

注: 動的パラメータは値の置き換えにのみ使用できます。キーワードやフィールドの置き換えには使用できません。

サポートされているバージョン

OpenSearch Retrieval Engine Edition V3.7.0 以降

パラメータ

動的パラメータを指定するには、kvpair 句で次のパラメータを設定する必要があります。

パラメータ

説明

サポートされているバージョン

iquan.plan.prepare.level

結果の疑問符 (?) を動的パラメータの値に置き換えるクエリフェーズ。デフォルト値: jni.post.optimize。

kvpair=...;iquan.plan.prepare.level:jni.post.optimize;...

OpenSearch Retrieval Engine Edition V3.7.0 から V3.7.2 のバージョンでは、このパラメータは必須です。

OpenSearch Retrieval Engine Edition のベータ版では、このパラメータはオプションです。このパラメータを指定しない場合、デフォルト値の jni.post.optimize が使用されます。

dynamic_params

結果の置き換えに使用するパラメータ。

注: パラメータ値のデータ型は同じである必要があります

動的パラメータは2次元配列です。各1次元配列は、SQL ステートメントに対応します。

kvpair=...;dynamic_params=[[1, 1.23, "str"]]

V3.7.0 以降

iquan.plan.cache.enable

iquan.plan.prepare.level パラメータに指定したフェーズで実行プランキャッシュ機能を有効にするかどうかを指定します。

SQL ステートメントで動的パラメータを使用し、実行プランキャッシュ機能を有効にすると、OpenSearch Retrieval Engine Edition は SQL ステートメントの実行プランをキャッシュします。同じ SQL ステートメントを再度実行すると、OpenSearch Retrieval Engine Edition はキャッシュから実行プランを取得します。この場合、クエリの実行時間が短縮されます。

kvpair=...;iquan.plan.cache.enable:true;...

V3.7.0 以降

  1. 次のサンプルステートメントでは、動的パラメータのみが使用されています。

SELECT i1, cast(? as bigint) FROM t1 WHERE (i2 > 5 AND d3 < 10.1) OR s5 = ?

SQL ステートメントで疑問符 (?) を使用して動的パラメータを指定する前に、kvpair 句を使用して動的パラメータを作成する必要があります。次のサンプルコードは、kvpair 句で動的パラメータを指定する方法を示しています。

kvpair=...;
                         iquan.plan.prepare.level:jni.post.optimize;
       dynamic_params:[[10, "str5"]];
       ...;

  1. 次のサンプルステートメントでは、動的パラメータが使用され、実行プランキャッシュ機能が有効になっています。

SELECT
    price,
    title,
    compute(
        longitude,
        latitude,
        city_id,
        CAST(? AS double),
        CAST(? AS double),
        CAST(1 AS bigint)
    ) AS distance
FROM
    store,
    unnest(store.sub_table)
WHERE
    MATCHINDEX('shop', ?)
    AND QUERY(name, ?) 

次のサンプルコードは、kvpair 句で動的パラメータを指定する方法を示しています。

kvpair= ...;
                         iquan.plan.cache.enable:true;
                         iquan.plan.prepare.level:jni.post.optimize;
       dynamic_params:[[119.98844256998, 
                        36.776817017143, 
                        "excellect", 
                        "Fruit OR Watermelon"]]
       ...