대규모 테이블의 자동 벡터 임베딩 생성 및 관리

문서 버전을 선택합니다.

전체 테이블 열의 벡터 임베딩을 생성하고 관리할 수 있으므로 대규모 벡터 임베딩 생성을 위한 확장 가능한 솔루션을 제공합니다. 이 솔루션은 다음을 비롯한 텍스트 콘텐츠에 대한 시맨틱 검색 및 검색 증강 생성(RAG)을 지원하는 데 특히 유용합니다.

  • 새 테이블의 초기 벡터 임베딩 만들기
  • 대량의 데이터를 가져온 후 임베딩 생성
  • 중요한 데이터 변경 후 임베딩 새로고침
  • 점진적으로 임베딩 유지

자동 벡터 임베딩 이해

AlloyDB Omni의 자동 벡터 임베딩은 데이터의 벡터 임베딩 생성 및 유지보수를 자동화하는 확장 가능한 방법을 제공합니다. 새 텍스트나 업데이트된 텍스트마다 임베딩을 수동으로 생성하는 대신 자동 벡터 임베딩을 구성하여 이 프로세스를 처리할 수 있습니다. 이는 시맨틱 검색, 검색 증강 생성(RAG), 기타 AI 기반 기능을 위해 최신 임베딩을 사용하는 애플리케이션에 특히 유용합니다.

자동 벡터 임베딩을 사용하면 다음 작업을 할 수 있습니다.

  • 전체 테이블의 임베딩 초기화: 단일 명령어로 테이블 열의 모든 기존 데이터에 대한 임베딩을 생성합니다.
  • 임베딩 동기화 유지: 소스 데이터가 변경되면 임베딩을 자동으로 업데이트하여 AI 애플리케이션이 항상 최신 정보를 바탕으로 작동하도록 합니다.
  • 대규모 임베딩 생성: 수백만 개의 행이 있는 대규모 테이블의 임베딩을 효율적으로 생성합니다.
  • 각 임베딩 열에 대해 관리 함수를 호출하여 동일한 테이블에 있는 여러 열의 임베딩을 구성하고 관리합니다.

이 기능은 벡터 임베딩 생성 및 유지관리의 복잡성을 추상화하여 AI 애플리케이션의 개발 및 유지관리를 간소화합니다.

시작하기 전에

대규모 테이블의 벡터 임베딩을 생성하고 관리하려면 다음 단계를 따르세요.

  • Vertex AI 할당량 확인 및 늘리기: 최적의 성능을 보장하고 작업 속도 저하, 낮은 QPS 또는 여러 번의 재시도를 방지하려면 Vertex AI 할당량을 확인하고 필요한 경우 늘리세요.

    할당량을 확인하고 늘리려면 다음 단계를 따르세요.

    1. Google Cloud 콘솔에서 할당량 페이지로 이동합니다.
    2. 모델 및 지역과 관련된 다음 측정항목을 필터링합니다.
      • 분당 요청 수 (RPM): Regional online prediction requests per base model per minute per region per base_model
      • Gemini 토큰: Embed content input tokens per minute per region per base_model
    3. 현재 한도가 표 크기에 충분하지 않은 경우 업데이트할 할당량 값을 찾아 할당량 옆에 있는 체크박스를 선택합니다.
    4. 수정을 클릭합니다. 할당량 변경사항 대화상자가 표시됩니다.

      자세한 내용은 할당량 조정 요청을 참고하세요.

    Vertex AI 임베딩 모델 한도는 Gemini 임베딩 모델 토큰 한도를 참고하세요.

    전체 할당량 목록은 Vertex AI 할당량 및 한도를 참고하세요.

  • postgres 사용자로 psql을 사용하여 데이터베이스에 연결합니다.

  • google_ml_integration 확장 프로그램이 설치되어 있고 버전이 1.5.6 이상인지 확인합니다.

  • google_ml_integration.enable_model_support 플래그와 google_ml_integration.enable_faster_embedding_generation 플래그가 on으로 설정되어 있는지 확인합니다.

  • AlloyDB Omni 데이터베이스에서 임베딩을 생성하려면 먼저 Vertex AI와 함께 작동하도록 AlloyDB Omni를 구성해야 합니다. 자세한 내용은 Vertex AI와 데이터베이스 통합을 참고하세요.

  • 자동 임베딩 생성 관리 및 모니터링을 위해, 사용자에게는 기본적으로 google_ml.embed_gen_progressgoogle_ml.embed_gen_settings 테이블에 대한 Select 액세스 권한이 있습니다.

    사용자가 자동 임베딩 생성을 관리하도록 하려면 google_ml.embed_gen_progressgoogle_ml.embed_gen_settings 테이블에 INSERT, UPDATE, DELETE 권한을 부여하세요.

    GRANT INSERT, UPDATE, DELETE ON google_ml.embed_gen_progress TO 'USER_NAME';
    

    다음을 바꿉니다.

    • USER_NAME: 권한이 부여된 사용자의 이름입니다.
  • 텍스트 임베딩 생성에 설명된 초기 설정을 완료합니다.

  • 사용하는 PostgreSQL 클라이언트에서 AUTOCOMMITON으로 설정되어 있는지 확인합니다.

