숫자 인덱스 벡터 함수

숫자 인덱스 벡터 함수 (Numeric Indexed Vector Functions)

NumericIndexedVector는 벡터를 감싸면서 벡터 집계 연산과 점별(pointwise) 연산을 구현하는 추상 데이터 구조예요. 저장 방식은 Bit-Sliced Index(비트 슬라이스 인덱스)예요. 이론적 근거와 사용 시나리오는 논문 Large-Scale Metric Computation in Online Controlled Experiment Platform을 참고하세요.

출처: 문서

본문

BSI

BSI(Bit-Sliced Index) 저장 방식에서는 데이터를 Bit-Sliced Index로 저장한 뒤 Roaring Bitmap으로 압축해요. 집계 연산과 점별 연산을 압축된 데이터에 직접 수행하므로 저장·조회 효율을 크게 높일 수 있어요.

벡터는 인덱스와 그에 대응하는 값들을 담아요. BSI 저장 모드에서 이 데이터 구조의 특징과 제약은 다음과 같아요:

  • 인덱스 타입은 UInt8, UInt16, UInt32 중 하나예요. 참고: Roaring Bitmap의 64비트 구현 성능을 고려해 BSI 형식은 UInt64/Int64를 지원하지 않아요.
  • 값 타입은 Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64 중 하나예요. 참고: 값 타입은 자동으로 확장되지 않아요. 예를 들어 값 타입으로 UInt8을 쓰면 UInt8 용량을 넘는 합은 더 높은 타입으로 승격되지 않고 오버플로가 나요. 마찬가지로 정수 연산은 정수 결과를 내요(예: 나눗셈이 자동으로 부동소수점 결과로 바뀌지 않아요). 따라서 값 타입을 미리 계획하고 설계하는 게 중요해요. 실제 시나리오에서는 부동소수점 타입(Float32/Float64)을 주로 써요.
  • 인덱스 타입과 값 타입이 같은 두 벡터만 연산할 수 있어요.
  • 기본 저장은 Bit-Sliced Index를 사용하고, 비트맵은 인덱스를 저장해요. 비트맵의 구체적 구현으로는 Roaring Bitmap을 사용해요. 모범 사례는 인덱스를 가능한 한 소수의 Roaring Bitmap 컨테이너에 집중시켜 압축률과 조회 성능을 최대화하는 것이에요.
  • Bit-Sliced Index 메커니즘은 값을 이진수로 변환해요. 부동소수점 타입의 경우 고정소수점 표현을 사용하므로 정밀도 손실이 발생할 수 있어요. 소수 부분에 사용할 비트 수를 직접 지정해 정밀도를 조정할 수 있으며, 기본값은 24비트로 대부분의 시나리오에 충분해요. 집계 함수 groupNumericIndexedVector-State와 함께 사용해 NumericIndexedVector를 구성할 때 정수 비트 수와 소수 비트 수를 직접 지정할 수 있어요.
  • 인덱스에는 세 가지 경우가 있어요: 0이 아닌 값, 0 값, 존재하지 않음. NumericIndexedVector에는 0이 아닌 값과 0 값만 저장돼요. 또한 두 NumericIndexedVector 간 점별 연산에서, 존재하지 않는 인덱스의 값은 0으로 취급돼요. 나눗셈 시나리오에서 제수가 0일 때 결과는 0이에요.

NumericIndexedVector 객체 만들기

이 구조를 만드는 방법은 두 가지예요. 하나는 집계 함수 groupNumericIndexedVector-State와 함께 사용하는 거예요. -if 접미사를 붙여 추가 조건을 받을 수 있어요. 집계 함수는 조건을 만족하는 행만 처리해요. 다른 하나는 numericIndexedVectorBuild로 맵에서 만드는 거예요. groupNumericIndexedVectorState 함수는 매개변수로 정수 비트 수와 소수 비트 수를 지정할 수 있지만, numericIndexedVectorBuild는 그렇지 않아요.

groupNumericIndexedVector

