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,索引由 bitmap 存储,具体实现使用的是 Roaring Bitmap。最佳实践是尽可能将索引集中到少数几个 Roaring Bitmap 容器中,以最大化压缩率和查询性能。
- Bit-Sliced Index 机制会将值转换为二进制。对于浮点类型,转换时会使用定点表示,因此可能带来精度损失。精度可以通过自定义小数部分所使用的位数进行调整,默认值为 24 位,对大多数场景已足够。你可以在使用带
-State的聚合函数 groupNumericIndexedVector 构造 NumericIndexedVector 时,自定义整数位数和小数位数。 - 索引有三种情况:非零值、零值和不存在。在 NumericIndexedVector 中,只有非零值和零值会被存储。此外,在两个 NumericIndexedVector 之间进行按元素运算时,不存在的索引值会被视为 0。在除法场景下,如果除数为零,结果为零。
创建 numericIndexedVector 对象
groupNumericIndexedVector 与 -State 结合使用。
你还可以添加 -if 后缀以接受额外条件。
该聚合函数只会处理满足该条件的行。
另一种方式是使用 numericIndexedVectorBuild 基于 map 构建。
groupNumericIndexedVectorState 函数允许通过参数自定义整数位和小数位的位数,而 numericIndexedVectorBuild 不支持。
groupNumericIndexedVector
Float64 类型返回所有值之和。若添加 State 后缀,则返回一个 NumericIndexedVector 对象。
语法
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。
Float64 值,表示所有值之和。
示例
测试数据:
下方文档由
system.functions 系统表自动生成。numericIndexedVectorAllValueSum
Float64
示例
使用示例
Query
Response
numericIndexedVectorBuild
map— 从索引到值的映射。Map
AggregateFunction
示例
使用示例
Query
Response
numericIndexedVectorCardinality
UInt64
示例
使用示例
Query
Response
numericIndexedVectorGetValue
v—numericIndexedVectori— 要获取其值的索引。(U)Int*
(U)Int* 或 Float*
示例
使用示例
Query
Response
numericIndexedVectorPointwiseAdd
v1—numericIndexedVectorv2— 数值常量或numericIndexedVector对象。(U)Int*或Float*或numericIndexedVector
numericIndexedVector 对象。numericIndexedVector
示例
用法示例
Query
Response
numericIndexedVectorPointwiseDivide
v1—numericIndexedVectorv2— 数值常量或一个numericIndexedVector对象。(U)Int*或Float*或numericIndexedVector
numericIndexedVector 对象。numericIndexedVector
示例
使用示例
Query
Response
numericIndexedVectorPointwiseEqual
v1—numericIndexedVectorv2— 数值常量或numericIndexedVector对象。(U)Int*或Float*或numericIndexedVector
numericIndexedVector 对象。
示例
Query
Response
numericIndexedVectorPointwiseGreater
v1—numericIndexedVectorv2— 数值常量,或numericIndexedVector对象。(U)Int*或Float*或numericIndexedVector
numericIndexedVector 对象。numericIndexedVector
示例
使用示例
Query
Response
numericIndexedVectorPointwiseGreaterEqual
v1—numericIndexedVectorv2— 数值常量或numericIndexedVector对象。(U)Int*或Float*或numericIndexedVector
numericIndexedVector 对象。numericIndexedVector
示例
使用示例
Query
Response
numericIndexedVectorPointwiseLess
v1—numericIndexedVectorv2— 数值常量或 numericIndexedVector 对象。(U)Int*或Float*或numericIndexedVector
numericIndexedVector
示例
使用示例
Query
Response
numericIndexedVectorPointwiseLessEqual
v1—numericIndexedVectorv2—(U)Int*或Float*类型的数值常量,或numericIndexedVector对象
numericIndexedVector 对象。
示例
用法示例
Query
Response
numericIndexedVectorPointwiseMultiply
v1—numericIndexedVectorv2— 数值常量或numericIndexedVector对象。(U)Int*或Float*或numericIndexedVector
numericIndexedVector 对象。numericIndexedVector
示例
Query
Response
numericIndexedVectorPointwiseNotEqual
v1—numericIndexedVectorv2— 数值常量或numericIndexedVector对象。(U)Int*或Float*或numericIndexedVector
numericIndexedVector 对象。numericIndexedVector
示例
使用示例
Query
Response
numericIndexedVectorPointwiseSubtract
v1—numericIndexedVectorv2— 数值常量或numericIndexedVector对象。(U)Int*或Float*或numericIndexedVector
numericIndexedVector 对象。
示例
用法示例
Query
Response
numericIndexedVectorShortDebugString
String
示例
使用示例
Query
Response
numericIndexedVectorToMap
Map
示例
使用示例
Query
Response