BigDataplus

其他

Antlr4实战:统一SQL路由多引擎

改写完词法文件后的HQL的词法文件HiveSqlBase.g4,antlr4的词法文件以.g4作为文件后缀的。然后使用Antlr4工具命令或idea右键产生gen包下的8个文件,以下一一介绍功能。
2020年1月30日
其他

Flink优化器与源码解析系列--让Flink飞奔起来这篇文章就够啦(一)

there?");TableEnvironment:Table运行时环境,又分StreamTableEnvironment流查询运行环境和BatchTableEnvironment批查询运行环境。
2019年12月26日
其他

Hive优化器原理与源码解析系列--优化规则HivePointLookupOptimizerRule(二十四)

判断由RelOptCall调用的优化规则Rule是否与输入参数RelNode关系表达式匹配,即此优化规则Rule能否应用到一个RelNode关系表达式树上。
2019年11月30日
其他

Hive优化器原理与源码解析系列--优化规则HiveReduceExpressionsWithStatsRule(二十三)

Filter操作对象。RexUtil.pullFactors创建的等价版本一个节点,在该版本中,将上拉ORs之间的公共因子。即通过从DNF表达式中提取公共元素来重新组合过滤器。
2019年11月29日
其他

Hive优化器原理与源码解析系列--优化规则FilterReduceExpressionsRule(二十二)

java.util.Map)注册表达式。而RelOptRuleCall用一系列RelNode关系表达式集合作为参数,对RelOptRule优化规则的调用。
2019年11月27日
其他

Hive优化器原理与源码解析系列--优化规则HiveFilterSortTransposeRule(二十一)

判断由RelOptCall调用的优化规则Rule是否与输入参数RelNode关系表达式匹配,即此优化规则Rule能否应用到一个RelNode关系表达式树上。
2019年11月23日
其他

Hive优化器原理与源码解析系列--优化规则HiveFilterSetOpTransposeRule(二十)

newSetOpInputs.add(relBuilder.push(input).filter(newCondition).build());//把判断条件放置在分支RelNode上}
2019年11月22日
其他

Hive优化器原理与源码解析系列--优化规则HiveIntersectMergeRule(十九)

如果顶部top是distinct去重复的,不管底部bottom是all还是distinct都能合并,如果顶部top是all,那底部bottom也是all才能合并,否则退出优化。
2019年11月20日
其他

Hive优化器原理与源码解析系列--优化规则HiveFilterAggregateTransposeRule(十八)

builder.push(aggRel.getInput()).filter(pushedConditions).build();//把谓词下推到AGG的子输入INPUTif
2019年11月18日
其他

Hive优化器原理与源码解析系列--优化规则AggregateProjectPullUpConstantsRule(十七)

哪些是常量字段是RelMetadataQuery.getpulldupredicates(RelNode)提取出关于此输入RelNode的谓词,返回RelOptPredicateList对象推导的。
2019年11月17日
其他

Hive优化器原理与源码解析系列--优化规则HiveAggregateProjectMergeRule(十六)

判断由RelOptCall调用的优化规则Rule是否与输入参数RelNode关系表达式匹配,即此优化规则Rule能否应用到一个RelNode关系表达式树上。
2019年11月16日
其他

Hive优化器原理与源码解析系列--优化规则HivePreFilteringRule(十五)

如果提取完公共元素的RexNode是AND组成,则用RexUtil.flattenAnd把系列AND节点,转换为一个List,null节点作为常量True,提取共同的可以下推谓词表达式。
2019年11月10日
其他

Hive优化器原理与源码解析系列--优化规则PartitionPruneRule(十四)

当表数据量巨大时,读取全量数据就会成为一个瓶颈。那么创建分区是个不错的选择,可避免不必要地读取大量数据。当然要应用PartitionPruneRule优化规则,也是要满足匹配条件的,形如:
2019年11月6日
自由知乎 自由微博
其他

Hive优化器原理与源码解析系列--优化规则HiveJoinCommuteRule(十三)

Loop算法,改变了左右两表的顺序,是可以减少IO次数的,IO次数也是影响执行效率的因素之一,同时IO也是CBO基于成本优化器成本模型CostModel元素之一。如果Join物理层算法实现是Hash
2019年11月4日
其他

Hive优化器原理与源码解析系列--优化规则HiveJoinAddNotNullRule(十二)

使用getNotNullConditions(文章开头讲过)分别对左右两侧的谓词引用元素,再分别生成新的不null的条件列表newLeftConditions和newRightConditions。
2019年10月28日
其他

Hive优化器原理与源码解析系列--优化规则HiveProjectMergeRule(十一)

RelOptUtil.pushPastProject方法把顶部Project投影内RexNode行表达式和底部Project投影内RexNode行表达式进行合并成新的Project对象。
2019年10月25日
其他

Hive优化器原理与源码解析系列--优化规则ProjectSortTransposeRule(十)

描述映射的类型,从最一般的MULTI_FUNCTION函数(源域和目标域中的每个元素都可以参与许多映射)到最严格的双映射(源域和目标域中的每个元素都必须与另一个域中的一个元素精确配对)。
2019年10月20日
其他

Hive优化器原理与源码解析系列--优化规则ProjectOverIntersectRemoveRule(九)

Hive几乎所有优化规则Rule继承了父类RelOptRule。关于RelOptRule和RelOptRuleCall相关概念。这里不再赘述,详细翻阅前期文章。
2019年9月27日
其他

