Cortex Search Service 쿼리하기

Cortex Search Service를 생성하면 서비스에 쿼리를 제공하기 위해 REST API 엔드포인트가 프로비저닝됩니다. Cortex Search Service를 쿼리하는 데는 두 가지 옵션이 있습니다.

  • Snowflake Python APIs 사용하기

  • 원하는 클라이언트를 사용하여 REST 엔드포인트를 직접 쿼리

Snowflake Python APIs

현재 미리 보기로 제공되는 Snowflake Python APIs 버전 0.8.0 이상을 사용하여 Cortex Search Service를 쿼리할 수 있습니다. Snowflake Python APIs 에 대한 자세한 내용은 Snowflake Python APIs: Python으로 Snowflake 오브젝트 관리하기 섹션을 참조하십시오.

Snowflake Python APIs 라이브러리 설치

먼저 PyPI에서 최신 버전의 Snowflake Python APIs 패키지를 설치 관리자에 설치합니다. PyPI에서 이 패키지를 설치하는 방법에 대한 지침은 Snowflake Python APIs 라이브러리 설치 섹션을 참조하십시오.

pip install snowflake -U
Copy

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

서비스 쿼리

다음 구문을 사용하여 서비스를 쿼리합니다.

# 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

참고

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
Copy

여기서

  • <account_url>: 사용자의 Snowflake 계정 URL입니다. 계정 URL을 찾는 방법은 계정의 조직 및 계정 이름 찾기 섹션을 참조하십시오.

  • <db_name>: 서비스가 있는 데이터베이스입니다.

  • <schema_name>: 서비스가 있는 스키마입니다.

  • <service_name>: 서비스의 이름입니다.

  • :query: 서비스를 호출하는 메서드입니다. 이 경우에는 query 메서드입니다.

자세한 내용은 Cortex Search Service 에 대한 REST API 참조를 참조하십시오. 다음은 서비스를 쿼리할 때 사용하는 매개 변수와 필터 구문을 설명합니다.

매개 변수

매개 변수

설명

query

사용자의 검색어는 서비스의 텍스트 열을 검색하는 데 사용됩니다.

columns

응답에서 각 관련 결과에 대해 반환할 열의 쉼표로 구분된 목록입니다. 이러한 열은 서비스의 소스 쿼리에 포함되어야 합니다.

filter

ATTRIBUTES 열의 데이터를 기준으로 결과를 필터링하기 위한 필터 오브젝트입니다. 필터 구문 섹션을 참조하십시오.

limit

응답에서 반환할 결과의 최대 개수입니다.
허용되는 최대값은 1000입니다.
기본값은 10입니다.

필터 구문

Cortex Search는 CREATE CORTEX SEARCH SERVICE 명령에 지정된 ATTRIBUTES 열에 대한 필터링을 지원합니다.

Cortex Search는 2개의 일치 연산자를 지원합니다.

  • 문자열 동등성: @eq

  • 배열에 포함된 항목: @contains

이러한 일치 연산자는 다양한 논리 연산자로 구성될 수 있습니다.

  • @and

  • @or

  • @not

이러한 연산자를 1개의 필터 오브젝트로 결합할 수 있습니다. 다음은 그 예입니다.

  • 문자열과 같은 열 string_colvalue 값과 같은 행을 필터링합니다.

    { "@eq": { "string_col": "value" } }
    
    Copy
  • ARRAY 열 array_col 에 값 value 가 포함된 행을 필터링합니다.

    { "@contains": { "array_col": "arr_value" } }
    
    Copy
  • 논리 연산자를 사용하여 필터 구성:

    // 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

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

참고

JWT 인증을 사용하여 REST API를 쿼리할 때는 사용자의 기본 역할이 사용됩니다. 따라서 서비스를 쿼리하는 사용자의 기본 역할은 서비스가 상주하는 데이터베이스 및 스키마와 서비스 자체에 대한 USAGE 권한이 있어야 합니다. 쿼리하는 사용자 역할에는 반드시 소스 쿼리의 데이터에 대한 권한이 필요한 것은 아닙니다. 사용자 역할에 대한 자세한 내용은 사용자 역할 섹션을 참조하십시오.

SQL 시스템 함수를 사용한 서비스 미리 보기

SNOWFLAKE.CORTEX.SEARCH_PREVIEW 함수를 사용하면 워크시트나 Snowflake Notebook 셀과 같은 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;
Copy

액세스 제어 요구 사항

Cortex Search Service를 쿼리하는 역할은 결과를 검색하기 위해 다음 권한이 있어야 합니다.

권한

오브젝트

USAGE

Cortex Search Service

USAGE

Cortex Search Service가 있는 데이터베이스

USAGE

Cortex Search Service가 있는 스키마