リテラル検索を改善し、Cortex Analystの反応を向上させる

このトピックでは、Cortex Analystがより正確な SQL クエリを生成できるように、リテラル文字列検索を改善する方法について説明します。質問に答えるために正しい SQL クエリを書くには、フィルタリングの対象となる正確なリテラル値を知っている必要があります。これらの値は質問から直接抽出できるとは限らないので、何らかの検索が必要になるかもしれません。

例えば、ユーザーがこんな質問をしたとします。

What was my overall sales of iced tea in Q1?
Copy

次のクエリを試してみてください。

SELECT DISTINCT name FROM product WHERE name LIKE '%iced%tea%'
Copy

自分でこのプロセスを経験したことがある人なら、これが完璧な解決策でないことはわかるでしょう。例えば、このクエリでは「アイスティー」という商品は表示されませんが、「スパイスティー」という商品は表示されます。

Cortex Analystは、リテラル使用を改善するために2つのソリューションを提供しています。

そこで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を設定する方法を示しています。

  1. 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 DISTINCT my_dimension FROM my_logical_dimension_landing_table
      );`
    
    Copy
  2. 以下の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:
              service: my_logical_dimension_search_service
              literal_column: my_column     # optional
              database: my_search_database  # optional
              schema: my_search_schema      # optional
    
    Copy

    以下のフィールドは、 cortex_search_service ではオプションとなります。

    • literal_column: 検索インデックスがデフォルトになります。

    • database: 指定したベーステーブルのデータベースがデフォルトになります。

    • schema: 指定したベーステーブルのスキーマがデフォルトになります。