Quark 基础参数大全系列三 | 编译相关篇

友情链接


hive.rewrite.oscd

参数说明:

  • 是否允许 ORDER BY/SORT BY/CLUSTER BY/DISTRIBUTE BY 的字段既可以用原字段的变型表示,也可以用对应的 alias 代表。
  • 例如,设置 set hive.rewrite.oscd=true; 后,如下两段语句都允许:
SELECT name, AVG(age) AS avg_age FROM students GROUP BY avg_age;
SELECT name, AVG(age) AS avg_age FROM students GROUP BY AVG(age);

默认值:true

取值范围:true、false

inceptor.enable.temptable.crud

参数说明:

  • 是否默认把临时表建为 CRUD 表。

默认值:true

取值范围:true、false

ngmr.metacache.level

参数说明:

  • 读取 Metadata 时是否允许缓存 Table 信息。仅限于高并发测试场景下适用,不适用于多个 Quark Server 共用一个 Metastore 的场景。

默认值:statement

取值范围:

  • none:表示 metastore 将关闭缓存。
  • statement:表示在编译每个语句时,metastore 缓存将是一致的。
  • server:表示将在服务器级别缓存介元缓存。

注意事项:高危参数,请用户尽量不要改变默认设置。

inceptor.withas.material

参数说明:

  • 是否物化 WITH-AS 子句。

默认值:true

取值范围:true、false

注意事项:建议不要设为 false。

inceptor.predicate.pushdown

参数说明:

  • 是否进行谓词下推。是谓词下推的总开关,覆盖了 ngmr.ppd 和 hive.optimize.ppd 的功能。

默认值:true

取值范围:true、false

ngmr.ppd

参数说明:

  • 关于 Predicate Push Down 相关的比较激进的优化开关。为 true 时对于复杂的表达式(包含 OR 连接),会尽量分解中各个表的表达式并尽量推进到 TableScan 之后。

默认值:true

取值范围:true、false

注意事项:本优化参数用处较大,建议不要设为 false。

hive.optimize.ppd

参数说明:

  • Hive 社区实现的谓词下推优化,只能将比较简单的表达式推进到 TableScan 之后。

默认值:true

取值范围:true、false

hive.ppd.recognizetransivity

参数说明:

Predicate Push Down 的一个特殊优化。如果是等值 JOIN 并且某表的 JOIN 字段在 SQL 语句中有过滤,此时可以对另一张表的 JOIN 字段生成过滤条件,并且下推到 TableScan 之后。

select count(1) from employee a join grade b
on a.name=b.name where b.name like '%S';

这个例子中过滤条件实际上等价于 a.name like '%S' and b.name like '%S',因此该 SQL 的执行计划可改写为:

select count(1) from (
     select name from employee a
     where a.name like '%S' ) aa
join (
     select name from grade b
     where b.name like '%S' ) bb
on aa.name=bb.name;

默认值:true

取值范围:true、false

hive.ppd.remove.duplicatefilters

参数说明:

  • 对语句进行优化时,可能需要下推 filter。如果采用了此优化选项,此 filter 仅处于下推后的位置上,原位置的 filter 会被删除;否则在两处皆保留。

默认值:true

取值范围:true、false

ngmr.orderby.pushdown

参数说明:

  • 是否自动下推 ORDER BY。

默认值:true

取值范围:true、false

hive.optimize.constant.propagation

参数说明:

  • 是否启用 ConstantPropagate 优化器。可用于优化带常数的条件表达式。

默认值:true

取值范围:true、false

hive.optimize.metadataonly

参数说明:

  • 是否启用基于 Metadata 信息的优化。Meta 中有些统计值可用于一些优化。

默认值:true

取值范围:true、false

hive.optimize.reducededuplication

参数说明:

  • 如果一个 SQL 中对某个表的某个 key 存在 Shuffle 多次的情况,这个优化来控制是否合并这些 Shuffle,从而提高性能。

默认值:false

取值范围:true、false

hive.optimize.reducededuplication.min.reducer