두 데이터 컬럼에서 NumericIndexedVector를 구성하고 모든 값의 합을 Float64 타입으로 반환해요. 접미사 State를 붙이면 NumericIndexedVector 객체를 반환해요.

구문 (Syntax)

groupNumericIndexedVectorState(col1, col2)
groupNumericIndexedVectorState(type, integer_bit_num, fraction_bit_num)(col1, col2)

매개변수 (Parameters)

  • type: String, 선택 사항. 저장 형식을 지정해요. 현재는 'BSI'만 지원해요.
  • integer_bit_num: UInt32, 선택 사항. 'BSI' 저장 형식에서 유효하며, 정수 부분에 사용할 비트 수를 나타내요. 인덱스 타입이 정수 타입이면 기본값은 인덱스 저장에 사용되는 비트 수에 대응해요. 예를 들어 인덱스 타입이 UInt16이면 기본 integer_bit_num은 16이에요. Float32와 Float64 인덱스 타입의 경우 integer_bit_num 기본값은 40이라, 표현할 수 있는 데이터의 정수 부분 범위는 [-2^39, 2^39 - 1]이에요. 유효 범위는 [0, 64]예요.
  • fraction_bit_num: UInt32, 선택 사항. 'BSI' 저장 형식에서 유효하며, 소수 부분에 사용할 비트 수를 나타내요. 값 타입이 정수면 기본값은 0이고, 값 타입이 Float32·Float64면 기본값은 24예요. 유효 범위는 [0, 24]예요.
  • integer_bit_num + fraction_bit_num의 유효 범위가 [0, 64]라는 제약도 있어요.
  • col1: 인덱스 컬럼. 지원 타입: UInt8/UInt16/UInt32/Int8/Int16/Int32.
  • col2: 값 컬럼. 지원 타입: Int8/Int16/Int32/Int64/UInt8/UInt16/UInt32/UInt64/Float32/Float64.

반환 값 (Return value)

모든 값의 합을 나타내는 Float64 값.

예시 (Example)

테스트 데이터:

UserID  PlayTime
1       10
2       20
3       30

쿼리 & 결과:

SELECT groupNumericIndexedVector(UserID, PlayTime) AS num FROM t;
┌─num─┐
│  60 │
└─────┘

SELECT groupNumericIndexedVectorState(UserID, PlayTime) as res, toTypeName(res), numericIndexedVectorAllValueSum(res) FROM t;
┌─res─┬─toTypeName(res)─────────────────────────────────────────────┬─numericIndexedVectorAllValueSum(res)──┐
│     │ AggregateFunction(groupNumericIndexedVector, UInt8, UInt8)  │ 60                                    │
└─────┴─────────────────────────────────────────────────────────────┴───────────────────────────────────────┘

SELECT groupNumericIndexedVectorStateIf(UserID, PlayTime, day = '2025-04-22') as res, toTypeName(res), numericIndexedVectorAllValueSum(res) FROM t;
┌─res─┬─toTypeName(res)────────────────────────────────────────────┬─numericIndexedVectorAllValueSum(res)──┐
│     │ AggregateFunction(groupNumericIndexedVector, UInt8, UInt8) │ 30                                    │
└─────┴────────────────────────────────────────────────────────────┴───────────────────────────────────────┘

SELECT groupNumericIndexedVectorStateIf('BSI', 32, 0)(UserID, PlayTime, day = '2025-04-22') as res, toTypeName(res), numericIndexedVectorAllValueSum(res) FROM t;
┌─res─┬─toTypeName(res)──────────────────────────────────────────────────────────┬─numericIndexedVectorAllValueSum(res)──┐
│     │ AggregateFunction('BSI', 32, 0)(groupNumericIndexedVector, UInt8, UInt8) │ 30                                    │
└─────┴──────────────────────────────────────────────────────────────────────────┴───────────────────────────────────────┘

참고: 아래 문서는 system.functions 시스템 테이블에서 생성된 것이에요.

numericIndexedVectorAllValueSum

도입: v25.7.0

