Cortex Search Serviceにクエリする¶
Cortex Search Serviceを作成すると、 REST API エンドポイントがサービスにクエリを提供するためにプロビジョニングされます。Cortex Search Serviceへのクエリには2つのオプションがあります。
Snowflake Python APIs を使用する
任意のクライアントを使用して、 REST エンドポイントに直接クエリを実行する
Snowflake Python APIs¶
Cortex Search Servicesは、 Snowflake Python APIs (現在プレビュー中)のバージョン0.8.0以降を使用してクエリできます。 Snowflake Python APIs の詳細については Snowflake Python APIs: PythonによるSnowflakeオブジェクトの管理 をご参照ください。
Snowflake Python APIs ライブラリのインストール¶
まず、最新版の Snowflake Python APIs パッケージを PyPI からインストールします。PyPI からこのパッケージをインストールする手順については、 Snowflake Python APIs ライブラリのインストール をご参照ください。
pip install snowflake -U
Snowflakeに接続する¶
Snowpark Session
またはPython Connector Connection
のいずれかを使用してSnowflakeに接続し、 Root
オブジェクトを作成します。Snowflakeへの接続方法については、 Snowflake Python APIs によるSnowflakeへの接続 をご参照ください。以下の例では、設定にSnowpark Session
オブジェクトとPythonディクショナリを使用しています。
import os
from snowflake.core import Root
from snowflake.snowpark import Session
CONNECTION_PARAMETERS = {
"account": os.environ["snowflake_account_demo"],
"user": os.environ["snowflake_user_demo"],
"password": os.environ["snowflake_password_demo"],
"role": "test_role",
"database": "test_database",
"warehouse": "test_warehouse",
"schema": "test_schema",
}
session = Session.builder.configs(CONNECTION_PARAMETERS).create()
root = Root(session)
サービスをクエリする¶
以下の構文でサービスをクエリします。
# fetch service
my_service = (root
.databases["<service_database>"]
.schemas["<service_schema>"]
.cortex_search_services["<service_name>"]
)
# query service
resp = my_service.search(
query="<query>",
columns=["<col1>", "<col2>"],
filter={"@eq": {"<column>": "<value>"} },
limit=5
)
print(resp.to_json())
注釈
Cortex Search Serviceにクエリするには、 Snowflake Python APIs ライブラリのバージョン0.8.0以降が必要です。
Rest API¶
Cortex Searchは、現在プレビュー中の Snowflake REST APIs のスイートで、 REST API エンドポイントを公開しています。Cortex Search Service用に生成される REST エンドポイントの構造は以下の通りです。
https://<account_url>/api/v2/databases/<db_name>/schemas/<schema_name>/cortex-search-services/<service_name>:query
条件:
<account_url>
: Snowflakeアカウントの URL。アカウント URL を見つける手順ついては アカウントの組織名とアカウント名の検索 をご参照ください。<db_name>
: サービスが存在するデータベース。<schema_name>
: サービスが存在するスキーマ。<service_name>
: サービス名。:query
: サービス上で呼び出すメソッド。この場合、query
メソッド。
詳細については、 Cortex Search Service の REST API リファレンスをご参照ください。以下は、サービスをクエリする際に使用するパラメーターとフィルター構文について説明します。
パラメーター¶
パラメーター |
説明 |
---|---|
|
検索クエリ、サービス内のテキスト列を検索します。 |
|
カンマ区切りのリストで、応答内の関連する結果ごとに返す列を指定します。これらの列は、サービスのソースクエリに含まれている必要があります。 |
|
|
|
応答で返す結果の最大数。
最大許容値は1000です。
デフォルト値は10です。
|
フィルター構文¶
Cortex Searchは、 CREATE CORTEX SEARCH SERVICE コマンドで指定された ATTRIBUTES 列でのフィルタリングをサポートします。
Cortex Searchは2つのマッチング演算子をサポートしています。
文字列の等質性:
@eq
配列が含まれる:
@contains
これらのマッチング演算子は、さまざまな論理演算子と組み合わせることができます。
@and
@or
@not
これらの演算子は1つのフィルターオブジェクトにまとめることができます。以下に例を挙げます。
文字列のような列
string_col
が値value
と等しい行に対するフィルタリング。{ "@eq": { "string_col": "value" } }
ARRAY 列
array_col
に値value
が含まれる行のフィルタリング。{ "@contains": { "array_col": "arr_value" } }
論理演算子でフィルターを構成する
// Rows where the "array_col" column contains "arr_value" and the "string_col" column equals "value": { "@and": [ { "@contains": { "array_col": "arr_value" } }, { "@eq": { "string_col": "value" } } ] } // Rows where the "string_col" column does not equal "value" { "@not": { "@eq": { "string_col": "value" } } } // Rows where the "array_col" column contains at least one of "val1", "val2", or "val3" { "@or": [ { "@contains": { "array_col": "val1" } }, { "@contains": { "array_col": "val1" } }, { "@contains": { "array_col": "val1" } } ] }
REST API 認証の構成¶
Snowflake REST APIs は現在、キーペア認証と OAuth による認証をサポートしています。詳細については、 Snowflakeでの Snowflake REST APIs 認証 をご参照ください。
サービスをクエリする例¶
curl とキーペア認証を使用してサービスをクエリするには:
curl --location https://<ACCOUNT_URL>/api/v2/databases/<DB_NAME>/schemas/<SCHEMA_NAME>/cortex-search-services/<SERVICE_NAME>\:query \
--header 'X-Snowflake-Authorization-Token-Type: KEYPAIR_JWT' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header "Authorization: Bearer $CORTEX_SEARCH_JWT" \
--data '{
"query": "<search_query>",
"columns": ["col1", "col2"],
"filter": <filter>
"limit": <limit>
}'
注釈
JWT 認証を使用して REST API をクエリする場合、ユーザーの既定のロールが使用されます。したがって、サービスをクエリするユーザーの既定のロールは、サービスが存在するデータベースとスキーマ、およびサービス自体の USAGE でなければなりません。クエリを実行するユーザーロールは、ソースクエリのデータに対する権限を必ずしも必要としません。ユーザーロールの詳細については、 ユーザーのロール をご参照ください。
SQL システム関数によるプレビューサービス¶
SNOWFLAKE.CORTEX.SEARCH_PREVIEW 関数により、ワークシートやSnowflakeノートブックのセルなどの SQL 環境内から、Cortex Search Serviceに対する個々のクエリの結果をプレビューすることができます。この関数により、サービスが正しく入力され、妥当な結果を提供していることを簡単に検証できます。
例¶
次の例では、 preview query
のクエリ文字列でサービスをプレビューし、結果を VARIANT オブジェクトにパースしています。
SELECT PARSE_JSON(
SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
'my_search_service',
'{
"query": "preview query",
"columns":[
"col1",
"col2"
],
"filter": {"@eq": {"col1": "filter value"} },
"limit":10
}'
)
)['results'] as results;
アクセス制御の要件¶
Cortex Search Serviceをクエリするロールは、結果を取得するために以下の権限を持っている必要があります。
権限
オブジェクト
USAGE
Cortex Search Service
USAGE
Cortex Search Serviceが存在するデータベース。
USAGE
Cortex Search Serviceが存在するスキーマ。