参数说明:

  • 只有当 Reducer 的数量大于此参数值时,才会进行 deduplication 优化。否则,如果 Reducer 数量过少可能会带来性能退化。此参需要和开关 hive.optimize.reducededuplication 结合使用。

默认值:4

取值范围:自定义 INT 型。

ngmr.using.stats

参数说明:

  • 表示对于简单的查询语句如 SELECT COUNT(1) 是否可以通过访问存储于 Metastore 中的统计信息直接获得结果。但是对于高级信息可能需要执行 ANALYZE。

默认值:false

取值范围:true、false

注意事项:本参数仅当 hive.stats.autogather=true 时有效。

inceptor.cbo.enable

参数说明:

CBO 优化器开关。CBO 是基于代价的优化方式,主要用于优化设计 JOIN 的执行计划。

例如,CBO 会对 JOIN顺序进行调整,如果下述顺序的代价为1000:

table_A INNER JOIN table_B INNER JOIN table_C;

而另一种顺序的代价为500:

table_A INNER JOIN table_C INNER JOIN table_B

那么优化器会自动选择后一种JOIN顺序作为最终的执行计划。

默认值:false

取值范围:true、false

hive.cbo.rowbased.mapjoin

参数说明:

  • CBO 开关 inceptor.cbo.enable=true 的情况下,用来控制是否使用 row based 策略决定是否用 MapJoin 执行 JOIN。

默认值:false

取值范围:true、false

inceptor.cbo.rowbased.dim.mapjoin

参数说明:

  • 决定对于维度表是否允许基于 row based 策略转为 MapJoin 执行。

默认值:true

取值范围:true、false

inceptor.cbo.rowbased.subq.mapjoin

参数说明:

  • 决定对于子查询是否允许基于 row based 策略转为 MapJoin 执行。

默认值:false

取值范围:true、false

inceptor.cbo.selectop.remove

参数说明:

是否删除 CBO 引入的冗余 Select Operator。

默认值:**true

取值范围:**true、false

inceptor.cbo.outer.inner.reorder

参数说明:

是否在 CBO 内部调整 Outer Join 和 Inner Join 的顺序。

默认值:true

取值范围:true、false

inceptor.cbo.combine.hint.enable

参数说明:

是否启用 Combine Hint。Combine Hint 功能。此开关的优化作用在于,当多表 JOIN 时,CBO 会尽量先 JOIN 符合 Combine Hint 触发的 Bucket Join 的两表。

即指对于形如下述的语句:

SELECT /*+comine(col1, col2)*/ FROM a JOIN b;

如果 col1 和 col2 分别是表 a 和 b 的分桶列,那么 ArgoDB 会尝试用 Bucketed Join 的方式执行 JOIN。

默认值:true

取值范围:true、false

inceptor.cbo.costmodel.commonjoin.costfactor

参数说明:

  • CBO 代价模型中 Common Join 的代价系数。

默认值:8.0

取值范围:自定义 FLOAT 型。

inceptor.cbo.costmodel.mapjoin.costfactor

参数说明:

  • CBO 代价模型中 Map Join 的代价系数

默认值:1.0

取值范围:自定义 FLOAT 型。

inceptor.cbo.costmodel.bucketjoin.costfactor

参数说明:

  • CBO 代价模型中 Bucket Join 的代价系数。

默认值:1.0

取值范围:自定义 FLOAT 型。

inceptor.cbo.costmodel.forcemj.costfactor

参数说明:

  • CBO 代价模型中带 Hint 的 Map Join 的代价系数。

默认值:0.8

取值范围:自定义 FLOAT 型。

hive.cbo.costmodel.smalltable.rowcount.threshold

参数说明:

  • 开启 CBO 时定义的小表或子查询行数上限,小于此上限的可以采用 MapJoin。可以根据实际情况进行调整。

默认值:100000

取值范围:自定义 STRING 型。

inceptor.cbo.mdprovider.extended

参数说明:

  • 是否采用一种新的代价估算模型,这种模型可以专门解决无统计信息或者只有部分统计信息情况下的 CBO 优化。

默认值:false

取值范围:true、false

注意事项:不建议开启该参数。

hive.correlated.subquery.ast.transform