확장 프로그램 버전 확인

google_ml_integration 확장 프로그램의 버전을 확인하려면 다음 명령어를 실행합니다.

SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';

확장 프로그램을 업데이트해야 하는 경우 다음 명령어를 실행합니다.

ALTER EXTENSION google_ml_integration UPDATE;

데이터베이스 플래그가 on으로 설정되어 있는지 확인합니다.

데이터베이스 플래그가 올바르게 설정되었는지 확인하려면 다음 명령어를 실행합니다.

SHOW google_ml_integration.enable_model_support;
SHOW google_ml_integration.enable_faster_embedding_generation;

이러한 플래그가 off로 설정된 경우 인스턴스의 데이터베이스 플래그 구성을 참고하세요. 이러한 플래그에 대한 자세한 내용은 지원되는 데이터베이스 플래그를 참고하세요.

표 준비

자동 임베딩을 생성하려면 먼저 테이블에 결과 벡터를 저장할 열을 만들어야 합니다. 이 열은 일반적으로 vector(DIMENSION) 유형을 사용하며 DEFAULT NULL 값이 있어야 합니다.

예를 들어 768차원 임베딩의 열을 user_reviews이라는 테이블에 추가하려면 다음을 실행합니다.

ALTER TABLE user_reviews ADD COLUMN IF NOT EXISTS content_embeddings vector(768) DEFAULT NULL;

테이블의 임베딩 초기화

자동 벡터 임베딩을 관리하는 함수는 aigoogle_ml 스키마에서 모두 사용할 수 있습니다. ai 스키마는 AlloyDB Omni의 최신 AI 기능을 위한 간소화된 인터페이스를 제공합니다.

ai.initialize_embeddings() SQL 함수를 사용하여 테이블의 콘텐츠 열에 대한 임베딩을 생성합니다. 이는 차단 호출입니다. 즉, 데이터베이스 세션은 작업이 완료될 때까지 기다린 후 결과를 반환하고 해당 세션에서 새 명령어를 실행할 수 있도록 허용합니다. 하지만 데이터베이스에 대한 다른 연결은 차단되지 않으며 테이블을 계속 사용할 수 있습니다.

  • 함수가 성공을 반환하면 벡터 임베딩 생성은 완료된 것입니다.
  • 이 함수는 모델 할당량 오류와 같은 일시적인 문제를 자동으로 복구하려고 시도합니다. 이러한 복구 시도가 실패한 경우에만 실패가 반환됩니다. 요청이 크기 제한을 초과하게 하는 잘못 구성된 batch_size와 같은 지속적인 문제의 경우 또는 작업이 수동으로 취소된 경우 호출을 수동으로 다시 실행해야 합니다.

이 함수는 Google 제공 모델(예: Vertex AI의 text-embedding-005)과 등록한 맞춤 모델을 지원합니다.

일괄 생성 실행