numericIndexedVector 안의 모든 값의 합을 반환해요.

구문 (Syntax)

numericIndexedVectorAllValueSum(v)

인자 (Arguments)

  • vnumericIndexedVector

반환 값 (Returned value)

합을 반환해요. Float64

예시 (Examples)

SELECT numericIndexedVectorAllValueSum(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res;
┌─res─┐
│  60 │
└─────┘

numericIndexedVectorBuild

도입: v25.7.0

맵에서 NumericIndexedVector를 만들어요. 맵의 키는 벡터의 인덱스를, 맵의 값은 벡터의 값을 나타내요.

구문 (Syntax)

numericIndexedVectorBuild(map)

인자 (Arguments)

  • map — 인덱스에서 값으로의 매핑. Map

반환 값 (Returned value)

NumericIndexedVector 객체를 반환해요. AggregateFunction

예시 (Examples)

-- NumericIndexedVector는 이진 값이라 `hex`로 표시된다.
SELECT
    hex(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res,
    toTypeName(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS type;
┌─res────────────────────────────────────────────────────────────────┬─type───────────────────────────────────────────────────────┐
│ 080000000000000001010000020103000002020300000201030000020203010101 │ AggregateFunction(groupNumericIndexedVector, UInt8, UInt8) │
└────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────┘

numericIndexedVectorCardinality

도입: v25.7.0

numericIndexedVector의 카디널리티(고유 인덱스 수)를 반환해요.

구문 (Syntax)

numericIndexedVectorCardinality(v)

인자 (Arguments)

  • vnumericIndexedVector

반환 값 (Returned value)

고유 인덱스 수를 반환해요. UInt64

예시 (Examples)

SELECT numericIndexedVectorCardinality(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res;
┌─res─┐
│   3 │
└─────┘

numericIndexedVectorGetValue

도입: v25.7.0

numericIndexedVector에서 지정한 인덱스에 대응하는 값을 가져와요.

구문 (Syntax)

numericIndexedVectorGetValue(v, i)

인자 (Arguments)

  • vnumericIndexedVector
  • i — 값을 가져올 인덱스. (U)Int*

반환 값 (Returned value)

NumericIndexedVector의 값 타입과 같은 타입의 숫자 값. (U)Int* 또는 Float*

예시 (Examples)

SELECT numericIndexedVectorGetValue(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30])), 3) AS res;
┌─res─┐
│  30 │
└─────┘

numericIndexedVectorPointwiseAdd

도입: v25.7.0

numericIndexedVector와 다른 numericIndexedVector 또는 숫자 상수 사이의 점별 덧셈을 수행해요.

구문 (Syntax)

numericIndexedVectorPointwiseAdd(v1, v2)

인자 (Arguments)

  • v1numericIndexedVector
  • v2 — 숫자 상수 또는 numericIndexedVector 객체. (U)Int* 또는 Float* 또는 numericIndexedVector

반환 값 (Returned value)

새 numericIndexedVector 객체를 반환해요. numericIndexedVector

예시 (Examples)

WITH
    numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toInt32(x), [10, 20, 30]))) AS vec1,
    numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toInt32(x), [10, 20, 30]))) AS vec2
SELECT
    numericIndexedVectorToMap(numericIndexedVectorPointwiseAdd(vec1, vec2)) AS res1,
    numericIndexedVectorToMap(numericIndexedVectorPointwiseAdd(vec1, 2)) AS res2;
┌─res1──────────────────┬─res2─────────────┐
│ {1:10,2:30,3:50,4:30} │ {1:12,2:22,3:32} │
└───────────────────────┴──────────────────┘

numericIndexedVectorPointwiseDivide

도입: v25.7.0

numericIndexedVector와 다른 numericIndexedVector 또는 숫자 상수 사이의 점별 나눗셈을 수행해요.

구문 (Syntax)

numericIndexedVectorPointwiseDivide(v1, v2)

인자 (Arguments)

  • v1numericIndexedVector
  • v2 — 숫자 상수 또는 numericIndexedVector 객체. (U)Int* 또는 Float* 또는 numericIndexedVector

