what we are wrapping
the config
the parent of this node, if there is one.
holds information related to the config for this object, typically this is the rule used to wrap the stage.
The wrapped data writing commands that should be examined
The wrapped expressions that should be examined
The wrapped partitioning that should be examined
The wrapped plans that should be examined
Do any extra checks and tag yourself if you are compatible or not.
Do any extra checks and tag yourself if you are compatible or not. Be aware that this may already have been marked as incompatible for a number of reasons.
All of your children should have already been tagged so if there are situations where you may need to disqualify your children for various reasons you may do it here too.
Call this method to record information about type conversions via DataTypeMeta.
Returns true iff all of the data writing commands can be replaced.
Returns true iff all of the expressions and their children could be replaced.
Returns true iff all of the partitioning can be replaced.
Returns true iff this could be replaced.
the config
Keep this on the CPU, but possibly convert its children under it to run on the GPU if enabled.
Keep this on the CPU, but possibly convert its children under it to run on the GPU if enabled. By default this just returns what is wrapped by this. For some types of operators/stages, like SparkPlan, each part of the query can be converted independent of other parts. As such in a subclass this should be overridden to do the correct thing.
Returns the list of reasons the entire plan can't be replaced.
Returns the list of reasons the entire plan can't be replaced. An empty set means the entire plan is ok to be replaced, do the normal checking per exec and children.
Call this if there is a condition found that the entire plan is not allowed to run on the GPU.
Returns true iff this must be replaced because its children have already been replaced and this needs to also be replaced for compatibility.
the parent of this node, if there is one.
Create a string representation of this in append.
Create a string representation of this in append.
where to place the string representation.
how far down the tree this is.
should all the data be printed or just what does not work on the GPU?
When converting this to a string should we include the string representation of what this wraps too? This is off by default.
When converting this to a string should we include the string representation of what this wraps too? This is off by default.
Recursively force a section of the plan back onto CPU, stopping once a plan is reached that is already on CPU.
Returns true if this node should be removed.
Tag all of the children to see if they are GPU compatible first.
Tag all of the children to see if they are GPU compatible first. Do basic common verification for the operators, and then call tagSelfForGpu
Call this to indicate that this should not be replaced with a GPU enabled version
Call this to indicate that this should not be replaced with a GPU enabled version
why it should not be replaced.
what we are wrapping
Holds metadata about a stage in the physical plan that is separate from the plan itself. This is helpful in deciding when to replace part of the plan with a GPU enabled version.
the exact type of the class we are wrapping.
the generic base class for this type of stage, i.e. SparkPlan, Expression, etc.