기본적으로 AlloyDB Omni는 일괄 처리를 사용하여 단일 요청으로 여러 텍스트 입력의 임베딩을 생성하므로 효율성이 향상됩니다. 특정 배치 크기를 제공하지 않으면 AlloyDB Omni에서 자동으로 결정된 기본값을 적용합니다.

배치 크기 제안

ai.initialize_embeddingsbatch_size 파라미터를 사용하면 직접 지원되는 모델에 대해 선호하는 배치 크기를 제안하여 AlloyDB Omni의 쿼리 최적화 도구를 안내할 수 있습니다. AlloyDB Omni는 모델 한도 또는 할당량에 따라 이 크기를 동적으로 줄일 수 있지만 힌트는 쿼리 실행 계획에 영향을 미치는 데 도움이 됩니다.

CALL ai.initialize_embeddings(
    model_id => 'text-embedding-005',
    table_name => 'user_reviews',
    content_column => 'content',
    embedding_column => 'content_embeddings',
    batch_size => 50
);

일괄 지원이 포함된 맞춤 임베딩 모델 사용

일괄 처리를 지원하는 맞춤 모델 또는 외부 지원 모델을 사용하려면 일괄 변환 함수를 정의하고 모델을 만들 때 model_batch_in_transform_fnmodel_batch_out_transform_fn으로 지정하세요. initialize_embeddings 호출에서 batch_size를 지정할 수도 있습니다. 일괄 처리를 지원하는 모델의 경우 성능 향상을 위해 batch_size를 1보다 큰 값으로 사용하는 것이 좋습니다.

  1. 맞춤 모델의 입력, 출력, 일괄 변환 함수를 정의합니다.

    -- Scalar input transform functions
    CREATE OR REPLACE FUNCTION acme_text_input_transform(model_id TEXT, input TEXT) RETURNS JSON;
    CREATE OR REPLACE FUNCTION acme_text_output_transform(model_id TEXT, model_output JSON) RETURNS real[];
    CREATE OR REPLACE FUNCTION acme_generate_headers(model_id TEXT, input TEXT) RETURNS JSON;
    -- Batch input transform functions
    CREATE OR REPLACE FUNCTION acme_text_batch_input_transform(model_id TEXT, input TEXT[]) RETURNS JSON;
    CREATE OR REPLACE FUNCTION acme_text_batch_output_transform(model_id TEXT, model_output JSON) RETURNS real[][];
    
  2. 모델을 만들려면 배치 변환 함수를 지정하세요.

    CALL
      ai.create_model(
        model_id => 'custom-embedding-model',
        model_request_url => 'https://acme.com/models/text/embeddings/v1',
        model_type => 'text_embedding',
        model_in_transform_fn => 'acme_text_input_transform',
        model_out_transform_fn => 'acme_text_output_transform',
        generate_headers_fn => 'acme_generate_headers',
        model_batch_in_transform_fn => 'acme_text_batch_input_transform',
        model_batch_out_transform_fn => 'acme_text_batch_output_transform'
      );
    
  3. 맞춤 모델로 벡터 임베딩을 생성합니다.

    CALL
      ai.initialize_embeddings(
        model_id => 'custom-embedding-model',
        table_name => 'user_reviews',
        content_column => 'content',
        embedding_column => 'content_embeddings',
        batch_size => 10
    );
    

일괄 처리를 기본적으로 지원하지 않는 맞춤 모델과 함께 자동 임베딩 기능을 사용할 수도 있습니다. 이렇게 하려면 배치 변환 함수 model_batch_in_transform_fnmodel_batch_out_transform_fn을 정의해야 합니다. 배치되지 않은 모델의 경우 입력 배열에서 한 번에 하나의 입력을 처리하도록 이러한 함수를 정의합니다. 이 모델에 대해 ai.initialize_embeddings를 호출할 때 batch_size1로 설정합니다.

일괄 지원으로 맞춤 차원 사용

OUTPUT_DIMENSIONALITY 매개변수와 함께 맞춤 일괄 입력 변환 함수를 사용하려면 요청 매개변수에서 선택한 측정기준을 지정하는 함수를 정의하면 됩니다. 이는 가변 출력 크기를 지원하는 모델의 임베딩 생성을 최적화하는 데 유용합니다.