반환 값 (Returned value)

새 numericIndexedVector 객체를 반환해요. numericIndexedVector

예시 (Examples)

with
    numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1,
    numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec2
SELECT
    numericIndexedVectorToMap(numericIndexedVectorPointwiseDivide(vec1, vec2)) AS res1,
    numericIndexedVectorToMap(numericIndexedVectorPointwiseDivide(vec1, 2)) AS res2;
┌─res1────────────────┬─res2────────────┐
│ {1:0,2:2,3:1.5,4:0} │ {1:5,2:10,3:15} │
└─────────────────────┴─────────────────┘

numericIndexedVectorPointwiseEqual

도입: v25.7.0

numericIndexedVector와 다른 numericIndexedVector 또는 숫자 상수 사이의 점별 비교를 수행해요. 결과는 값이 같은 인덱스들을 담고, 모든 대응 값이 1로 설정된 numericIndexedVector예요.

구문 (Syntax)

numericIndexedVectorPointwiseEqual(v1, v2)

인자 (Arguments)

  • v1numericIndexedVector
  • v2 — 숫자 상수 또는 numericIndexedVector 객체. (U)Int* 또는 Float* 또는 numericIndexedVector

반환 값 (Returned value)

새 numericIndexedVector 객체를 반환해요. numericIndexedVector

예시 (Examples)

with
    numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1,
    numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 20, 30]))) as vec2
SELECT
    numericIndexedVectorToMap(numericIndexedVectorPointwiseEqual(vec1, vec2)) AS res1,
    numericIndexedVectorToMap(numericIndexedVectorPointwiseEqual(vec1, 20)) AS res2;
┌─res1──┬─res2──┐
│ {2:1} │ {2:1} │
└───────┴───────┘

numericIndexedVectorPointwiseGreater

도입: v25.7.0

numericIndexedVector와 다른 numericIndexedVector 또는 숫자 상수 사이의 점별 비교를 수행해요. 결과는 첫 번째 벡터의 값이 두 번째 벡터의 값보다 큰 인덱스들을 담고, 모든 대응 값이 1로 설정된 numericIndexedVector예요.

구문 (Syntax)

numericIndexedVectorPointwiseGreater(v1, v2)

인자 (Arguments)

  • v1numericIndexedVector
  • v2 — 숫자 상수 또는 numericIndexedVector 객체. (U)Int* 또는 Float* 또는 numericIndexedVector

반환 값 (Returned value)

새 numericIndexedVector 객체를 반환해요. numericIndexedVector

예시 (Examples)

with
    numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 50]))) as vec1,
    numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 40, 30]))) as vec2
SELECT
    numericIndexedVectorToMap(numericIndexedVectorPointwiseGreater(vec1, vec2)) AS res1,
    numericIndexedVectorToMap(numericIndexedVectorPointwiseGreater(vec1, 20)) AS res2;
┌─res1──────┬─res2──┐
│ {1:1,3:1} │ {3:1} │
└───────────┴───────┘

numericIndexedVectorPointwiseGreaterEqual

도입: v25.7.0

numericIndexedVector와 다른 numericIndexedVector 또는 숫자 상수 사이의 점별 비교를 수행해요. 결과는 첫 번째 벡터의 값이 두 번째 벡터의 값보다 크거나 같은 인덱스들을 담고, 모든 대응 값이 1로 설정된 numericIndexedVector예요.

구문 (Syntax)

numericIndexedVectorPointwiseGreaterEqual(v1, v2)

인자 (Arguments)

  • v1numericIndexedVector
  • v2 — 숫자 상수 또는 numericIndexedVector 객체. (U)Int* 또는 Float* 또는 numericIndexedVector

반환 값 (Returned value)

새 numericIndexedVector 객체를 반환해요. numericIndexedVector

예시 (Examples)

with
    numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 50]))) as vec1,
    numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 40, 30]))) as vec2
