Currently, AsterixDB code base has 98 rules total. 83 rules are in use by Asterix and are grouped in collections.
We have 12 collections and the role of each collection is detailed below. Additionally, there are 6 rules for Hivesterix, 16 rules for vxqueryVxquery, 5 rules are Abstract abstract rules or extensions and 4 rules are currently not used.There are 60 beyond-compare sessions ready to show the plan before and after the rule was applied. Note that not all rules produce an apparent change in the plan.
These are our collections (1-9 logical rules, 10-12 physical rules):
...
TypeInference
Normalization
CondPushDownAndJoinInference
LoadFields
Fuzzy
Normalization - repeated
CondPushDownAndJoinInference - repeated
LoadFields - repeated
DataExchange
PhysicalRewritesAllLevel
PhysicalRewritesTopLevel
PrepareForJobGen
PhysicalRewritesAllLevel
PhysicalRewritesTopLevel
PrepareForJobGen
Abstract rules:
AbstractDecorrelationRule implemented by IntroJoinInsideSubplanRule
AbstractExtractExprRule implemented ExtractDistinctByExpressionsRule, ExtractGbyExpressionsRule, ExtractOrderExpressionsRule
AbstractIntroduceAccessMethodRule implemented by IntroduceJoinAccessMethodRule, IntroduceSelectAccessMethodRule
AbstractIntroduceCombinerRule implemented by IntroduceAggregateCombinerRule, IntroduceGroupByCombinerRule
InlineVariablesRule - AsterixInlineVariablesRule actually extends this rule
Rules used by Hive or Piglet:
InsertProjectBeforeWriteRule - used by Hive
IntroduceEarlyProjectRule - used by Hive
LocalGroupByRule - used by Hive
PushProjectIntoDataSourceScanRule - used by Hive and Piglet
RemoveRedundantProjectionRule - used by Hive
RemoveRedundantSelectRule - used by Hive
Cleanup suggestations:
Rules which are not in use:
ByNameToByHandleFieldAccessRule - TO BE REMOVED
FuzzyJoinRule - TO BE RE-ENABLED
IntroduceTransactionCommitByAssignOpRule - TO BE REMOVED
PullPositionalVariableFromUnnestRule --?? WHAT DOES IT DO
Rules which should be renamed to *Rule (add the suffix Rule):
EnforceOrderByAfterSubplan
PushProperJoinThroughProduct
PushGroupByThroughProduct
FeedScanCollectionToUnnest
RemoveRedundantGroupByDecorVars
PushSimilarityFunctionsBelowJoin
PullSelectOutOfEqJoin
IntroHashPartitionMergeExchange
PushFunctionsBelowJoin -extended by PushSimilarityFunctionsBelowJoin)
Types of rules:
SequentialFixpointRuleController(false) = you don’t do a DFS and apply the rule to the operator only, however you reiterate on the group of rules until you get no change
SequentialFixpointRuleController(true) = you do a DFS
SequentialOnceRuleController(true) = you apply the rule once
There are 60 beyond-compare sessions ready to show the plan before and after the rule was applied. Note that not all rules produce an apparent change in the plan.