Class DruidExpression
java.lang.Object
org.apache.druid.sql.calcite.expression.DruidExpression
Represents two kinds of expression-like concepts that native Druid queries support:
(1) SimpleExtractions, which are direct column access, possibly with an extractionFn
(2) native Druid expressions and virtual columns
When added to
VirtualColumnRegistry whenever used by projections, filters,
aggregators, or other query components, these will be converted into native virtual columns using
toVirtualColumn(String, ColumnType, ExpressionParser)
Approximate expression structure is retained in the arguments, which when fed into the
DruidExpression.ExpressionGenerator that all DruidExpression must be created with will produce the final String
expression (which will be later parsed into Expr during native processing).
This allows using the DruidExpression.DruidExpressionShuttle to examine this expression "tree" and potentially rewrite some
or all of the tree as it visits nodes, and the nodeType property provides high level classification of
the types of expression which a node produces.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceCreate aDruidExpressiongiven some set of input argument sub-expressionsstatic interfacestatic interfaceUsed byDruidExpressionto compile a string which can be parsed into anExprfrom given the sub-expression argumentsstatic classstatic classDirect reference to a physical or virtual columnstatic classBuilds expressions for a static constant valuestatic enumstatic interfaceUsed by aDruidExpressionto translate itself into aVirtualColumnto add to a native query when referenced by a projection, filter, aggregator, etc. -
Method Summary
Modifier and TypeMethodDescriptionbooleanReturns true if this expression or any of its arguments (recursively) hasDruidExpression.NodeType.SPECIALIZEDtype, indicating the expression would benefit from virtual column specialization.static StringdoubleLiteral(double n) booleanstatic DruidExpressionfromColumn(String column) Deprecated.static DruidExpressionfromExpression(String expression) Deprecated.useofExpression(ColumnType, ExpressionGenerator, List)instead to participate in virtual column and expression optimizationstatic DruidExpressionfromFunctionCall(String functionName, List<DruidExpression> args) Deprecated.useofFunctionCall(ColumnType, String, List)instead to participate in virtual column and expression optimizationfunctionCall(String functionName) static StringfunctionCall(String functionName, List<DruidExpression> args) Deprecated.usefunctionCall(String)insteadstatic StringfunctionCall(String functionName, DruidExpression... args) Deprecated.usefunctionCall(String)insteadGet subDruidExpressionarguments of this expressionTheColumnTypeof this expression as inferred when this expression was created.getType()inthashCode()booleanisArray()booleanbooleanReturns whether this expression isDruidExpression.NodeType.IDENTIFIERorDruidExpression.NodeType.SPECIALIZED.booleanstatic StringlongLiteral(long n) map(Function<SimpleExtraction, SimpleExtraction> extractionMap, Function<String, String> expressionMap) map(Function<SimpleExtraction, SimpleExtraction> extractionMap, Function<String, String> expressionMap, ColumnType newType) static Stringstatic DruidExpressionof(SimpleExtraction simpleExtraction, String expression) Deprecated.useofExpression(ColumnType, SimpleExtraction, ExpressionGenerator, List)instead to participate in virtual column and expression optimizationstatic DruidExpressionofColumn(ColumnType columnType, String column) static DruidExpressionofColumn(ColumnType columnType, String column, SimpleExtraction simpleExtraction) static DruidExpressionofExpression(ColumnType columnType, DruidExpression.ExpressionGenerator expressionGenerator, List<DruidExpression> arguments) static DruidExpressionofExpression(ColumnType columnType, SimpleExtraction simpleExtraction, DruidExpression.ExpressionGenerator expressionGenerator, List<DruidExpression> arguments) static DruidExpressionofFunctionCall(ColumnType columnType, String functionName, List<DruidExpression> args) static DruidExpressionofLiteral(ColumnType columnType, String literal) static DruidExpressionofLiteral(DruidLiteral literal) Create a literal expression from anExprEval.static DruidExpressionstatic DruidExpressionofVirtualColumn(ColumnType type, DruidExpression.ExpressionGenerator expressionGenerator, List<DruidExpression> arguments, DruidExpression.VirtualColumnCreator virtualColumnCreator) static StringtoExpressionVirtualColumn(String name, ColumnType outputType, ExpressionParser parser) toString()toVirtualColumn(String name, ColumnType outputType, ExpressionParser parser) Visit all subDruidExpression(theargumentsof this expression), allowing theDruidExpression.DruidExpressionShuttleto potentially rewrite these arguments with newDruidExpression, finally building a new version of thisDruidExpressionwith updatedarguments.withArguments(List<DruidExpression> newArgs)
-
Method Details
-
longLiteral
-
doubleLiteral
-
stringLiteral
-
nullLiteral
-
functionCall
-
functionCall
Deprecated.usefunctionCall(String)instead -
functionCall
Deprecated.usefunctionCall(String)instead -
ofLiteral
-
ofLiteral
Create a literal expression from anExprEval. -
ofStringLiteral
-
ofColumn
public static DruidExpression ofColumn(@Nullable ColumnType columnType, String column, SimpleExtraction simpleExtraction) -
ofColumn
-
ofFunctionCall
public static DruidExpression ofFunctionCall(ColumnType columnType, String functionName, List<DruidExpression> args) -
ofVirtualColumn
public static DruidExpression ofVirtualColumn(ColumnType type, DruidExpression.ExpressionGenerator expressionGenerator, List<DruidExpression> arguments, DruidExpression.VirtualColumnCreator virtualColumnCreator) -
ofExpression
public static DruidExpression ofExpression(@Nullable ColumnType columnType, DruidExpression.ExpressionGenerator expressionGenerator, List<DruidExpression> arguments) -
ofExpression
public static DruidExpression ofExpression(@Nullable ColumnType columnType, SimpleExtraction simpleExtraction, DruidExpression.ExpressionGenerator expressionGenerator, List<DruidExpression> arguments) -
of
Deprecated.useofExpression(ColumnType, SimpleExtraction, ExpressionGenerator, List)instead to participate in virtual column and expression optimization -
fromColumn
Deprecated. -
fromExpression
Deprecated.useofExpression(ColumnType, ExpressionGenerator, List)instead to participate in virtual column and expression optimization -
fromFunctionCall
@Deprecated public static DruidExpression fromFunctionCall(String functionName, List<DruidExpression> args) Deprecated.useofFunctionCall(ColumnType, String, List)instead to participate in virtual column and expression optimization -
getExpression
-
isDirectColumnAccess
public boolean isDirectColumnAccess() -
getDirectColumn
-
isSimpleExtraction
public boolean isSimpleExtraction() -
getSimpleExtraction
-
isArray
public boolean isArray() -
getArguments
Get subDruidExpressionarguments of this expression -
toVirtualColumn
-
toExpressionVirtualColumn
public VirtualColumn toExpressionVirtualColumn(String name, ColumnType outputType, ExpressionParser parser) -
getType
-
isIdentifierOrSpecialized
public boolean isIdentifierOrSpecialized()Returns whether this expression isDruidExpression.NodeType.IDENTIFIERorDruidExpression.NodeType.SPECIALIZED. Useful because these are the expressions that can be expected to become direct column references once virtual columns have gone through a specialization pass. -
containsSpecializedNodes
public boolean containsSpecializedNodes()Returns true if this expression or any of its arguments (recursively) hasDruidExpression.NodeType.SPECIALIZEDtype, indicating the expression would benefit from virtual column specialization. -
getDruidType
TheColumnTypeof this expression as inferred when this expression was created. This is likely the result of converting the output ofRexNode.getType()usingCalcites.getColumnTypeForRelDataType(RelDataType), but may also be supplied by other means. This value is not currently used other than for tracking the types of theDruidExpressiontree. The value passed totoVirtualColumn(String, ColumnType, ExpressionParser)will instead be whatever type "hint" was specified when the expression was added to theVirtualColumnRegistry. -
map
public DruidExpression map(Function<SimpleExtraction, SimpleExtraction> extractionMap, Function<String, String> expressionMap) -
map
public DruidExpression map(Function<SimpleExtraction, SimpleExtraction> extractionMap, Function<String, String> expressionMap, ColumnType newType) -
withArguments
-
visit
Visit all subDruidExpression(theargumentsof this expression), allowing theDruidExpression.DruidExpressionShuttleto potentially rewrite these arguments with newDruidExpression, finally building a new version of thisDruidExpressionwith updatedarguments. -
equals
-
hashCode
public int hashCode() -
toString
-
ofColumn(ColumnType, String)orofColumn(ColumnType, String, SimpleExtraction)instead