-
-1
-
自定义
Map/Reduce任务数量控制
名称 | 含义 | 取值 |
---|---|---|
mapred.reduce.tasks |
Reduce Tasks的数量。该参数对性能调优有极大帮助, |
|
【高危】ngmr.partition.automerge |
Automerge的控制开关,用于减少小文件数量从而控制Map Tasks的数量。 |
|
【高危】ngmr.partition.mergesize |
ngmr.partition.automerge开关打开后,此参数用于控制将多少Partitions Merge在一起。 |
|
【高危】ngmr.partition.mergesize.mb |
ngmr.partition.automerge开关打开后,此参数用于控制Merge的数据量总和的上限。为-1时表示忽略此限制。(单位:MBytes) |
|
动态分区
名称 | 含义 | 取值 |
---|---|---|
hive.exec.dynamic.partition |
是否允许动态分区。 |
|
hive.exec.dynamic.partition.mode |
选择动态分区的处理模式。在strict模式下,用户必须至少指定一个静态分区以防止无意间overwrite所有分区;nonstrict模式下,所有分区都可以为动态。 |
|
hive.exec.max.dynamic.partitions |
最多允许创建多少动态分区。 |
|
hive.crud.dynamic.partition |
是否对单值分区表支持基于动态分区的crud。该参数为true时,可以以单值分区表整表为单位作为insert/update/delete/merge into的目标,否则仅能以单值分区表的指定分区为crud 的目标。 |
|
hive.optimize.dynamic.partition.insert |
控制是否自动对动态分区插入语句进行优化改写。默认为true,表示开启此功能。 使用此开关前,需要将以下参数设置为:hive.enforce.bucketing=true、hive.crud.dynamic.partition=true和hive.exec.dynamic.partition.mode=nonstrict。 |
|
hive.optimize.dynamic.partition.insert.cluster.by.random |
设置对分区非分桶表进行动态分区插入时,是否使用随机个数的reduce task。默认为false,表示最后会用1个reduce task进行插入。 |
|
执行优化
名称 | 含义 | 取值 |
---|---|---|
hive.window.spill.size |
一个窗口计算聚合函数时最多允许内存存放多少条记录。如果超出该数值,多余记录会spill至磁盘。如果窗口数量比较多,需要把这个参数设小来降低内存压力以提高稳定性。如果窗口数量少,可以调大这个参数提高性能。 |
|
hive.winfunc.predicate.pushdown |
是否对窗口函数采用谓词前推的优化。 |
|
hive.enforce.bucketing |
对当前Session是否强制分桶,主要用于控制bucket表相关的优化。 不要直接去修改此参数,它受其他优化参数控制。 |
|
hive.enforce.sorting |
分桶内部是否默认强制排序。 |
|
【高危】ngmr.reader.minmaxfilter |
适用于列式存储的表,如果查询有过滤条件并且数据块具有最大最小值的统计信息,每次带过滤条件的扫描首先会计算该过滤条件是否满足数据块的最大最小值范围,若不满足就跳过该块,从而节省IO成本。 |
|
【高危】ngmr.reader.rowfilter |
优化开关打开后如果表有过滤条件,就先读取过滤条件的字段并计算filter,若满足条件就去读取其他字段,否则检查下一行。适用于超宽表扫描。 |
|
【高危】hive.udf.codegen |
作用于UDF代码生成过程的优化开关,可用于加速表达式求值。 |
|
inceptor.throw.zero.divisor.exception |
控制当UDF发生除零计算时是否报错,为true表示报错。 |
|
inceptor.select.distinct.group.by.enabled |
是否支持select distinct + UDAF语句。 |
|
【高危】inceptor.skip.optimizer |
是否放弃使用SQL优化器。适用于Hyperbase中工作负载存在大量并发执行的简单SQL语句,降低编译成本。 |
|
hive.optimize.readcolumn |
是否采用优化方法访问字段。当在Hyperbase中执行形如“select count(*) where xx is null”的语句时,请关闭该开关。 |
|
hive.groupby.iter.single.rollua |
是否优化Rollup性能,包括对Hash表和Null Key Map端的优化。 |
|
hive.window.iterator.directly |
是否对窗口函数迭代器的性能进行优化。目前支持优化ROW_NUMBER、RANK、CSUM这三种窗口函数。 |
|
ngmr.dd.local.mode.auto |
是否自动使用local mode来查询数据字典表(system中的所有表)。默认使用local mode。 |
|
hive.decimal.wrdecimal.enabled |
是否使用星环科技自身的WRDecimal实现Decimal类型。WRDecimal是基于HiveDecimal的Decimal实现方式,解决了HiveDecimal在处理Decimal类型时的一些问题的限制。该参数默认值为True,如果需要更改取值,请在所有节点的hive-site.xml中配置,并且重启Inceptor后才会生效。 |
|
hive.max.partition.locks.per.table |
用于控制 SELECT \* FROM table WHERE <condition> 这类SQL语句在执行时是否对全表加锁。当 condition 中涉及到的分区数小于等于此阈值时,仅对分区加锁,不影响其他分区的事务操作,以优化系统性能;超过此阈值时,对全表加锁。此参数不建议设置过大。 当此参数设置为0时,表示SELECT \* FROM table WHERE condition这类查询均对全表加锁。 |
|
partition.crud.validate.check.and.cast |
用于控制 TRUNCATE TABLE table_name PARTITION (<partition_key> = <partition_value>,…) 语句是否对 <partition_value> 的格式进行检查并转换。默认为 true,表示会自动检查 <partition_value> 的格式,如果为非标准格式,则会自动转换为标准格式,再进行查找和执行。 |
|
数据稽查
名称 | 含义 | 取值 |
---|---|---|
inceptor.data.audit |
当前session是否开启数据稽查功能。 该开关是inceptor.data.audit.statement、inceptor.strict.evaluate和inceptor.notnull.audit的Top Level控制。 |
|
inceptor.data.audit.statement |
如果启动该开关,在SQL执行结束时会输出:“N rows were wrong during query, please check the error table for details.”。随inceptor.data.audit开启而默认打开。 |
|
inceptor.strict.evaluate |
用来控制是否在遇到脏数据时报Exception。随inceptor.data.audit开启而默认打开。如果已知Table中有脏数据建议关闭该开关。 |
|
inceptor.notnull.audit |
是否对NOT NULL constraint进行检查。开关打开后,对于有NOT NULL限制的字段,如果发现有null值则该记录写入Error Table。随inceptor.data.audit开启而默认打开。 |
|
inceptor.insert.type.conversion |
在INSERT数据时,是否依照TableSchema定义的字段类型自动进行类型转换。 |
|
JOIN
名称 | 含义 | 取值 |
---|---|---|
ngmr.mapjoin.autoconvert |
是否将满足MapJoin条件的JOIN自动按MapJoin的方式处理。 |
|
【高危】inceptor.mapjoin.filter |
是否启用MapJoin Filter优化。优化效果:实现MapJoin时,可根据维度表的运行结果在运行时动态生成事实表的过滤条件。 |
|
【高危】inceptor.mapjoin.filter.autogen |
是否对自动转化的MapJoin使用mapjoin.filter优化。配合mapjoin.filter开关,可以适用于MapJoin小表有最大值/最小值过滤机会的场景。 |
|
【高危】inceptor.filterjoin.enabled |
是否合并级联MapJoin,也就是一个大表同时和多个小表做MapJoin。 |
|
inceptor.filterjoin.pushdown.filter.enabled |
是否在级联Join中下推小表过滤条件作为filter。 |
|
hive.ignore.mapjoin.hint |
是否忽略MapJoin Hint。为true时表示忽略。 |
|
ngmr.broadcast.join |
Broadcast Join的优化开关。 |
|
ngmr.broadcast.parallel.smalltable.collect |
执行Broadcast Join时是否使用并发方式广播小表。 |
|
ngmr.broadcast.join.smalltable.size |
允许参与Broadcast Join的小表的行数上限。 |
|
inceptor.filterjoin.enabled |
控制是否开启FilterJoin优化。FilterJoin是基于MapJoin的优化,适用于语句中有多个级联MapJoin的场景,加快这类语句的执行速度。 |
|
inceptor.maxjoincount.threshold |
允许SQL语句中存在的最大JOIN个数。 |
|
Stargate
名称 | 含义 | 取值 |
---|---|---|
【高危】stargate.debug.log |
是否把对Stargate进行Debug时的信息写入日志。 |
|
stargate.dispatcher |
是否启用Stargate的Dispatcher。 |
|
stargate.advance.filter.generator |
在Stargate中是否启用高级Filter生成器。 |
|
stargate.dimension.enabled |
是否启用Stargate中的dimension下推。 |
|
stargate.orderby.pushdown |
Stargate是否将能正常解析的OrderBy的信息下推到Stargate数据源表中,默认为true(下推)。 |
|
stargate.limit.pushdown |
Stargate是否将能正常解析的Limit的信息下推到Stargate数据源表中,默认为true(下推)。 |
|
stargate.andor.filter.convert |
Stargate Filter默认不解析Or在And之下的过滤条件,例如:
开启该开关后,Stargate将会对该Filter条件进行转换并解析后下推到Stargate数据源表中,默认为true(开启转换)。 |
|
ngmr.stargate.filter.equal.pushdown |
是否下推等值的过滤条件,如
|
|
ngmr.stargate.filter.notequal.pushdown |
是否下推非等值的过滤条件,如
|
|
ngmr.stargate.filter.in.pushdown |
是否下推IN条件过滤,如
|
|
ngmr.stargate.filter.notin.pushdown |
是否下推NOT IN条件查询,如
|
|
ngmr.stargate.filter.like.pushdown |
是否下推LIKE及RLIKE条件查询,如
|
|
ngmr.stargate.filter.notlike.pushdown |
是否下推NOT LIKE及NOT RLIKE条件查询,如
|
|
ngmr.stargate.filter.isnull.pushdown |
是否下推IS NULL条件查询,如
|
|
ngmr.stargate.filter.isnotnull.pushdown |
是否下推IS NOT NULL条件查询,如
|
|
ngmr.stargate.filter.between.pushdown |
是否下推BETWEEN条件查询,如
|
|
ngmr.stargate.filter.greaterthan.pushdown |
是否下推 > 条件查询,如
|
|
ngmr.stargate.filter.equalorgreaterthan.pushdown |
是否下推 >= 条件查询,如
|
|
ngmr.stargate.filter.lessthan.pushdown |
是否下推 < 条件查询,如
|
|
ngmr.stargate.filter.equalorlessthan.pushdown |
是否下推 <= 条件查询,如
|
|
ngmr.stargate.filter.range.pushdown |
是否下推范围过滤相关条件查询,如
|
|
PL/SQL
名称 | 含义 | 取值 |
---|---|---|
plsql.client.dialect |
客户端采用的PL/SQL方言。 |
|
plsql.server.dialect |
服务器端采用的PL/SQL方言。 |
|
plsql.process.strict |
PLSQL执行过程中如果发生异常,会影响到当前会话的PLSQL进程状态(因为进程中包含的会话级的全局变量可能已经损坏),默认情况会要求必须重启一个会话(命令行),否则不允许继续执行其他的PLSQL语句。如果用户不想每次发生异常都重启命令行,且确定自己的程序不会读写全局变量,可以将该开关设为false关闭这一限制。 |
|
plsql.show.sqlresults |
在PL/SQL中执行SELECT操作时,是否打印查询结果。 |
|
plsql.use.slash |
是否在PL/SQL中支持“/”操作符。 |
|
plsql.cache.output |
PL/SQL中PUT_LINE有如下行为:如果程序正常结束,会统一打印到终端;如果程序中出现了未被处理的异常,默认在终端只打印异常栈,PUT_LINE内容需要去hive.log中查看;考虑到对于异常的处理方式给调试带来的不便,现在提供此开关,开关开启时可将PUT_LINE内容连同异常栈一起打印到终端帮助调试。建议仅在调试时开启,否则会带来资源压力。 |
|
plsql.catch.hive.exception |
是否在PL/SQL中捕捉Hive异常。该变量需要在真正运行存储过程而不是创建存储过程的时候设置。 |
|
plsql.optimize.dml.precompile |
是否对PL/SQL中的DML开启预编译。 |
|
plsql.optimize.dml.precompile.deopt |
开启plsql.optimize.dml.precompile后如果预编译失败是否进行退优化,即采用每次运行都编译的执行方式。 |
|
plsql.compile.dml.check.semantic |
是否在编译期对SQL进行语义检查。 |
|
hive.server2.idle.plsql.operation.timeout |
PLSQL语句的timeout控制,单位毫秒。PL/SQL作为控制流,可能会包含多个执行时间较长的SQL,因此用该参数单独控制PL/SQL控制流的timeout。 |
|
plsql.check.driver.env |
是否检查PL/SQL有没有正运行在非driver环境中。如果关闭,请谨慎使用。 |
|
plsql.runtime.profile |
是否对PL/SQL运行时性能进行检查。 |
|
plsql.cursor.local.job.record.timeout.weight |
控制local mode下游标的执行时间限制。设置该参数后例如100,local mode模式下游标的执行时间限制为plsql.cursor.local.job.record.timeout.weight和ngmr.local.job.record.timeout.ms的乘积,如果游标执行时间超过该乘积,那么将会被kill掉。 |
|