Hubble支持面向列的查询。大部分的数据库执行查询计划,采用逐行获取表数据的方式。
面向行的执行模式可以在联机交易(OLTP)场景中保证很好的性能,而在分析性业务场景(OLAP)中的表现并不好。Hubble的向量化执行引擎,通过对特定于类型的列数据,使用特性的组件进行批处理查询的方式,极大地改进了面向行的执行的性能。
默认配置情况下,在面对确定使用内存计算的查询任务,并满足可支持的数据类型时,将会使用向量化执行引擎。
可使用当前session
对其进行配置,具体参数名称为vectorize
,参数详情如下:
参数名称 | 详情 |
---|---|
auto | 内存中执行的查询时,尽可能的使用向量化执行引擎,而不需要将中间结果溢出到磁盘。 |
experimental_on | 所有查询都使用向量化执行引擎,不建议在生产环境使用此配置,避免出现内存问题。 |
off | 对于所有查询,都不需用向量化执行引擎。 |
向量化执行的效率随着处理的行数的增加而提高。如查询的是一张非常小表时,那面向行的执行方式效率会远比向量化执行要快。默认配置下,如果表中数据少于1000行,将不会使用向量化执行引擎。设置属性名为vectorize_row_count_threshold
STRING
UUID
BYTES
DATE
FLOAT
INT
BOOL
TIMESTAMP
设置向量化策略:
show vectorize;
vectorize
+---------+
auto
(1 row)
set vectorize = 'auto'
设置向量化开启阈值:
show vectorize_row_count_threshold;
vectorize_row_count_threshold
+-----------------------------+
1000
(1 row)
set vectorize_row_count_threshold=10000;