예를 들어 다음 함수는 출력 차원 768이 필요한 모델의 맞춤 배치 입력 변환을 정의합니다.

CREATE OR REPLACE FUNCTION google_ml.vertexai_text_embedding_batch_input_transform_with_768_dims(model_id VARCHAR(100), input_list TEXT[])
RETURNS JSON
LANGUAGE SQL
AS $$
  SELECT pg_catalog.json_build_object(
    'instances',
    pg_catalog.json_agg(pg_catalog.json_build_object('content', content)),
    'parameters',
    pg_catalog.json_build_object('outputDimensionality', 768)
  ) FROM unnest(input_list) AS content;
$$;

커스텀 모델에서 JSONB 최적화 사용

성능 향상을 위해 맞춤 출력 변환 함수에서 JSONB 데이터 유형을 사용할 수 있습니다. 일괄 처리를 지원하는 맞춤 모델을 만들면 google_ml_integration 확장 프로그램이 변환 함수의 JSONB 변형을 자동으로 찾아 사용합니다.

이 최적화는 PostgreSQL에서 JSON 데이터를 저장하고 처리하는 데 더 효율적인 바이너리 형식인 JSONB를 사용하므로 자동 삽입 생성 성능을 크게 개선할 수 있습니다.

이 기능을 활용하려면 JSON 대신 JSONB 인수를 허용하는 변환 함수의 다른 버전을 제공해야 합니다.

예를 들어 서명이 다음과 같은 배치 출력 변환 함수가 있는 경우

CREATE OR REPLACE FUNCTION my_batch_output_transform(model_id TEXT, model_output JSON) RETURNS real[][];

다음과 같이 JSONB 변형을 만들 수 있습니다.

CREATE OR REPLACE FUNCTION my_batch_output_transform(model_id TEXT, model_output JSONB) RETURNS real[][];

확장 프로그램은 함수의 JSONB 버전을 자동으로 감지하고 일괄 처리에 사용합니다. JSON 변환 함수를 사용하는 모델 등록을 이미 만든 경우 ai.create_model 호출을 업데이트할 필요가 없습니다. 새 JSONB 함수가 기존 JSON 함수와 정확히 동일한 이름을 사용하는 한 확장 프로그램은 일괄 처리를 위해 JSONB 변형을 투명하게 감지하고 사용합니다.

증분 방식으로 임베딩 새로고침

임베딩을 새로고침하면 입력 콘텐츠 열의 최신 값을 기반으로 재생성됩니다.

