본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 01. 09:12

Vector형에서 차원수를 정의했을 때와 정의하지 않았을 때의 동작 차이

요약

OracleDB의 Vector형 컬럼에서 차원수를 명시했을 때와 명시하지 않았을 때의 동작 차이를 설명합니다. 차원 미지정 시 다양한 차원의 데이터를 저장할 수 있으나, 벡터 인덱스 생성에는 제약이 있습니다.

핵심 포인트

  • 차원수가 정의된 컬럼은 지정된 차원과 일치하는 데이터만 삽입 가능
  • 차원 미지정 컬럼은 서로 다른 차원의 벡터 데이터를 수용 가능
  • 서로 다른 차원이 혼재된 컬럼에는 HNSW, IVF 등 벡터 인덱스 생성 불가
  • 벡터 인덱스 생성 후에는 동일한 차원의 데이터만 추가 가능

OracleDB의 Vector형에서 차원수를 정의했을 때와 정의하지 않았을 때의 동작 차이를 확인합니다.

이하에서는 VEC1은 차원수를 정의하고 (2차원), VEC2는 차원수를 정의하지 않았습니다.

SQL> create table testtab (id number, vec1 vector(2,float32), vec2 vector);
Table TESTTAB created.
SQL> info testtab
...

차원수가 정의된 Vector형 컬럼에 대해, 차원이 다른 데이터 (여기서는 3차원)를 추가하려고 하면 에러가 발생합니다.

SQL> insert into testtab (id, vec1) values (1,'[1,2]'); ★2차원
1 row inserted.
SQL> insert into testtab (id, vec1) values (2,'[1,2,3]'); ★3차원
...

ORA-51803

Vector dimension count must match the dimension count specified in the column definition (expected dimension_count_1 dimensions, specified dimension_count_2 dimensions).

dimension_count_1: 컬럼 정의에 지정된 차원수.

dimension_count_2: 사용자 쿼리에서 파싱된 차원수.

Cause

벡터의 차원수가 컬럼 정의에 지정된 차원수와 일치하지 않습니다.

Action

벡터가 컬럼 정의에 지정된 것과 동일한 차원수를 갖도록 확인하십시오.

차원수가 정의되지 않은 Vector형 컬럼은 서로 다른 차원의 벡터 데이터를 수용합니다.

SQL> insert into testtab (id, vec2) values (3,'[1,2]'); ★2차원
1 row inserted.
SQL> insert into testtab (id, vec2) values (4,'[1,2,3]'); ★3차원
...

단, 서로 다른 차원의 벡터 데이터가 저장된 Vector형 컬럼에 대해서는 벡터 인덱스 (Vector Index)를 생성할 수 없습니다. (HNSW, IVF 모두 불가)

SQL> create vector index testtab_idx on testtab(vec2)
2* organization inmemory neighbor graph; ★HNSW
Error starting at line : 1 in command -
...

ORA-51902

Cannot create a vector index on a vector column with different dimensions

Cause

차원 값이 모두 동일하지 않은 벡터 컬럼에 벡터 인덱스를 생성하려고 시도했습니다.

Action

동일한 차원 값을 가진 벡터 컬럼에 벡터 인덱스를 생성하십시오.

서로 다른 차원의 벡터 데이터를 삭제하면, 벡터 인덱스를 생성할 수 있게 됩니다.

SQL> delete from testtab where id=3;
1 row deleted.
SQL> create vector index testtab_idx on testtab(vec2)
...

벡터 인덱스를 생성한 상태에서는 서로 다른 차원의 벡터 데이터를 추가할 수 없습니다.

SQL> insert into testtab (id, vec2) values (5,'[1,2]');
Error starting at line : 1 in command -
insert into testtab (id, vec2) values (5,'[1,2]')
...

벡터 인덱스 (Vector Index)를 삭제하면, 서로 다른 차원의 벡터 데이터를 다시 추가할 수 있게 됩니다.

SQL> drop index testtab_idx;
Index TESTTAB_IDX dropped.
SQL> insert into testtab (id, vec2) values (5,'[1,2]');
...

벡터 데이터의 차원 수 (Dimension count)를 확인하려면 vector_dimension_count를 사용할 수 있습니다.

SQL> select id, vector_dimension_count(vec2) from testtab order by 2;
ID VECTOR_DIMENSION_COUNT(VEC2)
_____ _______________________________
...

AI 자동 생성 콘텐츠

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

원문 바로가기
0

댓글

0