リテラル検索を改善し、Cortex Analystの反応を向上させる¶
このトピックでは、Cortex Analystがより正確な SQL クエリを生成できるように、リテラル文字列検索を改善する方法について説明します。質問に答えるために正しい SQL クエリを書くには、フィルタリングの対象となる正確なリテラル値を知っている必要があります。これらの値は質問から直接抽出できるとは限らないので、何らかの検索が必要になるかもしれません。
例えば、ユーザーがこんな質問をしたとします。
What was my overall sales of iced tea in Q1?
次のクエリを試してみてください。
SELECT DISTINCT name FROM product WHERE name LIKE '%iced%tea%'
自分でこのプロセスを経験したことがある人なら、これが完璧な解決策でないことはわかるでしょう。例えば、このクエリでは「アイスティー」という商品は表示されませんが、「スパイスティー」という商品は表示されます。
Cortex Analystは、リテラル使用を改善するために2つのソリューションを提供しています。
セマンティックモデル で、提供されたサンプル値をセマンティック検索。
Cortex Search Service を使ったセマンティック検索。
そこでCortex Searchとの統合が役立ちます。 Cortex Search は、テキストデータに対して低レイテンシで高品質な「ファジー」検索を可能にする機能です。Cortex Searchサービスを作成して、基になるデータベース列のセマンティック検索を行い、ユーザーの質問に答える SQL クエリでCortex Analystが使用するために必要なリテラル値を見つけることができます。
サンプル値に対するセマンティック検索¶
比較的カーディナリティの低い次元(約1~10個の明確な値)では、次元の応答の構造を示すのに十分なサンプル値を指定して、サンプル値探索を使用することをお勧めします。このソリューションでは、セマンティックモデルのサイズを最小限に増やすだけで、ストレージを追加する必要はありません。
Cortex Analystは、質問の SQL クエリを生成する前に、質問と提供されたサンプル値のセマンティック類似性検索を行い、クエリを記述するために必要な適切なリテラル値を特定します。セマンティック類似性検索は、前述のファジー文字列照合クエリアプローチよりも関連性の高いリテラルを検索する可能性があることに注意してください。
検索されたサンプル値の固定サイズのセットのみが、 SQL クエリを記述するために必要なリテラルとして、 LLM に提示されます。つまり、より多くのサンプル値を追加しても、 LLM のコンテキストウィンドウを超える危険はないということです。
Cortex Search Serviceを使ったセマンティック検索¶
高いカーディナリティ (10個以上の明確な値) を持つディメンションや、値が頻繁に変更されるディメンションでは、Cortex Search Serviceを使用してリテラルを検索できます。このソリューションはデータの重複を減らし、セマンティックモデルを簡潔に保ちます。
注釈
Cortex Search Serviceには、追加のストレージとコンピューティングコストがかかります。詳細については、 コストの考慮事項 をご参照ください。
このプレビューでは、論理ディメンションごとに1つのCortex Search Serviceのみがサポートされています。
Cortex Search Serviceの設定¶
以下の手順は、Cortex Analystセマンティックモデルの論理ディメンションにCortex Search Serviceを設定する方法を示しています。
動的テーブルを作成する
USE DATABASE my_database; USE SCHEMA my_schema; CREATE OR REPLACE DYNAMIC TABLE my_logical_dimension_landing_table WAREHOUSE = xsmall TARGET_LAG = '1 hour' AS ( SELECT DISTINCT my_column AS my_dimension FROM my_table );
注釈
DISTINCT は現在Cortex Search Serviceで十分にサポートされていないため、ここでは動的テーブルが使用されています。ユースケースにより適している場合は、ママテリアライズドビューを使用することもできます。動的テーブルとマテリアライズドビューの比較については、 ビュー、マテリアライズドビュー、動的テーブル をご参照ください。
Cortex Search Serviceを作成する
CREATE OR REPLACE CORTEX SEARCH SERVICE my_logical_dimension_search_service ON my_dimension WAREHOUSE = xsmall TARGET_LAG = '1 hour' AS ( SELECT my_dimension FROM my_logical_dimension_landing_table );`
Cortex Search Serviceの要件
サービスは、論理ディメンションと同じ名前の列にインデックスを付ける必要があります。
検索サービスのデータベースとスキーマは、ディメンションを含む物理テーブルまたはビューのものと一致する必要があります。
以下のyamlスニペットを使用して、セマンティックモデルにCortex Search Serviceを含めます。
tables: - name: my_table base_table: database: my_database schema: my_schema table: my_table dimensions: - name: my_dimension expr: my_column cortex_search_service_name: my_logical_dimension_search_service