일관성과 성능을 제어할 수 있도록 AlloyDB Omni는 증분 임베딩 새로고침을 위한 다양한 모드를 지원합니다. ai.initialize_embeddings()에서 incremental_refresh_mode enum 인수를 사용하여 모드를 선택할 수 있습니다. 가능한 모드는 다음과 같습니다.

  • transactional: 콘텐츠 열을 업데이트하는 트랜잭션의 일부로 임베딩이 새로고침됩니다. 이 프로세스에서는 콘텐츠 열이 업데이트될 때 데이터베이스 트리거와 유사한 메커니즘을 사용하여 임베딩을 자동으로 생성하는 경우가 많으므로 오버헤드가 발생하고 업데이트 작업이 느려질 수 있습니다. 도입된 오버헤드는 트랜잭션 시맨틱스 체계를 유지하고 임베딩이 콘텐츠와 동기화되도록 하기 위한 절충안입니다. 이 모드는 모델의 스칼라 변환 함수를 사용하므로 모델을 만들 때 model_in_transform_fnmodel_out_transform_fn을 정의해야 합니다. transactional 모드를 사용하려면 테이블에 대한 소유자 역할이 있어야 합니다.

    CALL
      ai.initialize_embeddings(
        model_id => 'text-embedding-005',
        table_name => 'user_reviews',
        content_column => 'content',
        embedding_column => 'content_embeddings',
        batch_size => 10,
        incremental_refresh_mode => 'transactional'
    );
    

    transactional 모드에서는 트리거를 사용하여 임베딩이 자동으로 동기화되므로 ai.refresh_embeddings() 함수가 사용 중지됩니다. 전체 테이블의 임베딩을 재생성하거나 이 모드에서 중단된 ai.initialize_embeddings() 호출을 복구하려면 먼저 ai.drop_embedding_config() 함수를 사용하여 구성을 삭제한 다음 ai.initialize_embeddings() 호출을 다시 실행해야 합니다.

    이 자동 모드는 데모, 소규모 데이터 세트 또는 초기 로드에 비해 삽입 및 업데이트 볼륨이 낮은 테이블(예: 백만 행 테이블의 일일 업데이트가 수백 개)에 유용합니다. 업데이트 작업 중에 발생하는 추가 지연 시간보다 즉각적인 데이터 일관성을 유지하는 것이 더 중요한 경우에 적합합니다.

  • manual: 기본 모드입니다. 이 모드에서는 오래된 임베딩을 추적하기 위해 테이블에 새로운 불리언 추적 열이 추가됩니다. ai.refresh_embeddings() 함수를 호출하면 새 행 또는 업데이트된 행의 임베딩만 생성하여 주기적인 증분 새로고침이 실행됩니다. 특히 초기 로드 후 많은 삽입 또는 업데이트를 처리할 때 성능을 더 세밀하게 제어해야 하는 사용자에게 이 모드를 사용하는 것이 좋습니다. 쓰기 지연 시간을 최소화하는 것이 우선순위이고 ai.refresh_embeddings를 사용하여 주기적인 증분 새로고침이 트리거될 때까지 일시적으로 오래되거나 null인 임베딩이 허용되는 시나리오에 유용합니다. 오래된 행 또는 새 행을 업데이트하려면 표의 모든 임베딩 새로고침 섹션에 설명된 대로 ai.refresh_embeddings() 함수를 사용합니다.

새로고침 모드 선택

다음 표에서는 두 가지 증분 새로고침 모드를 비교하여 애플리케이션에 가장 적합한 방법을 선택할 수 있도록 지원합니다.

모드 설명 일관성 및 성능 적합한 사용 사례
transactional 삽입은 트리거와 유사한 메커니즘을 사용하여 데이터베이스 트랜잭션의 일부로 업데이트됩니다. 이 모드에서는 ai.refresh_embeddings()가 사용 중지됩니다. 즉각적 일관성INSERT 또는 UPDATE이 임베딩 생성을 트리거하므로 쓰기 지연 시간 오버헤드가 높습니다. 데이터 일관성이 중요한 데모, 소규모 데이터 세트 또는 표
manual(기본) 불리언 추적 열을 사용하여 오래된 행 또는 새 행을 모니터링합니다. 정기적인 증분 새로고침을 트리거하려면 ai.refresh_embeddings()를 호출해야 합니다. Eventual consistency. 선택한 시간에 한 번에 대량으로 삽입이 생성되므로 쓰기 지연 시간이 최소화됩니다. 대규모 데이터 세트, 쓰기 빈도가 높은 프로덕션 환경 또는 성능에 민감한 애플리케이션

테이블의 모든 임베딩 새로고침

manual 증분 새로고침 모드를 사용하여 테이블에 대해 ai.initialize_embeddings()를 성공적으로 실행한 후에는 ai.refresh_embeddings를 사용하여 트리거되는 임베딩의 주기적인 증분 새로고침을 실행할 수 있습니다. 새로고침 작업을 사용하여 초기 initialize_embeddings 호출 중에 동시에 수정된 행의 임베딩을 업데이트하거나 주기적인 증분 새로고침을 실행할 수 있습니다.

수동 모드에서 임베딩 생성 프로세스가 pg_cancel에 의해 중단된 경우 ai.refresh_embeddings() 함수를 호출하여 나머지 행의 생성을 완료합니다.

새로고침 함수는 초기 호출의 설정을 재사용하므로 테이블과 임베딩 열만 지정하면 됩니다. 선택사항인 batch_size를 제공하여 기본값을 재정의할 수도 있습니다.