SELECT
    numericIndexedVectorToMap(numericIndexedVectorPointwiseGreaterEqual(vec1, vec2)) AS res1,
    numericIndexedVectorToMap(numericIndexedVectorPointwiseGreaterEqual(vec1, 20)) AS res2;
┌─res1──────────┬─res2──────┐
│ {1:1,2:1,3:1} │ {2:1,3:1} │
└───────────────┴───────────┘

numericIndexedVectorPointwiseLess

도입: v25.7.0

numericIndexedVector와 다른 numericIndexedVector 또는 숫자 상수 사이의 점별 비교를 수행해요. 결과는 첫 번째 벡터의 값이 두 번째 벡터의 값보다 작은 인덱스들을 담고, 모든 대응 값이 1로 설정된 numericIndexedVector예요.

구문 (Syntax)

numericIndexedVectorPointwiseLess(v1, v2)

인자 (Arguments)

  • v1numericIndexedVector
  • v2 — 숫자 상수 또는 numericIndexedVector 객체. (U)Int* 또는 Float* 또는 numericIndexedVector

반환 값 (Returned value)

새 numericIndexedVector 객체를 반환해요. numericIndexedVector

예시 (Examples)

with
    numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1,
    numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 40, 30]))) as vec2
SELECT
    numericIndexedVectorToMap(numericIndexedVectorPointwiseLess(vec1, vec2)) AS res1,
    numericIndexedVectorToMap(numericIndexedVectorPointwiseLess(vec1, 20)) AS res2;
┌─res1──────┬─res2──┐
│ {3:1,4:1} │ {1:1} │
└───────────┴───────┘

numericIndexedVectorPointwiseLessEqual

도입: v25.7.0

numericIndexedVector와 다른 numericIndexedVector 또는 숫자 상수 사이의 점별 비교를 수행해요. 결과는 첫 번째 벡터의 값이 두 번째 벡터의 값보다 작거나 같은 인덱스들을 담고, 모든 대응 값이 1로 설정된 numericIndexedVector예요.

구문 (Syntax)

numericIndexedVectorPointwiseLessEqual(v1, v2)

인자 (Arguments)

  • v1numericIndexedVector
  • v2 — 숫자 상수 또는 numericIndexedVector 객체. (U)Int* 또는 Float* 또는 numericIndexedVector

반환 값 (Returned value)

새 numericIndexedVector 객체를 반환해요. numericIndexedVector

예시 (Examples)

with
    numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1,
    numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 40, 30]))) as vec2
SELECT
    numericIndexedVectorToMap(numericIndexedVectorPointwiseLessEqual(vec1, vec2)) AS res1,
    numericIndexedVectorToMap(numericIndexedVectorPointwiseLessEqual(vec1, 20)) AS res2;
┌─res1──────────┬─res2──────┐
│ {2:1,3:1,4:1} │ {1:1,2:1} │
└───────────────┴───────────┘

numericIndexedVectorPointwiseMultiply

도입: v25.7.0

numericIndexedVector와 다른 numericIndexedVector 또는 숫자 상수 사이의 점별 곱셈을 수행해요.

구문 (Syntax)

numericIndexedVectorPointwiseMultiply(v1, v2)

인자 (Arguments)

  • v1numericIndexedVector
  • v2 — 숫자 상수 또는 numericIndexedVector 객체. (U)Int* 또는 Float* 또는 numericIndexedVector

반환 값 (Returned value)

새 numericIndexedVector 객체를 반환해요. numericIndexedVector

예시 (Examples)

with
    numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toInt32(x), [10, 20, 30]))) as vec1,
    numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toInt32(x), [10, 20, 30]))) as vec2
SELECT
    numericIndexedVectorToMap(numericIndexedVectorPointwiseMultiply(vec1, vec2)) AS res1,
    numericIndexedVectorToMap(numericIndexedVectorPointwiseMultiply(vec1, 2)) AS res2;
┌─res1──────────────────┬─res2─────────────┐
│ {1:0,2:200,3:600,4:0} │ {1:20,2:40,3:60} │
└───────────────────────┴──────────────────┘

