public class ExprNodeDescUtils extends Object
Modifier and Type | Class and Description |
---|---|
static class |
ExprNodeDescUtils.ColumnOrigin |
Modifier and Type | Field and Description |
---|---|
protected static org.slf4j.Logger |
LOG |
Constructor and Description |
---|
ExprNodeDescUtils() |
Modifier and Type | Method and Description |
---|---|
static ExprNodeGenericFuncDesc |
and(ExprNodeDesc e1,
ExprNodeDesc e2)
Creates a conjunction (AND) of two expressions flattening nested conjunctions if possible.
|
static ExprNodeGenericFuncDesc |
and(List<ExprNodeDesc> exps)
Creates a conjunction (AND) of the given expressions flattening nested conjunctions if possible.
|
static ExprNodeDesc |
backtrack(ExprNodeDesc source,
Operator<?> current,
Operator<?> terminal) |
static ExprNodeDesc |
backtrack(ExprNodeDesc source,
Operator<?> current,
Operator<?> terminal,
boolean foldExpr) |
static ExprNodeDesc |
backtrack(ExprNodeDesc source,
Operator<?> current,
Operator<?> terminal,
boolean foldExpr,
boolean stayInSameVertex) |
static ArrayList<ExprNodeDesc> |
backtrack(List<ExprNodeDesc> sources,
Operator<?> current,
Operator<?> terminal)
Convert expressions in current operator to those in terminal operator, which
is an ancestor of current or null (back to top operator).
|
static ArrayList<ExprNodeDesc> |
backtrack(List<ExprNodeDesc> sources,
Operator<?> current,
Operator<?> terminal,
boolean foldExpr) |
static ArrayList<ExprNodeDesc> |
backtrack(List<ExprNodeDesc> sources,
Operator<?> current,
Operator<?> terminal,
boolean foldExpr,
boolean stayInSameVertex) |
static boolean |
checkPrefixKeys(List<ExprNodeDesc> childKeys,
List<ExprNodeDesc> parentKeys,
Operator<? extends OperatorDesc> childOp,
Operator<? extends OperatorDesc> parentOp)
Checks whether the keys of a parent operator are a prefix of the keys of a
child operator.
|
static boolean |
checkPrefixKeysUpstream(List<ExprNodeDesc> childKeys,
List<ExprNodeDesc> parentKeys,
Operator<? extends OperatorDesc> childOp,
Operator<? extends OperatorDesc> parentOp)
Checks whether the keys of a child operator are a prefix of the keys of a
parent operator.
|
static ArrayList<ExprNodeDesc> |
clone(List<ExprNodeDesc> sources) |
static ExprNodeDesc |
conjunction(ExprNodeDesc node1,
ExprNodeDesc node2) |
static ExprNodeDesc |
conjunction(List<ExprNodeDesc> inputExpr) |
static ExprNodeDesc |
conjunction(List<ExprNodeDesc> nodes,
ExprNodeDesc exprNode) |
static boolean |
containsPredicate(ExprNodeDesc source,
ExprNodeDesc predicate)
return true if predicate is already included in source
|
static PrimitiveTypeInfo |
deriveMinArgumentCast(ExprNodeDesc childExpr,
TypeInfo targetType) |
static PrimitiveTypeInfo |
deriveMinArgumentCast(TypeInfo childTi,
TypeInfo targetType) |
static ExprNodeDesc |
disjunction(ExprNodeDesc e1,
ExprNodeDesc e2) |
static ExprNodeDesc |
disjunction(List<ExprNodeDesc> operands) |
static void |
disjunctiveDecomposition(ExprNodeDesc expr,
List<ExprNodeDesc> operands) |
static String |
extractColName(ExprNodeDesc root) |
static ExprNodeDesc[] |
extractComparePair(ExprNodeDesc expr1,
ExprNodeDesc expr2) |
static String[] |
extractFields(ExprNodeFieldDesc expr)
Extract fields from the given
node descriptor |
static Set<ExprNodeColumnDesc> |
findAllColumnDescs(ExprNodeDesc expr) |
static ExprNodeDescUtils.ColumnOrigin |
findColumnOrigin(ExprNodeDesc expr,
Operator<?> op) |
static ExprNodeDesc |
findConstantExprOrigin(String dpCol,
Operator<? extends OperatorDesc> op) |
static ExprNodeDesc |
flattenExpr(ExprNodeDesc source)
A normal reduce operator's rowObjectInspector looks like a struct containing
nested key/value structs that contain the column values:
{ key: { reducesinkkey0:int }, value: { _col0:int, _col1:int, ..
|
static List<ExprNodeDesc> |
flattenExprList(List<ExprNodeDesc> sourceList) |
static ArrayList<ExprNodeDesc> |
genExprNodeDesc(Operator inputOp,
int startPos,
int endPos,
boolean addEmptyTabAlias,
boolean setColToNonVirtual)
Build ExprNodeColumnDesc for the projections in the input operator from
sartpos to endpos(both included).
|
static ExprNodeColumnDesc |
getColumnExpr(ExprNodeDesc expr) |
static void |
getExprNodeColumnDesc(ExprNodeDesc exprDesc,
com.google.common.collect.Multimap<Integer,ExprNodeColumnDesc> hashCodeToColumnDescMap)
Get Map of ExprNodeColumnDesc HashCode to ExprNodeColumnDesc.
|
static void |
getExprNodeColumnDesc(List<ExprNodeDesc> exprDescList,
com.google.common.collect.Multimap<Integer,ExprNodeColumnDesc> hashCodeTocolumnDescMap) |
static Operator<?> |
getSameVertexParent(Operator<?> current,
Operator<?> terminal)
When Multi-Parent backtrack to the same Vertex (non-RS) branch and return the found parent.
|
static Operator<?> |
getSingleParent(Operator<?> current,
Operator<?> terminal) |
static int |
indexOf(ExprNodeDesc origin,
List<ExprNodeDesc> sources) |
static int |
indexOf(ExprNodeDesc origin,
List<ExprNodeDesc> sources,
int startIndex) |
static boolean |
isAllConstants(List<ExprNodeDesc> value) |
static boolean |
isAnd(ExprNodeDesc expr) |
static boolean |
isConstant(ExprNodeDesc value) |
static boolean |
isConstantStruct(ExprNodeDesc valueDesc) |
static boolean |
isDeterministic(ExprNodeDesc desc)
Return false if the expression has any non deterministic function
|
static boolean |
isIntegerType(ExprNodeDesc expr) |
static boolean |
isNullConstant(ExprNodeDesc value) |
static boolean |
isOr(ExprNodeDesc expr) |
static boolean |
isSame(ExprNodeDesc desc1,
ExprNodeDesc desc2) |
static boolean |
isSame(List<ExprNodeDesc> first,
List<ExprNodeDesc> second) |
static boolean |
isStructUDF(ExprNodeDesc columnDesc) |
static ExprNodeGenericFuncDesc |
mergePredicates(ExprNodeDesc prev,
ExprNodeDesc next)
bind two predicates by AND op
|
static ExprNodeDesc |
mergePredicates(List<ExprNodeDesc> exprs)
bind n predicates by AND op
|
static ExprNodeGenericFuncDesc |
murmurHash(List<ExprNodeDesc> exps)
Create an expression for computing a murmur hash by recursively hashing given expressions by two:
|
static String |
recommendInputName(ExprNodeDesc desc)
Recommend name for the expression
|
static ExprNodeDesc |
replace(ExprNodeDesc origin,
List<ExprNodeDesc> sources,
List<ExprNodeDesc> targets) |
static void |
replaceEqualDefaultPartition(ExprNodeDesc origin,
String defaultPartitionName) |
static void |
replaceNullFiltersWithDefaultPartition(ExprNodeDesc origin,
String defaultPartitionName) |
static void |
replaceTabAlias(Collection<ExprNodeDesc> exprs,
String oldAlias,
String newAlias) |
static ExprNodeDesc |
replaceTabAlias(ExprNodeDesc expr,
String oldAlias,
String newAlias) |
static void |
replaceTabAlias(Map<String,ExprNodeDesc> exprMap,
String oldAlias,
String newAlias) |
static ExprNodeDesc |
resolveJoinKeysAsRSColumns(ExprNodeDesc source,
Operator<?> reduceSinkOp)
Join keys are expressions based on the select operator.
|
static List<ExprNodeDesc> |
resolveJoinKeysAsRSColumns(List<ExprNodeDesc> sourceList,
Operator<?> reduceSinkOp) |
static List<ExprNodeDesc> |
split(ExprNodeDesc current)
split predicates by AND op
|
static List<ExprNodeDesc> |
split(ExprNodeDesc current,
List<ExprNodeDesc> splitted)
split predicates by AND op
|
public static int indexOf(ExprNodeDesc origin, List<ExprNodeDesc> sources)
public static int indexOf(ExprNodeDesc origin, List<ExprNodeDesc> sources, int startIndex)
public static ExprNodeDesc replace(ExprNodeDesc origin, List<ExprNodeDesc> sources, List<ExprNodeDesc> targets)
public static void replaceEqualDefaultPartition(ExprNodeDesc origin, String defaultPartitionName) throws SemanticException
SemanticException
public static void replaceNullFiltersWithDefaultPartition(ExprNodeDesc origin, String defaultPartitionName) throws SemanticException
SemanticException
public static boolean containsPredicate(ExprNodeDesc source, ExprNodeDesc predicate)
public static ExprNodeGenericFuncDesc and(ExprNodeDesc e1, ExprNodeDesc e2)
The method is equivalent to calling: and(Arrays.asList(e1, e2))
public static ExprNodeGenericFuncDesc and(List<ExprNodeDesc> exps)
Input: OR(A, B), C, AND(D, AND(E, F)) Output: AND(OR(A, B), C, D, E, F)TODO: Replace mergePredicates ?
public static ExprNodeGenericFuncDesc murmurHash(List<ExprNodeDesc> exps)
Input: HASH(A, B, C, D) Output: HASH(HASH(HASH(A,B),C),D)
public static ExprNodeGenericFuncDesc mergePredicates(ExprNodeDesc prev, ExprNodeDesc next)
public static ExprNodeDesc mergePredicates(List<ExprNodeDesc> exprs)
public static List<ExprNodeDesc> split(ExprNodeDesc current)
public static List<ExprNodeDesc> split(ExprNodeDesc current, List<ExprNodeDesc> splitted)
public static String recommendInputName(ExprNodeDesc desc)
public static boolean isDeterministic(ExprNodeDesc desc)
public static ArrayList<ExprNodeDesc> clone(List<ExprNodeDesc> sources)
public static ArrayList<ExprNodeDesc> backtrack(List<ExprNodeDesc> sources, Operator<?> current, Operator<?> terminal) throws SemanticException
SemanticException
public static ArrayList<ExprNodeDesc> backtrack(List<ExprNodeDesc> sources, Operator<?> current, Operator<?> terminal, boolean foldExpr) throws SemanticException
SemanticException
public static ArrayList<ExprNodeDesc> backtrack(List<ExprNodeDesc> sources, Operator<?> current, Operator<?> terminal, boolean foldExpr, boolean stayInSameVertex) throws SemanticException
SemanticException
public static ExprNodeDesc backtrack(ExprNodeDesc source, Operator<?> current, Operator<?> terminal) throws SemanticException
SemanticException
public static ExprNodeDesc backtrack(ExprNodeDesc source, Operator<?> current, Operator<?> terminal, boolean foldExpr) throws SemanticException
SemanticException
public static ExprNodeDesc backtrack(ExprNodeDesc source, Operator<?> current, Operator<?> terminal, boolean foldExpr, boolean stayInSameVertex) throws SemanticException
SemanticException
public static Operator<?> getSingleParent(Operator<?> current, Operator<?> terminal) throws SemanticException
SemanticException
public static Operator<?> getSameVertexParent(Operator<?> current, Operator<?> terminal)
current
- Parent OPterminal
- End Oppublic static List<ExprNodeDesc> resolveJoinKeysAsRSColumns(List<ExprNodeDesc> sourceList, Operator<?> reduceSinkOp)
public static ExprNodeDesc resolveJoinKeysAsRSColumns(ExprNodeDesc source, Operator<?> reduceSinkOp)
source
- reduceSinkOp
- public static ExprNodeDesc[] extractComparePair(ExprNodeDesc expr1, ExprNodeDesc expr2)
public static String[] extractFields(ExprNodeFieldDesc expr)
node descriptor
public static void getExprNodeColumnDesc(List<ExprNodeDesc> exprDescList, com.google.common.collect.Multimap<Integer,ExprNodeColumnDesc> hashCodeTocolumnDescMap)
public static void getExprNodeColumnDesc(ExprNodeDesc exprDesc, com.google.common.collect.Multimap<Integer,ExprNodeColumnDesc> hashCodeToColumnDescMap)
exprDesc
- hashCodeToColumnDescMap
- public static boolean isConstant(ExprNodeDesc value)
public static boolean isAllConstants(List<ExprNodeDesc> value)
public static boolean isNullConstant(ExprNodeDesc value)
public static PrimitiveTypeInfo deriveMinArgumentCast(ExprNodeDesc childExpr, TypeInfo targetType)
public static PrimitiveTypeInfo deriveMinArgumentCast(TypeInfo childTi, TypeInfo targetType)
public static ArrayList<ExprNodeDesc> genExprNodeDesc(Operator inputOp, int startPos, int endPos, boolean addEmptyTabAlias, boolean setColToNonVirtual)
inputOp
- Input Hive OperatorstartPos
- starting position in the input operator schema; must be >=0 and <=
endPosendPos
- end position in the input operator schema; must be >=0.public static List<ExprNodeDesc> flattenExprList(List<ExprNodeDesc> sourceList)
public static ExprNodeDesc flattenExpr(ExprNodeDesc source)
source
- public static String extractColName(ExprNodeDesc root)
public static ExprNodeColumnDesc getColumnExpr(ExprNodeDesc expr)
public static Set<ExprNodeColumnDesc> findAllColumnDescs(ExprNodeDesc expr)
public static ExprNodeDesc findConstantExprOrigin(String dpCol, Operator<? extends OperatorDesc> op)
public static boolean checkPrefixKeys(List<ExprNodeDesc> childKeys, List<ExprNodeDesc> parentKeys, Operator<? extends OperatorDesc> childOp, Operator<? extends OperatorDesc> parentOp) throws SemanticException
childKeys
- keys of the child operatorparentKeys
- keys of the parent operatorchildOp
- child operatorparentOp
- parent operatorSemanticException
public static boolean checkPrefixKeysUpstream(List<ExprNodeDesc> childKeys, List<ExprNodeDesc> parentKeys, Operator<? extends OperatorDesc> childOp, Operator<? extends OperatorDesc> parentOp) throws SemanticException
childKeys
- keys of the child operatorparentKeys
- keys of the parent operatorchildOp
- child operatorparentOp
- parent operatorSemanticException
public static ExprNodeDescUtils.ColumnOrigin findColumnOrigin(ExprNodeDesc expr, Operator<?> op)
public static boolean isSame(ExprNodeDesc desc1, ExprNodeDesc desc2)
public static boolean isSame(List<ExprNodeDesc> first, List<ExprNodeDesc> second)
public static boolean isIntegerType(ExprNodeDesc expr)
public static boolean isConstantStruct(ExprNodeDesc valueDesc)
public static boolean isStructUDF(ExprNodeDesc columnDesc)
public static ExprNodeDesc conjunction(List<ExprNodeDesc> inputExpr) throws UDFArgumentException
UDFArgumentException
public static ExprNodeDesc conjunction(ExprNodeDesc node1, ExprNodeDesc node2) throws UDFArgumentException
UDFArgumentException
public static ExprNodeDesc conjunction(List<ExprNodeDesc> nodes, ExprNodeDesc exprNode) throws UDFArgumentException
UDFArgumentException
public static ExprNodeDesc disjunction(ExprNodeDesc e1, ExprNodeDesc e2) throws UDFArgumentException
UDFArgumentException
public static ExprNodeDesc disjunction(List<ExprNodeDesc> operands) throws UDFArgumentException
UDFArgumentException
public static void disjunctiveDecomposition(ExprNodeDesc expr, List<ExprNodeDesc> operands)
public static boolean isOr(ExprNodeDesc expr)
public static boolean isAnd(ExprNodeDesc expr)
public static ExprNodeDesc replaceTabAlias(ExprNodeDesc expr, String oldAlias, String newAlias)
public static void replaceTabAlias(Map<String,ExprNodeDesc> exprMap, String oldAlias, String newAlias)
public static void replaceTabAlias(Collection<ExprNodeDesc> exprs, String oldAlias, String newAlias)
Copyright © 2022 The Apache Software Foundation. All rights reserved.