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
Copy

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)
Copy

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())
Copy

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
Copy

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étodo query.

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

query

Sua consulta de pesquisa, para pesquisar na coluna de texto no serviço.

columns

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.

filter

Um objeto de filtro para filtrar resultados com base nos dados nas colunas ATTRIBUTES. Consulte sintaxe do filtro.

limit

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 valor value.

    { "@eq": { "string_col": "value" } }
    
    Copy
  • Filtro em linhas onde a coluna ARRAY array_col contém o valor value.

    { "@contains": { "array_col": "arr_value" } }
    
    Copy
  • 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" } }
      ]
    }
    
    Copy

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>
}'
Copy

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;
Copy

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