numericIndexedVectorPointwiseNotEqual

도입: v25.7.0

numericIndexedVector와 다른 numericIndexedVector 또는 숫자 상수 사이의 점별 비교를 수행해요. 결과는 값이 같지 않은 인덱스들을 담고, 모든 대응 값이 1로 설정된 numericIndexedVector예요.

구문 (Syntax)

numericIndexedVectorPointwiseNotEqual(v1, v2)

인자 (Arguments)

  • v1numericIndexedVector
  • v2 — 숫자 상수 또는 numericIndexedVector 객체. (U)Int* 또는 Float* 또는 numericIndexedVector

반환 값 (Returned value)

새 numericIndexedVector 객체를 반환해요. numericIndexedVector

예시 (Examples)

with
    numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1,
    numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 20, 30]))) as vec2
SELECT
    numericIndexedVectorToMap(numericIndexedVectorPointwiseNotEqual(vec1, vec2)) AS res1,
    numericIndexedVectorToMap(numericIndexedVectorPointwiseNotEqual(vec1, 20)) AS res2;
┌─res1──────────┬─res2──────┐
│ {1:1,3:1,4:1} │ {1:1,3:1} │
└───────────────┴───────────┘

numericIndexedVectorPointwiseSubtract

도입: v25.7.0

numericIndexedVector와 다른 numericIndexedVector 또는 숫자 상수 사이의 점별 뺄셈을 수행해요.

구문 (Syntax)

numericIndexedVectorPointwiseSubtract(v1, v2)

인자 (Arguments)

  • v1numericIndexedVector
  • v2 — 숫자 상수 또는 numericIndexedVector 객체. (U)Int* 또는 Float* 또는 numericIndexedVector

반환 값 (Returned value)

새 numericIndexedVector 객체를 반환해요. numericIndexedVector

예시 (Examples)

WITH
    numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toInt32(x), [10, 20, 30]))) AS vec1,
    numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toInt32(x), [10, 20, 30]))) AS vec2
SELECT
    numericIndexedVectorToMap(numericIndexedVectorPointwiseSubtract(vec1, vec2)) AS res1,
    numericIndexedVectorToMap(numericIndexedVectorPointwiseSubtract(vec1, 2)) AS res2;
┌─res1───────────────────┬─res2────────────┐
│ {1:10,2:10,3:10,4:-30} │ {1:8,2:18,3:28} │
└────────────────────────┴─────────────────┘

numericIndexedVectorShortDebugString

도입: v25.7.0

numericIndexedVector의 내부 정보를 JSON 형식으로 반환해요. 주로 디버깅 목적으로 사용돼요.

구문 (Syntax)

numericIndexedVectorShortDebugString(v)

인자 (Arguments)

  • vnumericIndexedVector

반환 값 (Returned value)

디버그 정보를 담은 JSON 문자열을 반환해요. String

예시 (Examples)

SELECT numericIndexedVectorShortDebugString(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res FORMAT Vertical;
Row 1:
──────
res: {"vector_type":"BSI","index_type":"char8_t","value_type":"char8_t","integer_bit_num":8,"fraction_bit_num":0,"zero_indexes_info":{"cardinality":0},"non_zero_indexes_info":{"total_cardinality":3,"all_value_sum":60,"number_of_bitmaps":8,"bitmap_info":{"cardinality":{"0":0,"1":2,"2":2,"3":2,"4":2,"5":0,"6":0,"7":0}}}}

numericIndexedVectorToMap

도입: v25.7.0

numericIndexedVector를 맵으로 변환해요.

구문 (Syntax)

numericIndexedVectorToMap(v)

인자 (Arguments)

  • vnumericIndexedVector

반환 값 (Returned value)

인덱스-값 쌍을 담은 맵을 반환해요. Map

예시 (Examples)

SELECT numericIndexedVectorToMap(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res;
┌─res──────────────┐
│ {1:10,2:20,3:30} │
└──────────────────┘

더 알아보기 (Learn more)