参数说明:

  • 决定是否对 WHERE 和 HAVING 语句中具有子查询的 SQL 语句使用 CBO 优化。若使用需要将该参数值设置为 FALSE。

默认值:true

取值范围:true、false

hive.iso.enable

参数说明:

  • ISO 优化器开关。
  • ISO主要是解决海量数仓业务迁移过程中,临时表使用不当所造成的性能损失,主要场景包括:
  • 临时表创建后没有被任何 SQL 访问过。
  • 临时表由全列选择创建,但执行的SQL只访问了临时表中的少数几列字段。
  • 临时表只有一个引用点。
  • ISO 目前将通过以下三种手段分别解决上述三种问题:
  • 删除无用临时表
  • 删除临时表无用列
  • 临时表内联

默认值:false

取值范围:true、false

inceptor.offlineiso.resultfile.dir

参数说明:

  • ISO 优化输出文件目录。该目录存放 ISO 优化处理后的文件。

默认值:/tmp/isoResultFile

取值范围:自定义 STRING 型。

character.literal.as.string

参数说明:

  • 参数控制用单引号或双引号包括起来的字符串字面常量是否被识别成 String 类型。
  • 如果设置为 true,则字符串常量被识别成 String 类型,其行为遵循普通编程语言中的String行为。
  • 如果设置为 false,则字符串常量被识别成 Char 类型,涉及到Char类型的操作(例如类型转换,UDF,值比较等)均与当前方言一致。

默认值:false

取值范围:true、false

注意事项:不同方言对空字符串、NULL 以及字符类型的右侧空格处理有不同的处理方式,具体请参考 《Tranwarp ArgoDB 开发者指南》的 SQL 参考章节

inceptor.parser.heuristic.join.reorder

参数说明:

  • 是否在 Parser 端基于 JOIN 条件,采用启发式方式对 JOIN 顺序进行调整。此开关默认打开(true),如遇 JOIN 顺序调整不合理,可以关闭此开关(false)。

默认值:true

取值范围:true、false

inceptor.whereinexists.semijoin

参数说明:

  • 是否将 IN/EXITS 条件转化为 SemiJoin。

默认值:false

取值范围:true、false

注意事项:在聚合率高的情况下不建议设置为 true。

hive.expr.cse

参数说明:

是否提取由 OR 连接的多个过滤条件之间的公共表达式。

例如,某语句中有下述过滤条件:

  • WHERE (a = 1 AND b = 2) OR (a = 1 AND b =3)

该开关开启后,该条件将被优化为:

  • WHERE a = 1 AND (b = 2 OR b =3)

默认值:true

取值范围:true、false

hive.expr.cse.nested.filter.exploring

参数说明:

  • 是否提取子查询中的由 OR 连接的多个过滤条件之间的公共表达式。

默认值:true

取值范围:true、false

hive.ppd.subqueryfilter

参数说明:

  • 是否把子查询的结果作为过滤进行下推。

默认值:true

取值范围:true、false

hive.optimize.partial.ppd

参数说明:

是否部分下推 OR 连接的过滤条件。

部分下推是指,当表的过滤条件由 OR 和 AND 连接非常复杂的过滤条件构成,如果能提取出来部分是只针对某一张表的过滤,就实施下推。

比如,过滤条件为:

WHERE a = 1 AND (XXX or XXX and XXX or XXX)

由于 a 只可能涉及一张表,所以部分下推时仅仅下推 a = 1。

默认值:true

取值范围:true、false

inceptor.optimize.outerjoin.conversion

参数说明:

  • 是否允许 OuterJoin 转 InnerJoin 的优化。

默认值:true

取值范围:true、false

注意事项:目前暂不支持视图以及子查询中的 OuterJoin。

inceptor.optimize.intersect.groupby.pushdown

参数说明:

是否将 Group By 前推至 INTERSECT 连接的查询内部进行去重优化。

默认值:false

取值范围:true、false

注意事项:在聚合率不高的情况下不建议设置为 true。

inceptor.onlineiso.enabled

参数说明:

  • OnlineISO 的总开关,用于控制是否动态开启 ISO 优化 SQL。