CALL ai.refresh_embeddings(
    table_name => 'user_reviews',
    embedding_column => 'content_embeddings',
    batch_size => 50  -- Optional override
);

벡터 임베딩 생성 중 테이블 데이터 작업

ai.initialize_embeddings()는 실행되는 세션의 차단 호출이지만 다른 연결은 테이블과 계속 작동할 수 있습니다. 자동 벡터 임베딩 프로세스는 표준 행 수준 잠금을 사용하여 일괄처리로 행을 업데이트합니다. 즉, 활성 임베딩 작업에서 타겟팅하는 동일한 행을 수정하려고 하면 다른 연결의 동시 데이터 수정 언어(DML) 작업(예: UPDATE 또는 DELETE)이 잠시 차단됩니다. 수정하지 않는 SELECT 쿼리는 차단되지 않습니다.

자동 벡터 임베딩 설정 삭제

특정 테이블 및 임베딩 열 조합의 자동 벡터 임베딩 구성을 삭제해야 하는 경우 ai.drop_embedding_config() 함수를 사용합니다. 이 함수는 정리하거나 열의 삽입 관리 기능을 재구성할 때 유용할 수 있습니다.

CALL
  ai.drop_embedding_config(
    table_name => 'user_reviews',
    embedding_column => 'content_embeddings');

파티션을 나눈 테이블 작업

자동 벡터 임베딩 기능은 파티션을 나눈 테이블을 지원합니다. 이를 통해 파티셔닝된 대규모 데이터 세트의 임베딩을 효율적으로 관리할 수 있습니다. 다음은 파티션을 나눈 테이블로 작업하는 일반적인 사용 사례입니다.

파티션을 나눈 테이블에서 임베딩 초기화

테이블의 루트 파티션에서만 임베딩을 초기화할 수 있습니다. 이 작업은 전체 파티션을 나눈 테이블에 대해 한 번만 수행하면 됩니다.

CALL ai.initialize_embeddings(
    model_id => 'text-embeddings-005',
    table_name => 'documents', -- This is the root partitioned table
    content_column => 'content',
    embedding_column => 'content_embeddings'
);

파티션을 나눈 테이블에서 임베딩 새로고침

초기화 후 루트 파티션, 하위 파티션 또는 개별 리프 파티션을 비롯한 모든 파티션에서 삽입을 새로고침할 수 있습니다. 대규모 데이터 세트의 경우 서로 다른 데이터베이스 연결에서 병렬로 고유한 파티션의 삽입을 새로고침하여 성능을 개선할 수 있습니다.

  • 전체 표를 새로고침하려면 다음을 실행합니다.
CALL ai.refresh_embeddings(
    table_name => 'documents', -- This is the root partitioned table
    embedding_column => 'content_embeddings'
);
  • 단일 파티션을 새로고침하려면 다음을 실행하세요.
CALL ai.refresh_embeddings(
    table_name => 'documents_eu',
    embedding_column => 'content_embeddings'
);

새로 추가되거나 연결된 파티션의 임베딩 새로고침

자동 삽입 기능은 초기 설정 후 기본 테이블에 통합된 파티션의 삽입을 생성하는 것을 지원합니다. 구체적인 단계는 완전히 새로운 파티션을 추가하는지 아니면 기존 테이블을 연결하는지에 따라 다릅니다.

  • 새로 추가된 파티션: 테이블에 새 파티션을 추가하는 경우 새 파티션에서 ai.refresh_embeddings를 호출하여 파티션의 임베딩을 생성할 수 있습니다.
-- Add a new partition
CREATE TABLE documents_africa PARTITION OF documents
    FOR VALUES IN ('africa');

-- Refresh embeddings for the new partition
CALL ai.refresh_embeddings(
    table_name => 'documents_africa',
    embedding_column => 'content_embeddings'
);
  • 새로 연결된 파티션: 기존 테이블을 파티션으로 연결하려면 먼저 ai.embedding_prepare_partition 절차를 사용하여 스키마가 파티션을 나눈 테이블과 호환되는지 확인합니다. 자동 삽입 기능은 계층적 파티션 설정의 모든 수준에서 파티션을 추가하거나 연결하는 것을 지원합니다. ai.embedding_prepare_partition 절차를 통해 스키마가 계층 구조의 모든 상위 테이블과 호환되도록 합니다.

