Consulta ao Cortex Search Service¶
Quando você cria um Cortex Search Service, um ponto de extremidade REST API é provisionado para atender consultas ao serviço. Você tem duas opções para consultar um Cortex Search Service:
Como usar o Snowflake Python APIs
Usar um cliente de sua escolha para consulta o ponto de extremidade REST diretamente
Snowflake Python APIs¶
Os Cortex Search Services podem ser consultados usando a versão 0.8.0 ou posterior do Snowflake Python APIs, atualmente em versão preliminar. Consulte Snowflake Python APIs: Gerenciamento de objetos Snowflake com Python para obter mais informações sobre o Snowflake Python APIs.
Instale a biblioteca Snowflake Python APIs.¶
Primeiro, instale a versão mais recente do pacote Snowflake Python APIs de PyPI. Consulte Instale a biblioteca Snowflake Python APIs. para obter instruções sobre como instalar este pacote do PyPI.
pip install snowflake -U
Conexão com o Snowflake¶
Conecte-se ao Snowflake usando uma Session
Snowpark ou um conector Python Connection
e crie um objeto Root
. Consulte Conexão ao Snowflake com o Snowflake Python APIs para obter mais instruções sobre como se conectar ao Snowflake. O exemplo a seguir usa o objeto Session
Snowpark e um dicionário Python para configuração.
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)
Consulta ao serviço¶
Consulte o serviço usando a seguinte sintaxe:
# 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())
Nota
A versão 0.8.0 ou posterior da biblioteca Snowflake Python APIs é necessária para consultar um Cortex Search Service.
Rest API¶
O Cortex Search expõe um ponto de extremidade REST API no conjunto de Snowflake REST APIs, atualmente em versão preliminar. O ponto de extremidade REST gerado para um Cortex Search Service tem a seguinte estrutura:
https://<account_url>/api/v2/databases/<db_name>/schemas/<schema_name>/cortex-search-services/<service_name>:query
Onde:
<account_url>
: o URL de sua conta Snowflake. Consulte Como encontrar o nome da conta e organização de uma conta para obter instruções sobre como encontrar o URL da conta.<db_name>
: o banco de dados no qual o serviço reside.<schema_name>
: esquema no qual o serviço reside.<service_name>
: nome do serviço.:query
: o método a ser invocado no serviço. Neste caso, o métodoquery
.
Para obter detalhes adicionais, consulte a referência do RESTAPI do Cortex Search Service. A seguir, descrevemos os parâmetros e a sintaxe do filtro a serem usados ao consultar o serviço.
Parâmetros¶
Parâmetro |
Descrição |
---|---|
|
Sua consulta de pesquisa, para pesquisar na coluna de texto no serviço. |
|
Uma lista de colunas separadas por vírgulas a serem retornadas para cada resultado relevante na resposta. Essas colunas devem ser incluídas na consulta de origem do serviço. |
|
Um objeto de filtro para filtrar resultados com base nos dados nas colunas |
|
Número máximo de resultados a serem retornados na resposta.
O valor máximo aceito é 1000.
O valor padrão é 10.
|
Sintaxe do filtro¶
O Cortex Search oferece suporte à filtragem nas colunas ATTRIBUTES especificadas no comando CREATE CORTEX SEARCH SERVICE.
O Cortex Search oferece suporte a dois operadores de correspondência:
Igualdade da cadeia de caracteres:
@eq
A matriz contém:
@contains
Esses operadores correspondentes podem ser compostos com vários operadores lógicos:
@and
@or
@not
Esses operadores podem ser combinados em um único objeto de filtro. Seguem alguns exemplos:
Filtro em linhas onde a coluna do tipo cadeia de caracteres
string_col
é igual ao valorvalue
.{ "@eq": { "string_col": "value" } }
Filtro em linhas onde a coluna ARRAY
array_col
contém o valorvalue
.{ "@contains": { "array_col": "arr_value" } }
Composição de filtros com operadores lógicos:
// 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" } } ] }
Configuração de autenticação da REST API¶
As REST APIs Snowflake atualmente oferecem suporte à autenticação por meio de autenticação de par de chaves e OAuth. Para obter mais detalhes, consulte Autenticando o Snowflake REST APIs com Snowflake.
Exemplo de consulta do serviço¶
Para consulta o serviço usando curl e autenticação de par de chaves:
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>
}'
Nota
Ao consultar a REST API usando a autenticação JWT, a função padrão do usuário é usada. Portanto, a função padrão do usuário que consulta o serviço deve ter USAGE no banco de dados e no esquema em que o serviço reside, e no próprio serviço. A função de usuário que efetua a consulta não precisa necessariamente de privilégios nos dados na consulta de origem. Consulte Funções do usuário para obter mais detalhes sobre as funções de usuário.
Serviço de pré-visualização com a função do sistema SQL¶
A função SNOWFLAKE.CORTEX.SEARCH_PREVIEW permite que você versão os resultados de consultas individuais em um Cortex Search Service de dentro de um ambiente SQL, como uma planilha ou uma célula do Snowflake Notebook. Essa função facilita a validação rápida de que um serviço está preenchido corretamente e gerando resultados razoáveis.
Exemplo¶
O exemplo a seguir visualiza o serviço com a cadeia de caracteres de consulta preview query
e analisa os resultados em um objeto 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;
Requisitos de controle de acesso¶
A função que está consultando o Cortex Search Service deve ter os seguintes privilégios para recuperar resultados:
Privilégio
Objeto
USAGE
O Cortex Search Service
USAGE
O banco de dados no qual o Cortex Search Service reside
USAGE
O esquema no qual o Cortex Search Service reside