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¶
O Cortex Search Services pode ser consultado usando a versão 0.8.0 ou posterior do Snowflake Python APIs. 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 da API REST no conjunto de APIs REST do Snowflake. 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 quatro operadores de correspondência:
Igualdade da cadeia de caracteres:
@eq
A matriz contém:
@contains
Data/carimbo de data/hora maior ou igual a:
@gte
Data/carimbo de data/hora menor ou igual a:
@lte
Esses operadores correspondentes podem ser compostos com vários operadores lógicos:
@and
@or
@not
Os operadores @gte
e @lte
podem operar em ATTRIBUTES do tipo DATE
ou TIMESTAMP
(Tipos de dados de data e hora) e aceitam valores do tipo: YYYY-MM-DD
e, para datas com conhecimento de fuso horário: YYYY-MM-DD+HH:MM
. Se o deslocamento de fuso horário não for especificado, a data será interpretada em UTC. Os operadores @gte
e @lte
incluem os valores especificados.
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" } }
Filtragem de linhas em que a coluna TIMESTAMP
timestamp_col
está entre2024-11-19
e2024-12-19
(inclusive).{ "@and": [ { "@gte": { "timestamp_col": "2024-11-19" } }, { "@lte": { "timestamp_col": "2024-12-19" } } ]}
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