벡터 데이터 타입

벡터 데이터 타입 (Vector data types)

Snowflake의 벡터 데이터 타입(VECTOR)을 다루는 문서예요. VECTOR 타입은 요소와 차원을 지정해 벡터를 효율적으로 인코딩·처리하며, RAG 기반 애플리케이션 같은 의미론적 벡터 검색에 사용돼요. 타입 지정 방법, 변환, 로딩/언로딩, 예제와 제한 사항을 확인할 수 있어요.

출처: Snowflake SQL Reference

본문

이 문서는 벡터 데이터 타입을 설명해요.

데이터 타입 (Data types)

Snowflake는 단일 벡터 데이터 타입인 VECTOR를 지원해요.

참고: VECTOR 데이터 타입은 SQL, Python 커넥터, 그리고 Snowpark Python 라이브러리에서만 지원돼요. 다른 언어는 지원되지 않아요.

VECTOR

VECTOR 데이터 타입으로 Snowflake는 벡터를 효율적으로 인코딩하고 처리해요. 이 데이터 타입은 RAG 기반 애플리케이션 같은 의미론적 벡터 검색·검색(retrieval) 애플리케이션과, 벡터 처리 애플리케이션에서 벡터에 대한 일반적인 연산을 지원해요.

VECTOR 타입을 지정하려면 다음 구문을 사용해요.

VECTOR( <type>, <dimension> )

여기서:

  • _type_은 요소의 Snowflake 데이터 타입이며, 32비트 정수 또는 32비트 부동 소수점 숫자일 수 있어요.

다음 중 하나를 지정할 수 있어요.

  • INT
  • FLOAT

참고: 이 타입들은 숫자 데이터 타입에 설명된 같은 이름의 타입들과는 구별돼요. 이 타입들은 각각 NUMBER(38, 0)과 배정밀도 IEEE 754 부동 소수점 숫자를 나타내요.

  • _dimension_은 벡터의 차원(길이)이에요. 양의 정수 값이어야 하며 최대값은 4096이에요.

참고: 직접 벡터 비교(direct vector comparisons, 예: v1 < v2)는 바이트 단위 사전식(byte-wise lexicographic)으로, 결정적이긴 하지만 숫자 비교에서 기대하는 결과를 내지 않아요. 그래서 VECTOR 열을 ORDER BY 절에 사용할 수는 있지만, 벡터 비교에는 제공되는 벡터 유사도 함수(vector similarity functions)를 사용하세요.

다음 정의는 유효한 벡터 정의의 예시예요.

  • 256개의 32비트 부동 소수점 값 벡터 정의하기:
VECTOR(FLOAT, 256)
  • 16개의 32비트 정수 값 벡터 정의하기:
VECTOR(INT, 16)

다음 정의는 유효하지 않은 벡터 정의의 예시예요.

  • 유효하지 않은 값 타입을 사용한 벡터 정의:
VECTOR(STRING, 256)
  • 유효하지 않은 벡터 크기를 사용한 벡터 정의:
VECTOR(INT, -1)

벡터 변환 (Vector conversion)

이 섹션은 VECTOR 값으로/으로부터 변환하는 방법을 설명해요. 캐스팅에 대한 자세한 내용은 데이터 타입 변환을 참조하세요.

값을 VECTOR 값으로 변환하기

VECTOR 값은 다음 타입에서 명시적으로 캐스팅될 수 있어요.

값을 VECTOR 값에서 변환하기

VECTOR 값은 다음 타입으로 명시적으로 캐스팅될 수 있어요.

VECTOR와 ARRAY 타입 사이를 변환할 때, 배열의 요소 수는 벡터의 차원과 일치해야 하고, 배열 요소의 데이터 타입은 벡터의 데이터 타입과 일치해야 해요. 예를 들어 VECTOR(FLOAT, 3) 값을 3개의 FLOAT 값으로 이루어진 ARRAY로는 변환할 수 있지만, 2개의 FLOAT 값 ARRAY나 3개의 INT 값 ARRAY로는 변환할 수 없어요.

벡터 데이터 로딩과 언로딩 (Loading and unloading vector data)

VECTOR 열을 직접 로딩·언로딩하는 것은 지원되지 않아요. VECTOR 열의 경우 데이터를 ARRAY로 로딩·언로딩한 다음, 사용할 때 VECTOR로 캐스팅해야 해요. ARRAY 데이터 타입을 로딩·언로딩하는 방법을 배우려면 반정형 데이터 로딩 소개를 참조하세요. 벡터의 일반적인 사용 사례는 벡터 임베딩(vector embedding)을 생성하는 것이에요.

다음 예제는 VECTOR 열이 있는 테이블을 mystage라는 내부 스테이지로 언로딩하는 방법을 보여줘요.

CREATE OR REPLACE TABLE myvectortable (a VECTOR(float, 3), b VECTOR(float, 3));
INSERT INTO myvectortable SELECT [1.1,2.2,3]::VECTOR(FLOAT,3), [1,1,1]::VECTOR(FLOAT,3);
INSERT INTO myvectortable SELECT [1,2.2,3]::VECTOR(FLOAT,3), [4,6,8]::VECTOR(FLOAT,3);

COPY INTO @mystage/unload/
  FROM (SELECT TO_ARRAY(a), TO_ARRAY(b) FROM myvectortable);

다음 예제는 스테이지에서 테이블을 로딩한 다음 ARRAY 열을 VECTOR 열로 캐스팅하는 방법을 보여줘요.

CREATE OR REPLACE TABLE arraytable (a ARRAY, b ARRAY);

COPY INTO arraytable
  FROM @mystage/unload/mydata.csv.gz;

SELECT a::VECTOR(FLOAT, 3), b::VECTOR(FLOAT, 3)
  FROM arraytable;

예제 (Examples)

상수 ARRAY를 캐스팅해 VECTOR를 만드는 예시예요.

SELECT [1, 2, 3]::VECTOR(FLOAT, 3) AS vec;

VECTOR 데이터 타입 열을 추가하는 예시예요.

ALTER TABLE myissues ADD COLUMN issue_vec VECTOR(FLOAT, 768);

UPDATE TABLE myissues
  SET issue_vec = AI_EMBED('e5-base-v2', issue_text);

제한 사항 (Limitations)

VECTOR 데이터에는 다음 제한 사항이 적용돼요.

  • VECTOR 데이터 타입은 제한된 언어 지원을 가져요. 이 표에 없는 언어는 지원되지 않아요.
Snowflake 기능 Python SQL
UDFs
UDTFs
Drivers/Connectors
Snowpark API

더 알아보기 (Learn more)