默认值:false

取值范围:true、false

注意事项:此开关目前只对物化公共表达式起作用。

inceptor.onlineiso.withas.filterppd.enabled

参数说明:

  • OnlineISO 开关 inceptor.onlineiso.enabled=true 的情况下,该开关设为 true 后,对于物化公共表达式,将动态生成过滤条件,使下推过滤物化结果,减少物化成本。

默认值:true

取值范围:true、false

inceptor.onlineiso.withas.cache.enabled

参数说明:

  • 是否缓存物化公共表达式(CTE)的临时表。若重用物化结果,可避免重复计算。

默认值:false

取值范围:true、false

inceptor.nls_sort

参数说明:

  • 该参数用来控制 ArgoDB 内中文排序的策略。

默认值:binary

取值范围:

  • binary:按照 2 进制编码排序。
  • binary_ci:按照 2 进制编码排序并忽略大小写。
  • schinese_radical_m:按照简体中文偏旁排。
  • schinese_pinyin_m:按照中文拼音排。
  • schinese_stroke_m:按照简体中文笔画排。
  • tchinese_radical_m:按照繁体中文偏旁排。
  • tchinese_stroke_m:按照繁体中文笔画排。

client.dialect

参数说明:

  • 配置服务端所使用的 SQL(包含 PL/SQL)方言。

默认值:oracle

取值范围:oracle、db2、td

server.dialect

参数说明:

  • 配置客户端所使用的 SQL(包含PL/SQL)方言。

默认值:oracle

取值范围:oracle、db2、td

inceptor.mbo.enable

参数说明:

  • MBO 优化功能总开关。MBO 是基于物化视图的优化器。

默认值:false

取值范围:true、false

inceptor.mbo.for.naive.mv

参数说明:

  • MBO 在对语句执行计划进行优化改动时,是否使用未过期的 Materialized View 作为改写的 candidate。

默认值:false

取值范围:true、false

注意事项:只有当 MBO 总开关 inceptor.mbo.enable=true 时,该参数才生效。

inceptor.mbo.for.cube

参数说明:

  • MBO 在对语句执行计划进行优化改动时,是否使用 Cube 表作为改写的源表。

默认值:false

取值范围:true、false

注意事项:只有当 MBO 总开关 inceptor.mbo.enable=true 时,该参数才生效。

inceptor.mbo.cube.metacache

参数说明:

  • 控制 MBO 是否缓存 Cube 元信息。设为 true 时,则表示允许将 Cube 信息缓存到 ArgoDB,提高 MBO 改写效率。

默认值:true

取值范围:true、false

注意事项:只有当 MBO 总开关 inceptor.mbo.enable=true 时,该参数才生效。

inceptor.mbo.cube.fast.match

参数说明:

  • 是否开启优化算法的开关,按维度快速匹配 Cube。

默认值:true

取值范围:true、false

inceptor.mbo.pre.load.mv.number

参数说明:

  • 系统启动时,对每个数据库预编译的 Materialized View 个数。对 Materialized View 进行预编译后,MBO 在使用 Materialized View 试图进行优化时就可以跳过编译物化视图环节,从而加速 MBO。

默认值:0

取值范围:自定义 INT 型。

注意事项:只有当 MBO 总开关 inceptor.mbo.enable=true 时,该参数才生效。

inceptor.mbo.max.cached.mvs

参数说明:

  • 系统中 cache 缓存的预编译 Materialized View 的最大个数。

默认值:0

取值范围:自定义 INT 型。

注意事项:

  • 本参数为全局参数,只能通过 Manager 平台的 Quark 服务配置界面进行配置。
  • 只有当 MBO 总开关 inceptor.mbo.enable=true 时,该参数才生效。

inceptor.materialized.views.cache.type

参数说明:

  • 系统中 cache 缓存的预编译 Materialized View 的策略。

默认值:LRU

取值范围:LRU、FIFO

inceptor.mbo.rewrite.greedy

参数说明:

  • MBO 在优化语句执行计划时候是否采用贪心算法。

默认值:true

取值范围:true、false

