---
title: 约束与限制
description: "在特性配置前，请先了解OmniOperator算子加速特性的使用限制。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2400/bds/kunpengbds_omniruntime_20_0204.html
sourcePath: /source/zh/kunpengboostkithistory/2400/bds/kunpengbds_omniruntime_20_0204.html
indexId: fb9b2cee7ac302928fe35c8554aca981d27d5b5031e4b0d974f97d877fbd204378
---
# 约束与限制

在特性配置前，请先了解OmniOperator算子加速特性的使用限制。

- 当前UDF插件仅支持Simple UDF，用于执行基于Hive UDF框架编写的UDF函数。
- 当前支持的Decimal数据类型规格包含64位和128位，如若超过128位的表示范围，则会抛出异常或者返回null，可能会产生和引擎原生行为不相同的场景，如SUM、AVG聚合等，若中间结果超出Decimal 128位，引擎原生正常执行，OmniOperator则根据配置抛出异常或者返回null。这里建议如果字段需要进行AVG运算且存在累加结果过大的可能，请使用Double等其他类型存储。
- 不同的负载所需内存配置不一样，例如TPC-DS 3TB数据集，SparkExtension推荐配置下，堆外内存配置不低于20GB，99条所有SQL可成功运行，运行过程中日志可能出现MEM_CAP_EXCEEDED但不影响最终功能，建议适当增大堆外内存配置。如果堆外内存配置过低，SQL执行结果可能不正确。
- 当前Sort、Window和HashAgg等算子支持Spill功能，BroadcastHashJoin、ShuffledHashJoin和SortMergeJoin等尚不支持Spill功能。
- Hive OmniOperator算子加速在成功执行TPC-DS 99条时，由于原生Hive在q14、q72和q89运行时可能存在问题，因此OmniOperator算子加速暂不支持Hive引擎运行这3条SQL。
- Hive OmniOperator算子加速在支持POWER表达式时，由于C++ std::pow函数和Java的Math.pow函数实现存在一些细微差异，导致使用C++实现的POWER表达式和Hive原生的POWER表达式存在一定误差，但相对精度误差不大于1e-15。
- Spark OmniOperator算子加速支持from_unixtime和unix_timestamp表达式：

  1. 仅支持时间解析策略spark.sql.legacy.timeParserPolicy为EXCEPTION、CORRECTED的情况，不支持LEGACY。
  2. 对于一些不合理的参数（如不存在的日期，无效的超大时间戳值等），Omni实现与原生Spark实现的处理结果存在不一致。
  3. 可以通过配置spark.omni.sql.columnar.unixTimeFunc.enabled=false来回退这两个函数，即使用原生函数来规避    2
中的不一致问题。
- Hive OmniOperator算子加速在支持浮点数运算时，可能会产生和原生Hive行为不相同的场景，如除浮点数0.0等。若出现除浮点数0.0的场景，原生Hive返回null，OmniOperator算子加速则根据具体的运算行为返回Infinity、NaN或null。
- Hive引擎默认开启CBO优化，Hive OmniOperator算子加速当前仅支持开启CBO优化，不支持关闭，即不支持将hive.cbo.enable设置为false。
- 当SQL中存在Alter字段属性或使用LOAD DATA导入.parq数据的场景时，Hive引擎建议使用原生TableScan算子。
- Spark OmniOperator算子加速同时对超多列进行表达式Codegen时，例如500列，编译开销大于OmniOperator加速效果，建议该场景采用原生Spark执行。
- Spark OmniOperator算子加速boolean类型数据不支持比较运算符（<、<=、>、>=、!=、<>、=、==和<=>），同时所有数据类型对比较运算符<=>都不支持，在执行过程中存在这些场景会导致算子回退属于正常现象。如果在大表Join操作中发生回退，由于行列转换开销较大，可能导致性能下降。在实际使用中，建议尽量避免此类场景，以减少回退带来的性能影响。
  Hive OmniOperator算子加速在表声明的数据存储结构和实际存储结构不匹配，且GroupBy和分桶的参数一致时，原生Hive可能出现Group By算子分组异常的问题。因此建议在建表时不采用分桶策略或使用load data local inpath的方式导入数据，以保障表声明的存储结构和实际存储结构相匹配。 Hive OmniOperator算子加速在求和结果溢出时，可能会产生和引擎原生行为不相同的结果。OmniOperator算子加速返回NULL，使用户能够感知到运算发生溢出；原生Hive返回一个错误值，可能对用户造成误导。
