Skip to main content
QBit 데이터 타입은 더 빠른 근사 벡터 검색을 위해 벡터 저장 방식을 재구성합니다. 각 벡터의 요소를 함께 저장하는 대신, 모든 벡터에서 동일한 비트 위치끼리 묶어 저장합니다. 이 방식은 벡터를 전체 정밀도로 저장하면서도, 검색 시점에 세밀한 양자화 수준을 선택할 수 있게 합니다. 즉, I/O를 줄이고 계산 속도를 높이기 위해 더 적은 비트를 읽거나, 더 높은 정확도를 위해 더 많은 비트를 읽을 수 있습니다. 양자화를 통해 데이터 전송량과 연산량을 줄여 속도상의 이점을 얻으면서도, 필요할 때는 원본 데이터 전체를 그대로 사용할 수 있습니다. QBit 타입의 컬럼을 선언하려면 다음 구문을 사용합니다:
  • element_type – 각 벡터 요소의 타입입니다. 허용되는 타입은 Int8, BFloat16, Float32, Float64입니다
  • dimension – 각 벡터를 구성하는 요소의 수입니다

QBit 생성

테이블 컬럼 정의에 QBit 유형을 사용합니다:

배열을 QBit으로 변환하기

배열 길이가 QBit 차원과 일치하면 배열을 QBit으로 변환할 수 있습니다. 배열의 요소 타입이 QBit 요소 타입과 같을 필요는 없습니다. 숫자 요소 타입은 모두 자동으로 해당 타입으로 변환됩니다. 따라서 기존 embeddings 컬럼을 바로 QBit 컬럼으로 옮길 수 있습니다:
이 변환은 CAST를 사용해 명시적으로 수행할 수도 있습니다. 예를 들어 CAST(embedding AS QBit(Float32, 8))와 같습니다.

QBit를 배열로 변환하기

역변환은 비트 전치 표현에서 원래 벡터를 복원하므로, QBitArray로 캐스팅하면 저장된 값이 반환됩니다. 이는 배열을 QBit로 변환하기의 역과정입니다:
재구성된 배열은 QBit의 타입을 사용한 뒤, 각 요소를 요청된 배열 타입으로 변환합니다. 따라서 QBit(Float32, N)에서 Array(Float64)로처럼 타입까지 변경하는 cast도 동작합니다. Array -> QBit -> Array 왕복 변환은 Int8, Float32, Float64에서는 손실이 없습니다. BFloat16의 경우 BFloat16로 직접 변환한 결과와 일치하며, 손실되는 정밀도는 BFloat16 자체의 정밀도뿐입니다. 차원이 8의 배수가 아니면 내부 표현에 포함된 후행 패딩 요소가 삭제되므로, 결과에는 항상 정확히 차원개의 요소만 포함됩니다.

QBit 서브컬럼

QBit는 저장된 벡터의 개별 비트 평면에 접근할 수 있는 서브컬럼 접근 패턴을 구현합니다. 각 비트 위치는 .N 구문으로 접근할 수 있으며, 여기서 N은 해당 비트 위치를 나타냅니다:
접근 가능한 서브컬럼 수는 타입에 따라 달라집니다:
  • Int8: 8개 서브컬럼 (1-8)
  • BFloat16: 16개 서브컬럼 (1-16)
  • Float32: 32개 서브컬럼 (1-32)
  • Float64: 64개 서브컬럼 (1-64)

벡터 검색 함수

다음은 QBit 데이터 타입을 사용하는 벡터 유사도 검색용 거리 함수입니다:
마지막 수정일 2026년 7월 1일