기존 테이블을 파티션으로 연결하려면 먼저 ai.embedding_prepare_partition 절차를 사용하여 스키마가 파티션을 나눈 테이블과 호환되는지 확인합니다.

-- Prepare the table to be attached
CALL ai.embedding_prepare_partition(
    parent_table => 'documents',
    child_table => 'documents_misc'
);

-- Attach the partition
ALTER TABLE documents ATTACH partition documents_misc DEFAULT;

-- Refresh embeddings for the newly attached partition
CALL ai.refresh_embeddings(
    table_name => 'documents_misc',
    embedding_column => 'content_embeddings'
);

자동 삽입 기능은 계층적 파티션 설정의 모든 수준에서 파티션을 추가하거나 연결하는 것을 지원합니다. ai.embedding_prepare_partition 절차는 스키마가 계층 구조의 모든 상위 테이블과 호환되도록 합니다.

-- Prepare a sub-partition for a non-root parent table
CALL ai.embedding_prepare_partition(
    parent_table => 'documents_eu', -- An existing partition
    child_table => 'documents_eu_germany'
);

-- Attach the new sub-partition
ALTER TABLE documents_eu ATTACH PARTITION documents_eu_germany
    FOR VALUES IN ('germany');

-- Refresh embeddings for the new sub-partition
CALL ai.refresh_embeddings(
    table_name => 'documents_eu_germany',
    embedding_column => 'content_embeddings'
);

임베딩 생성 진행 상황 모니터링

ai.embedding_progress_view를 쿼리하여 활성 initialize_embeddingsrefresh_embeddings 호출의 실시간 상태를 모니터링할 수 있습니다. 이 뷰는 완료된 비율, 경과 시간, 예상 남은 시간 등 작업 진행 상황에 관한 세부정보를 제공합니다.

진행 상황을 확인하려면 다음 쿼리를 실행하세요.

SELECT
  table_name,
  content_column,
  embedding_column,
  model_id,
  percent_progress,
  status,
  elapsed_time,
  rows_processed,
  partition_root
FROM
  ai.embedding_progress_view;

뷰는 다음 정보를 제공합니다.

설명
table_name 처리 중인 테이블 또는 파티션의 이름입니다.
content_column 소스 콘텐츠가 포함된 열입니다.
embedding_column 임베딩이 저장되는 열입니다.
model_id 생성에 사용되는 모델입니다.
percent_progress 완료된 작업의 비율입니다.
status 작업의 현재 상태입니다 (예: 실행 중, 성공).
elapsed_time 작업이 시작된 후 경과된 시간입니다.
rows_processed 지금까지 처리된 행 수입니다.
partition_root 루트 파티션을 나눈 테이블의 이름입니다.

자동으로 임베딩을 생성하는 예

이 섹션에서는 등록된 모델 엔드포인트를 사용하여 자동으로 임베딩을 생성하는 예시를 제공합니다.

OpenAI 임베딩 모델

OpenAI에서 제공하는 등록된 text-embedding-3-small 모델 엔드포인트를 사용하여 임베딩을 생성하려면 다음 문을 실행합니다.

CALL ai.initialize_embeddings(
    model_id => 'text-embedding-3-small',
    table_name => 'user_reviews',
    content_column => 'content',
    embedding_column => 'content_embeddings'
);

맞춤 임베딩 모델

자체 모델 또는 외부 지원 모델의 경우 입력 및 출력 변환 함수를 정의하고 ai.create_model에 등록해야 합니다. 자동 임베딩 기능을 사용하려면 스칼라 변환 함수(예: acme_text_input_transform, acme_text_output_transform)와 배치 변환 함수(예: acme_text_batch_input_transform, acme_text_batch_output_transform)를 모두 지정해야 합니다.

다음 단계