Hive优化器原理与源码解析系列--优化规则UnionPullUpConstantsRule(八)

这里只是为了说明方便,使用了SQL进行讲述,其实优化器内部使用的RelNode关系表达式构造的操作符树组成来构建的。但是常量上拉是基于操作符树父与子的构建关系来确定上下关系的,转换为操作符树。
2019年9月22日
其他

Hive优化器原理与源码解析系列--优化规则SortLimitPullUpConstantsRule(七)

其实在优化器内部,虽然在操作符树的形式上能满足优化要求,在具体实现逻辑上,还有其他逻辑限制,比如,Project投影的字段个数较少,就没有太多优化空间,Filter中必须是等值的谓词常量如age
2019年9月15日
其他

Hive优化器原理与源码解析系列--优化规则ProjectFilterPullUpConstantsRule(六)

遍历这些谓词RexNode,判读必须是RexCall对象,RexCall是通过调用运算符op而形成的表达式,其中零个或多个表达式作为操作数。运算符可以是二元的、一元的、函数的、特殊的语法结构,比如
2019年9月14日
其他

Hive优化器原理与源码解析系列--优化规则SortMergeRule(五)

判断由RelOptCall调用的优化规则Rule是否与输入参数RelNode关系表达式匹配,即此优化规则Rule能否应用到一个RelNode关系表达式树上。SortMergeRule的判断条件如下:
2019年9月8日
其他

Hive优化器原理与源码解析系列--优化规则SortUnionReduceRule(四)

最后步骤是Union操作符将重写的下推了Sort的新子RelNode,生成新Union。新生成Union做Sort的子RelNode生成新Sort,保持了原RelNode是等价变换。注册到优化器。
2019年9月7日
其他

Hive优化器原理与源码解析系列--优化规则SortProjectTransposeRule(三)

Sort排序和Project投影操作(相当于HSQ中的Select操作)的调换顺序的优化规则。把原RelNode做了等价变化,新产生RelNode注册到优化器,使用动态规划算法构建出最优的执行计划。
2019年9月3日
其他

Hive优化器原理与源码解析系列--优化规则SortJoinReduceRule(二)

这里把新的Join从新生成了SortLimit注册到优化器,结合上篇文章SortRemoveRule,就会把根SortLimit移除掉,只保留了Join下的SortLimit
2019年9月2日
其他

Hive优化器原理与源码解析系列--优化规则SortRemoveRule(一)

sortLimit.fetch相当于Limit返回限制的记录条数,如果Limit限制条数没达到预期的减少比例和减少返回的记录数变量,则不匹配返回false,无法继续优化,这些条件外,则返回true
2019年8月26日
其他

Hive优化器原理与源码解析—统计信息NDV唯一值数估算

使用RelMdUtil.guessSelectivity猜测参数predicate谓词的选择率,rel.estimateRowCount估算其总记录数,假设一半为为重复,所以除以2.
2019年8月21日
其他

Hive优化器原理与源码解析—统计信息Parallelism并行度计算

在不考虑并行度参数设置和硬件的情况下,一个Operator操作符的并行度,在允许并行执行的前提下,由splitCount拆分个数决定的,上述主要讲解了几个常用Operator的并行度的计算。
2019年8月13日
其他

Hive优化器原理与源码解析系列—统计信息UniqueKeys列集合

side不是指其主键,是带有主键的那一侧,就JoinKey关联键外键而言,它是重复的,如员工表的外键部门编号就是含有重复值的,所以使用主键侧的选择率和外键的非重复记录数进行估算。
2019年8月10日
其他

Hive优化器原理与源码解析系列—CBO成本模型CostModel(二)

Tez引擎的成本模型,相对比较完善,包括HiveTableScan、HiveAggregate等Operator的成本计算,还有多种Join算法的成本计算。
2019年8月7日
其他

Hive优化器原理与源码解析系列--统计信息中间结果大小计算

基于成本优化器CBO会从RelNode的等价集合中,在通过动态规划算法选择整体成本最优的执行计划。在整个bestPlan最优执行计划构建过程中,一般会倾向于选择中间结果更小的RelNode。
2019年8月4日
其他

Hive优化器原理与源码解析系列—统计信息带谓词选择率Selectivity

通过Validate后的RelNode树已经可以直接转化物理执行计划,但现代的SQL解析器基本上都包括有这一步,目的是优化SQL执行计划。此步得到的结果为物理执行计划。
2019年7月27日
其他

Hive优化器原理与源码解析系列—CBO成本模型CostModel(一)

RelOptCost接口实现,从IO、记录数、CPU三个指标构成HiveCost成本对象的估算。定义了HiveCost的四类成本常量及工厂类来获取这些常量,成本之间的四则运算及Cost比较等方法。
2019年7月24日
其他

Hive优化器原理与源码解析系列—统计模块内存成本估算

HiveSortLimit计算方法大致和汇总HiveAggregate类似,唯一区别在于Collation排序信息为null,即没有排序字段和排序方向的信息,此时内存估算大小为0.0.
2019年7月16日
其他

Hive优化器原理与源码解析系列—统计信息之选择性

Hive统计模块的选择性计算不是根据简单地计算某列的选择Selectivity,而是基于Operator操作符综合来选择性Selectivity的,TableScan(类似From
2019年7月14日