CREATE CORTEX SEARCH SERVICE¶
새로운 Cortex Search Service 를 만들거나 기존 서비스를 대체합니다.
구문¶
CREATE [ OR REPLACE ] CORTEX SEARCH SERVICE [ IF NOT EXISTS ] <name>
ON <search_column>
ATTRIBUTES <col_name> [ , ... ]
WAREHOUSE = <warehouse_name>
TARGET_LAG = '<num> { seconds | minutes | hours | days }'
[ EMBEDDING_MODEL = <embedding_model_name> ]
[ INITIALIZE = { ON_CREATE | ON_SCHEDULE } ]
[ COMMENT = '<comment>' ]
AS <query>;
CREATE [ OR REPLACE ] CORTEX SEARCH SERVICE <name>
TEXT INDEXES <text_column_name> [ , ... ]
VECTOR INDEXES <column_specification> [ , ... ]
ATTRIBUTES <col_name> [ , ... ]
WAREHOUSE = <warehouse_name>
TARGET_LAG = '<num> { seconds | minutes | hours | days }'
[ INITIALIZE = { ON_CREATE | ON_SCHEDULE } ]
[ COMMENT = '<comment>' ]
AS <query>;
필수 매개 변수¶
nameCortex Search Service의 식별자(즉, 이름)를 지정하는 문자열로, 서비스가 생성되는 스키마에 대해 고유해야 합니다.
또한, 식별자는 알파벳 문자로 시작해야 하며 전체 식별자 문자열을 큰따옴표(예:
"My object")로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없습니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.
ON search_columnSpecifies the text column in the base table that you wish to search on, for single-index Cortex Search. This column must be a text value.
TEXT INDEXES text_column_name [, ... ]Specifies comma-separated text columns in the base table to search on, for multi-index Cortex Search. Columns must be text values.
VECTOR INDEXES column_specification [ , ... ]벡터 유사성 검색을 위한 열을 지정합니다. 열 사양에는 다음이 포함됩니다.
관리 벡터 임베딩:
text_column_name (model='embedding_model'): 벡터 생성에 사용되는 텍스트 열과 임베딩 모델을 지정합니다. 지원되는 임베딩 모델 중 하나를 사용해야 합니다. 모델을 지정하지 않은 경우 기본 모델 ``snowflake-arctic-embed-m-v1.5``가 사용됩니다.사용자 제공 벡터 임베딩:
vector_column_name: 사용자 제공 벡터 임베딩 열을 지정합니다.관리 쿼리 임베딩을 사용한 사용자 제공 벡터 임베딩:
vector_column_name(query_model='embedding_model'): 사용자 제공 벡터 임베딩 열과 쿼리 시간에 텍스트 임베딩에 사용되는 임베딩 모델을 지정합니다.query_model`은 :ref:`Cortex Search에서 지원되는 Snowflake 관리 임베딩 모델<label-cortex_search_embedding_models>중 하나여야 합니다. :samp:`query_model`이 지정되지 않은 경우 사용자 제공 벡터 열은 벡터 임베딩 쿼리에만 사용할 수 있습니다.
벡터 임베딩의 동작에 대한 자세한 내용은 사용법 노트 섹션을 참조하세요.
ATTRIBUTES col_name [ , ... ]서비스에 쿼리를 실행할 때 필터링할 기본 테이블에서 쉼표로 구분된 열 목록을 지정합니다. 명시적 열거 또는 와일드카드(
*)를 통해 원본 쿼리에 특성 열을 포함해야 합니다.WAREHOUSE = warehouse_name원본 쿼리 실행, 검색 인덱스 작성, TARGET_LAG 대상별로 새로 고침 상태를 유지하는 데 사용할 웨어하우스를 지정합니다.
TARGET_LAG = 'num { seconds | minutes | hours | days }'Cortex Search Service 콘텐츠가 원본 쿼리에 지정된 기본 테이블에 대한 업데이트보다 지연되어야 하는 최대 시간을 지정합니다.
선택적 매개 변수¶
EMBEDDING_MODEL = <embedding_model_name>Cortex Search Service에서 사용할 임베딩 모델을 지정하는 선택적 매개 변수입니다. 이 속성은 Cortex Search Service를 생성한 후에는 변경할 수 없습니다. 속성을 수정하려면 CREATE OR REPLACE CORTEX SEARCH SERVICE 명령으로 Cortex Search Service를 다시 만듭니다.
일부 임베딩 모델은 특정 클라우드 리전에서만 Cortex Search를 사용할 수 있습니다. 리전을 기준으로 한 모델별 가용성 목록은 Cortex Search 리전별 가용성 섹션을 참조하십시오.
각 모델마다 처리되는 입력 토큰 백만 개당 비용이 다르게 발생할 수 있습니다. 백만 토큰당 크레딧으로 표시되는 각 함수의 비용은 Snowflake 서비스 사용 테이블 을 참조하십시오.
EMBEDDING_MODEL을 지정하지 않으면 기본 모델이 사용됩니다. 기본 모델은snowflake-arctic-embed-m-v1.5입니다.INITIALIZECortex Search Service의 초기 새로 고침 동작을 지정합니다. 이 속성은 서비스를 만든 후에는 변경할 수 없습니다. 속성을 수정하려면 CREATE OR REPLACE CORTEX SEARCH SERVICE 명령으로 Cortex Search Service를 대체합니다.
ON_CREATE생성 시 Cortex Search Service를 동기식으로 새로 고칩니다. 이 새로 고침에 실패하면 서비스 생성이 실패하고 오류 메시지가 표시됩니다.
ON_SCHEDULE다음 예약된 새로 고침 시 Cortex Search Service를 새로 고칩니다.
새로 고침 예약 프로세스가 실행되면 Cortex Search Service가 채워집니다. Cortex Search Service가 생성될 때 데이터가 채워지지 않습니다. 서비스를 쿼리하려고 하면 예약된 첫 번째 새로 고침이 아직 수행되지 않았기 때문에 다음 오류가 표시될 수 있습니다.
Your service has not yet been loaded into our serving system. Please retry your request in a few minutes.
기본값:
ON_CREATECOMMENT = 'comment'서비스에 대한 설명을 지정합니다.
AS query서비스가 생성되는 기본 테이블을 정의하는 쿼리를 지정합니다.
액세스 제어 요구 사항¶
이 작업을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.
권한 |
오브젝트 |
|---|---|
CREATE CORTEX SEARCH SERVICE |
검색 서비스를 생성하는 스키마입니다. |
SELECT |
서비스가 쿼리하는 테이블 및 뷰입니다. |
USAGE |
서비스를 새로 고치는 웨어하우스입니다. |
스키마의 오브젝트에 대한 작업을 수행하려면 상위 데이터베이스에 대한 하나 이상의 권한과 상위 스키마에 대한 하나 이상의 권한이 필요합니다.
지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.
보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.
주의
Cortex Search Service를 생성하려면 역할에 Cortex 임베딩 함수를 사용하는 데 필요한 권한이 있어야 합니다. 이를 위해서는 SNOWFLAKE.CORTEX_USER 데이터베이스 역할 또는 SNOWFLAKE.CORTEX_EMBED_USER 데이터베이스 역할을 서비스 생성자 역할에 부여해야 합니다.
사용법 노트¶
주의
고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.
Cortex Search Service 원본 쿼리를 실행하는 데 사용되는 웨어하우스의 크기는 각 새로 고침의 속도와 비용에 영향을 미칩니다. 웨어하우스가 클수록 빌드 및 새로 고침 시간이 줄어듭니다. 그러나 이 미리 보기 중에는 Cortex Search Service에 대해 MEDIUM보다 크지 않은 웨어하우스 크기를 사용하는 것이 좋습니다.
다른 워크로드를 방해하지 않도록 각 Cortex Search Service 전용 웨어하우스를 사용하는 것이 좋습니다.
검색 인덱스는 create 문의 일부로 개발되므로, 더 큰 데이터 세트의 경우 CREATE CORTEX SEARCH SERVICE 문을 완료하는 데 시간이 더 오래 걸릴 수 있습니다.
다중 인덱스 검색 서비스를 생성하는 경우 최고 품질의 검색 결과를 보장하기 위해 VECTOR INDEXES 절에 하나 이상의 열을 지정해야 합니다. 벡터 인덱스가 없는 서비스를 만들려고 시도하면 오류가 반환됩니다.
열은 TEXT INDEXES 절, VECTOR INDEXES 절 또는 둘 다에 지정할 수 있습니다.
텍스트 인덱스로 지정된 열은 키워드(어휘) 검색에 사용할 수 있습니다. 텍스트 인덱스를 쿼리할 때 결과는 어휘적 유사성 정도에 따라 점수가 매겨집니다.
벡터 인덱스로 지정된 열은 벡터(의미 체계) 검색에 사용할 수 있습니다. 벡터 인덱스를 쿼리할 때 의미 체계 유사성 정도에 따라 결과의 점수가 매겨집니다.
텍스트 및 벡터 인덱스로 지정된 열은 두 가지 검색 유형 모두에 사용됩니다.
각 벡터 인덱스 열은 임베딩을 관리하기 위해 다음 3가지 방법 중 하나를 사용합니다.
관리 벡터 임베딩: Snowflake는 텍스트 열이 ON 또는 VECTOR INDEXES 절에 지정된 경우 벡터 임베딩을 계산합니다. 지원되는 임베딩 모델 중 하나를 사용해야 합니다.
사용자 제공 벡터 임베딩: Cortex Search Service에서 수집하기 전에 Snowflake 제공 벡터 임베딩 모델 또는 외부 호스팅 임베딩 모델을 사용하여 벡터 임베딩을 계산하고 쿼리 시 텍스트를 입력할 책임이 있습니다.
관리 쿼리 임베딩을 사용한 사용자 제공 벡터 임베딩: Cortex Search Service에서 수집하기 전에 Cortex Search에서 지원되는 Snowflake 관리 임베딩 모델 중 하나를 사용하여 벡터 임베딩을 계산할 책임이 있습니다. 쿼리 시 Cortex Search는 지정된 :samp:`query_model`을 사용하여 텍스트 쿼리를 임베딩합니다.
변경 내용 추적 요구 사항¶
Cortex Search Service를 생성할 때 쿼리하는 테이블에 변경 내용 추적이 아직 활성화되지 않은 경우 Snowflake는 자동으로 해당 테이블에 대한 변경 내용 추적을 활성화하려고 시도합니다. 증분 새로 고침을 지원하려면 Cortex Search Service에서 사용하는 모든 기본 오브젝트에 대해 :ref:`0이 아닌 Time Travel 보존<label-data_retention_time_in_days>`으로 변경 내용 추적을 활성화해야 합니다.
기본 오브젝트가 변경되면 Cortex Search Service도 변경됩니다. 오브젝트를 다시 생성하는 경우 변경 내용 추적을 다시 활성화해야 합니다.
변경 내용 추적 활성화에 대한 자세한 내용은 변경 내용 추적 활성화 섹션을 참조하세요.
OR REPLACE 및 IF NOT EXISTS 절은 상호 배타적입니다. 두 절을 같은 문에 함께 사용할 수 없습니다.
CREATE OR REPLACE <오브젝트> 문은 원자성입니다. 즉, 오브젝트가 바뀔 때 단일 트랜잭션으로 이전 오브젝트가 삭제되고 새 오브젝트가 생성됩니다.
Examples¶
snowflake-arctic-embed-l-v2.0 임베딩 모델을 사용하여 mysvc 라는 Cortex Search Service를 만듭니다.
CREATE OR REPLACE CORTEX SEARCH SERVICE mysvc
ON transcript_text
ATTRIBUTES region,agent_id
WAREHOUSE = mywh
TARGET_LAG = '1 hour'
EMBEDDING_MODEL = 'snowflake-arctic-embed-l-v2.0'
AS (
SELECT
transcript_text,
date,
region,
agent_id
FROM support_db.public.transcripts_etl
);
TARGET_LAG 기간(1시간)이 지난 후 첫 번째 새로 고침이 실행되도록 예약된 mysvc 라는 Cortex Search Service를 만듭니다.
CREATE OR REPLACE CORTEX SEARCH SERVICE mysvc
ON transcript_text
ATTRIBUTES region
WAREHOUSE = mywh
TARGET_LAG = '1 hour'
INITIALIZE = ON_SCHEDULE
AS SELECT * FROM support_db.public.transcripts_etl;
business_directory 테이블을 검색하는 ``business_search_service``라는 다중 인덱스 검색 서비스를 만듭니다. 여기서,
name및 :code:`address`는 텍스트 인덱스로 지정되므로 키워드 검색으로만 검색할 수 있습니다.description`은 벡터 인덱스로 지정되므로 관리 벡터 임베딩 및 :code:`snowflake-arctic-embed-m-v1.5모델을 사용한 벡터(의미론적) 검색에 적합합니다.
-- Generate sample data
CREATE OR REPLACE TABLE business_directory (name TEXT, address TEXT, description TEXT);
INSERT INTO business_directory VALUES
('Joe''s Coffee', '123 Bean St, Brewtown','A cozy café known for artisan espresso and baked goods.'),
('Sparkle Wash', '456 Clean Ave, Sudsville', 'Eco-friendly car wash with free vacuum service.'),
('Tech Haven', '789 Circuit Blvd, Siliconia', 'Computer store offering the latest gadgets and tech repair services.'),
('Joe''s Wash n'' Fold', '456 Apple Ct, Sudsville', 'Laundromat offering coin laundry and premium wash and fold services.'),
('Circuit Town', '459 Electron Dr, Sudsville', 'Technology store selling used computer parts at discounted prices.')
;
-- Create the Cortex Search Service
CREATE OR REPLACE CORTEX SEARCH SERVICE business_search_service
TEXT INDEXES name, address
VECTOR INDEXES description (model='snowflake-arctic-embed-m-v1.5')
WAREHOUSE = mywh
TARGET_LAG = '1 hour'
AS ( SELECT * FROM business_directory );
custom_vector_search_service``라는 사용자 지정 벡터 임베딩을 사용하여 다중 인덱스 Cortex Search Service를 만듭니다. 이 서비스에서는 텍스트 열(``document_contents) 및 텍스트 열에 해당하는 임베딩을 포함하는 별도의 사용자 제공 벡터 임베딩 열(document_embedding)이 있는 테이블을 검색합니다.
참고
이 예제에서는 단순성을 위해 모의 임베딩을 사용합니다. 프로덕션 사용 사례에서 벡터는 Snowflake 벡터 임베딩 모델 또는 외부 호스팅 임베딩 모델을 통해 생성되어야 합니다.
-- Generate sample data
CREATE OR REPLACE TABLE business_documents (
document_contents VARCHAR,
document_embedding VECTOR(FLOAT, 3)
);
INSERT INTO business_documents VALUES
('Quarterly financial report for Q1 2024: Revenue increased by 15%, with expenses stable. Highlights include strategic investments in marketing and technology.', [1, 1, 1]::VECTOR(float, 3)),
('IT manual for employees: Instructions for usage of internal technologies, including hardware and software guides and commonly asked tech questions.', [2, 2, 2]::VECTOR(float, 3)),
('Employee handbook 2024: Updated policies on remote work, health benefits, and company culture initiatives.', [2, 3, 2]::VECTOR(float, 3)),
('Marketing strategy document: Target audience segmentation for upcoming product launch.', [1, -1, -1]::VECTOR(float, 3))
;
-- Create the Cortex Search Service
CREATE OR REPLACE CORTEX SEARCH SERVICE custom_vector_search_service
TEXT INDEXES (document_contents)
VECTOR INDEXES (document_embedding)
WAREHOUSE = mywh
TARGET_LAG = '1 minute'
AS SELECT * FROM business_documents;
사용자 관리 벡터 임베딩 및 관리 쿼리 임베딩이 있는 managed_vector_search_service 서비스를 생성합니다.
-- Generate sample data
CREATE OR REPLACE TABLE business_documents (
document_contents VARCHAR
);
INSERT INTO business_documents VALUES
('Quarterly financial report for Q1 2024: Revenue increased by 15%, with expenses stable. Highlights include strategic investments in marketing and technology.'),
('IT manual for employees: Instructions for usage of internal technologies, including hardware and software guides and commonly asked tech questions.'),
('Employee handbook 2024: Updated policies on remote work, health benefits, and company culture initiatives.'),
('Marketing strategy document: Target audience segmentation for upcoming product launch.');
-- Add managed vector embeddings
ALTER TABLE business_documents ADD COLUMN document_embeddings VECTOR(FLOAT, 768);
UPDATE business_documents SET document_embeddings = AI_EMBED('snowflake-arctic-embed-m-v1.5', document_contents);
-- Create the Cortex Search Service
CREATE OR REPLACE CORTEX SEARCH SERVICE managed_vector_search_service
TEXT INDEXES document_contents
VECTOR INDEXES document_embedding(query_model='snowflake-arctic-embed-m-v1.5')
WAREHOUSE = mywh
TARGET_LAG = '1 minute'
AS SELECT * FROM business_documents;