Abfrage eines Cortex Search Service¶
Wenn Sie einen Cortex Search Service erstellen, wird ein REST API-Endpunkt bereitgestellt, um Abfragen an den Service zu liefern. Sie haben zwei Möglichkeiten, einen Cortex Search Service abzufragen:
Snowflake Python APIs verwenden
Verwenden Sie einen Client Ihrer Wahl, um den REST-Endpunkt direkt abzufragen
Snowflake Python APIs¶
Cortex Search Services können mit der Version 0.8.0 oder höher von Snowflake Python APIs abgefragt werden, das sich derzeit in der Vorschau befindet. Weitere Informationen zu Snowflake Python APIs finden Sie unter Snowflake Python APIs: Verwalten von Snowflake-Objekten mit Python.
Installieren der Snowflake Python APIs-Bibliothek¶
Installieren Sie zunächst die neueste Version des Pakets Snowflake Python APIs von PyPI. Siehe Installieren der Snowflake Python APIs-Bibliothek für Anweisungen zur Installation dieses Pakets von PyPI.
pip install snowflake -U
Mit Snowflake verbinden¶
Stellen Sie die Verbindung zu Snowflake entweder über einen Snowpark-Session
oder einen Python Connector Connection
her und erstellen Sie ein Root
Objekt. Unter Verbinden mit Snowflake mit dem Snowflake Python APIs finden Sie weitere Anweisungen zur Verbindung mit Snowflake. Das folgende Beispiel verwendet das Snowpark Session
-Objekt und ein Python Wörterbuch für die Konfiguration.
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)
Den Dienst abfragen¶
Fragen Sie den Dienst mit der folgenden Syntax ab:
# 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())
Bemerkung
Version 0.8.0 oder höher der Snowflake Python APIs-Bibliothek ist erforderlich, um einen Cortex Search Service abzufragen.
Rest API¶
Cortex Search stellt einen REST API-Endpunkt in der Suite von Snowflake REST APIs zur Verfügung, der sich derzeit in der Vorschau befindet. Der für einen Cortex Search Service generierte REST-Endpunkt hat die folgende Struktur:
https://<account_url>/api/v2/databases/<db_name>/schemas/<schema_name>/cortex-search-services/<service_name>:query
Wobei:
<account_url>
: URL Ihres Snowflake-Kontos Unter Suchen von Organisations- und Kontonamen eines Kontos finden Sie Anweisungen zum Auffinden Ihres Kontos URL.<db_name>
: Datenbank, in der sich der Dienst befindet.<schema_name>
: Schema, in dem sich der Dienst befindet<service_name>
: Name des Dienstes.:query
: Die Methode, die für den Dienst aufgerufen werden soll. In diesem Fall ist es diequery
-Methode.
Weitere Einzelheiten finden Sie in der REST API-Referenz für Cortex Search Service. Im Folgenden werden die Parameter und die Syntax des Filters beschrieben, die Sie bei der Abfrage des Dienstes verwenden müssen.
Parameter¶
Parameter |
Beschreibung |
---|---|
|
Ihre Abfrage, um die Textspalte im Dienst zu durchsuchen. |
|
Eine durch Kommata getrennte Liste von Spalten, die für jedes relevante Ergebnis in der Antwort zurückgegeben werden soll. Diese Spalten müssen in der Quellabfrage für den Dienst enthalten sein. |
|
Ein Filterobjekt zum Filtern der Ergebnisse auf der Grundlage der Daten in den |
|
Maximale Anzahl der Ergebnisse, die in der Antwort zurückgegeben werden sollen
Der maximal akzeptierte Wert ist 1000.
Der Standardwert ist 10.
|
Filtersyntax¶
Cortex Search unterstützt das Filtern nach den ATTRIBUTES-Spalten, die im Befehl CREATE CORTEX SEARCH SERVICE angegeben sind.
Cortex Search unterstützt zwei Abgleichsoperatoren:
Zeichenfolgengleichheit:
@eq
Array enthält:
@contains
Diese Vergleichsoperatoren können mit verschiedenen logischen Operatoren kombiniert werden:
@and
@or
@not
Diese Operatoren können in einem einzigen Filterobjekt kombiniert werden. Es folgen Beispiele:
Filtern von Zeilen, bei denen die Zeichenfolge-ähnliche Spalte
string_col
gleich dem Wertvalue
ist.{ "@eq": { "string_col": "value" } }
Filtern nach Zeilen, in denen die Spalte ARRAY
array_col
den Wertvalue
enthält.{ "@contains": { "array_col": "arr_value" } }
Zusammenstellen von Filtern mit logischen Operatoren:
// 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-Authentifizierung konfigurieren¶
Snowflake REST APIs unterstützt derzeit die Authentifizierung über Schlüsselpaar-Authentifizierung und OAuth. Weitere Details dazu finden Sie unter Authentifizierung von Snowflake REST APIs mit Snowflake.
Beispiel für die Abfrage des Dienstes¶
So fragen Sie den Dienst ab: curl und Authentifizierung des Schlüsselpaares:
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>
}'
Bemerkung
Bei der Abfrage der REST API unter Verwendung von JWT-Authentifizierung wird die Standardrolle des Benutzers verwendet. Die Standardrolle des Benutzers, der den Dienst abfragt , muss also USAGE für die Datenbank und das Schema, in dem sich der Dienst befindet, sowie für den Dienst selbst haben. Die Rolle des abfragenden Benutzers benötigt nicht unbedingt Berechtigungen für die Daten in der Quellabfrage. Weitere Informationen zu Benutzerrollen finden Sie unter Benutzerrollen.
Dienstvorschau mit SQL-Systemfunktion¶
Mit der Funktion SNOWFLAKE.CORTEX.SEARCH_PREVIEW können Sie eine Vorschau der Ergebnisse einzelner Abfragen an einen Cortex Search Service aus einer SQL Umgebung wie einem Arbeitsblatt oder einer Snowflake-Notebook-Zelle heraus anzeigen. Mit dieser Funktion können Sie schnell und einfach überprüfen, ob ein Service korrekt ausgefüllt ist und vernünftige Ergebnisse liefert.
Beispiel¶
Das folgende Beispiel zeigt eine Vorschau des Services mit der Abfragezeichenfolge preview query
und analysiert die Ergebnisse in einem VARIANT-Objekt.
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;
Anforderungen an die Zugriffssteuerung¶
Die Rolle, die den Cortex Search Service abfragt, muss über die folgenden Berechtigungen verfügen, um Ergebnisse abrufen zu können:
Berechtigung
Objekt
USAGE
Der Cortex Search Service
USAGE
Die Datenbank, in der sich der Cortex Search Service befindet
USAGE
Das Schema, in dem sich der Cortex Search Service befindet