注意事项:只有当 MBO 总开关 inceptor.mbo.enable=true 时,该参数才生效。

inceptor.mbo.skip.check

参数说明:

  • 取物化视图时,不检查物化视图的时间有效性。

默认值:false

取值范围:true、false

inceptor.mbo.log.verbose

参数说明:

  • 该参数为 true 时,将打印所有和 MBO 相关的 log。

使用场景:当 MBO 改写不符合预期时,可以将该变量设置为 true 后再次执行。

默认值:false

取值范围:true、false

注意事项:

  • 启用该开关后,日志内容会急剧增加,因此此开关只适用于调试。
  • 只有当 MBO 总开关 inceptor.mbo.enable=true 时,该参数才生效。

inceptor.mbo.compatibility.log

参数说明:

  • 当 MBO 改写执行计划失败时,若语句和物化视图兼容度超过该值,则打印造成改写失败的原因。

默认值:0.6

取值范围:自定义 FLOAT 型。

注意事项:只有当 MBO 总开关 inceptor.mbo.enable=true 时,该参数才生效。

inceptor.nonnative.table.meta.refresh

参数说明:

  • 控制在 MBO 改写中,是否允许在 non-native 表数据有变动时更新该表的最近更新时间。
  • 当设为 true 时,可以保证 MBO 得到的数据为最新,但缺点是会降低 non-native 表的 insert/update/delete 操作效率。

默认值:false

取值范围:true、false

注意事项:只有当 MBO 总开关 inceptor.mbo.enable=true 时,该参数才生效。

hive.materializedview.fileformat

参数说明:

  • Materialized View 的默认文件存储格式。

默认值:ORC

取值范围:none、textfile、sequencefile、rcfile、orc、holodesk、hyperdrive、hyper2drive

注意事项:只有当 MBO 总开关 inceptor.mbo.enable=true 时,该参数才生效。

inceptor.floating.scale.decimal

参数说明:

  • 控制是否打开 FSD(Floating Scale Decimal)功能。默认此功能不开启。
  • 当有 DECIMAL 类型数据进行运算时,如果标度值较大,可以将此参数设置为 true,避免整数部分被挤压导致结果不正确。

默认值:false

取值范围:true、false

inceptor.decimal.null.check

参数说明:

  • 控制 DECIMAL 类型列在运算过程中出现 Null 值时是否报错。
  • 设置为 true 时,对运算结果超界、运算非法、隐式转换失败或插入数据时目标列超界这几种情况,ArgoDB 会报错。
  • 默认为 false,即对运算结果超界、运算非法、隐式转换失败或插入数据时目标列超界这几种情况,返回 Null 值。

默认值:false

取值范围:true、false

注意事项:只有当 inceptor.strict.evaluate=true 时,才能生效。

inceptor.select.list.cse.enabled

参数说明:

  • 控制是否开启对 SELECT list 中有公共子表达式的情况进行优化。
  • 公共子表达式需要同时满足以下条件:
  • 该表达式在同一层 query 里出现至少 3 次。
  • 该表达式至少包含 1 个运算。
  • 该表达式不是其他其他非 case when 的 Function 的一部分(但该表达式可以是 Function 本身)。
  • 该表达式不是其他公共子表达式的子表达式。
  • 例如,如果 a+b+c 是公共子表达式,那么 a+b+1, a+b+d 中的 a+b 均不会被判断为公共子表达式。

默认值:false

取值范围:true、false

inceptor.udf.compatible.with.oracle

参数说明:

  • 控制 UDF 表现是否与 Oracle 一致,会影响一些函数(如 DECODE)的执行效果。详细信息请参考《Transwarp ArgoDB 开发者指南》的 SQL 参考章节。
  • TDH_TODATE 函数在此参数为 true 时,会对输入的日期值进行合法性检验,并且能够识别英文日期值。

默认值:false

取值范围:true、false



评论
登录后可评论
发布者
星小环分享号
官方
文章
193
问答
252
关注者
27
banner
关注星环科技
获取最新活动资讯

加入TDH社区版技术交流群

获取更多技术支持 ->

扫描二维码,立即加入