본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 08. 15:45

Vector 타입의 다양한 제약 사항

요약

OracleDB에 새롭게 도입된 Vector 타입의 주요 제약 사항을 다룹니다. 비교 연산자 사용 불가, 중복 제거 및 그룹화 제한, 인덱스 생성 불가 등의 기술적 한계와 우회 방법을 소개합니다.

핵심 포인트

  • 비교 연산자(=, <, >)를 통한 벡터 데이터 비교 불가
  • DISTINCT, GROUP BY, JOIN 키로 벡터 타입 직접 사용 불가
  • vector_serialize를 통한 문자열 캐스팅으로 일부 제약 우회 가능
  • 기본 키(PK) 설정 및 B-Tree/Bitmap 인덱스 생성 불가
  • 65,536차원 이상의 벡터 데이터 저장 시 에러 발생

OracleDB에 새롭게 도입된 Vector 타입에 대해, 몇 가지 제약 사항이 있어 데모와 함께 소개합니다.

SQL> info testtab1
TABLE: TESTTAB1
LAST ANALYZED:
...

등호, 부등호와 같은 비교 연산자(Comparison Operator)로 벡터 데이터를 비교할 수 없습니다. (ORA-22848: cannot use VECTOR type as comparison key)

SQL> --등호
SQL> select * from testtab1 where vec = to_vector('[2, 1]', 2, float32);
Error starting at line : 1 in command -
...

DISTINCT를 사용하여 중복을 제거할 수 없습니다. (ORA-22848: cannot use VECTOR type as comparison key)

어떻게든 중복을 제거하고 싶다면, vector_serialize를 사용하여 문자열로 캐스트(Cast)하면 가능합니다.

SQL> select distinct vec from testtab1;
Error starting at line : 1 in command -
select distinct vec from testtab1
...

GROUP BY로 그룹화할 수 없습니다. (ORA-22848: cannot use VECTOR type as comparison key)

이 또한, 어떻게든 그룹화하고 싶다면 vector_serialize를 사용하여 문자열로 캐스트하면 가능합니다.

SQL> select count(*) from testtab1 group by vec;
Error starting at line : 1 in command -
select count(*) from testtab1 group by vec
...

조인 키(Join Key)로 지정할 수 없습니다. (ORA-22848: cannot use VECTOR type as comparison key)

앞서 언급한 예시와 같이, 어떻게든 조인 키로 지정하고 싶다면 vector_serialize를 사용하여 문자열로 캐스트하면 가능합니다.

SQL> select testtab1.*, testtab2.* from testtab1 join testtab2 on testtab1.vec = testtab2.vec;
Error starting at line : 1 in command -
select testtab1.*, testtab2.* from testtab1 join testtab2 on testtab1.vec = testtab2.vec
...

기본 키(Primary Key)나 고유 제약 조건(Unique Constraint) 설정, 일반적인 B-Tree 인덱스나 비트맵 인덱스(Bitmap Index) 생성도 불가능합니다.

(ORA-02329: Column of data type VECTOR cannot be unique or a primary key., ORA-02327: cannot create index on expression with data type VECTOR)

SQL> --기본 키
SQL> alter table testtab1 add primary key (vec);
Error starting at line : 1 in command -
...
SQL> --B-Tree 인덱스
SQL> create index t1_idx on testtab1(vec);
Error starting at line : 1 in command -
...

65,536차원 이상의 벡터 데이터를 저장하려고 하면 에러가 발생합니다. (ORA-51801: Invalid VECTOR type specification: Invalid dimension count ('65536'). )

현시점에서 가장 차원수가 많은 Embedding 모델은 Qwen3-Embedding-8B의 4,096차원인 것으로 보이므로, 통상적으로 문제가 될 일은 없는 상한치라고 생각됩니다.

Qwen3-Embedding-8B has the following features:

모델 타입 (Model Type): 텍스트 임베딩 (Text Embedding)

지원 언어 (Supported Languages): 100개 이상의 언어

파라미터 수 (Number of Parameters): 8B

컨텍스트 길이 (Context Length): 32k

임베딩 차원 (Embedding Dimension): 최대 4096, 32에서 4096 사이의 사용자 정의 출력 차원 지원

SQL> --65,535차원의 데이터 (문제 없음)
SQL> INSERT /*+ APPEND */ INTO testtab1 (vec)
2 SELECT v.vec
...

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0