숫자 인덱스 벡터 함수
숫자 인덱스 벡터 함수 (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)
v—numericIndexedVector
반환 값 (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)
v—numericIndexedVector
반환 값 (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)
v—numericIndexedVectori— 값을 가져올 인덱스.(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)
v1—numericIndexedVectorv2— 숫자 상수 또는 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)
v1—numericIndexedVectorv2— 숫자 상수 또는 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)
v1—numericIndexedVectorv2— 숫자 상수 또는 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)
v1—numericIndexedVectorv2— 숫자 상수 또는 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)
v1—numericIndexedVectorv2— 숫자 상수 또는 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)
v1—numericIndexedVectorv2— 숫자 상수 또는 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)
v1—numericIndexedVectorv2— 숫자 상수 또는 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)
v1—numericIndexedVectorv2— 숫자 상수 또는 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)
v1—numericIndexedVectorv2— 숫자 상수 또는 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)
v1—numericIndexedVectorv2— 숫자 상수 또는 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)
v—numericIndexedVector
반환 값 (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)
v—numericIndexedVector
반환 값 (Returned value)
인덱스-값 쌍을 담은 맵을 반환해요. Map
예시 (Examples)
SELECT numericIndexedVectorToMap(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res;
┌─res──────────────┐
│ {1:10,2:20,3:30} │
└──────────────────┘