private OrderExpressionDef translate(ShapeDetails inpShape, OrderExpression oExpr) throws SemanticException { OrderExpressionDef oexpDef = new OrderExpressionDef(); oexpDef.setOrder(oExpr.getOrder()); oexpDef.setNullOrder(oExpr.getNullOrder()); try { PTFExpressionDef expDef = buildExpressionDef(inpShape, oExpr.getExpression()); oexpDef.setExpressionTreeString(expDef.getExpressionTreeString()); oexpDef.setExprEvaluator(expDef.getExprEvaluator()); oexpDef.setExprNode(expDef.getExprNode()); oexpDef.setOI(expDef.getOI()); } catch (HiveException he) { throw new SemanticException(he); } PTFTranslator.validateComparable(oexpDef.getOI(), String.format("Partition Expression %s is not a comparable expression", oExpr.getExpression().toStringTree())); return oexpDef; }
@Explain(displayName = "order by", explainLevels = { Level.USER, Level.DEFAULT, Level.EXTENDED }) public String getOrderExplain() { if (order == null || order.getExpressions() == null) { return null; } StringBuilder builder = new StringBuilder(); for (OrderExpressionDef expression : order.getExpressions()) { if (builder.length() > 0) { builder.append(", "); } builder.append(expression.getExprNode().getExprString()); builder.append(" "); if (expression.getOrder() == PTFInvocationSpec.Order.ASC) { builder.append("ASC "); } else { builder.append("DESC "); } if (expression.getNullOrder() == PTFInvocationSpec.NullOrder.NULLS_FIRST) { builder.append("NULLS FIRST"); } else { builder.append("NULLS LAST"); } } return builder.toString(); }
public Object computeValue(Object row) throws HiveException { Object o = expressionDef.getExprEvaluator().evaluate(row); return ObjectInspectorUtils.copyToStandardObject(o, expressionDef.getOI()); }
@Override public boolean isEqual(Object v1, Object v2) { if (v1 != null && v2 != null) { long l1 = PrimitiveObjectInspectorUtils.getLong(v1, (PrimitiveObjectInspector) expressionDef.getOI()); long l2 = PrimitiveObjectInspectorUtils.getLong(v2, (PrimitiveObjectInspector) expressionDef.getOI()); return l1 == l2; } return v1 == null && v2 == null; // True if both are null } }
/** * Collect order expressions for RANGE based windowing * @throws SemanticException */ private OrderDef buildOrderExpressions(ShapeDetails inpShape, List<OrderExpression> orderExpressions) throws SemanticException { OrderDef orderDef = new OrderDef(); for (OrderExpression oe : orderExpressions) { PTFTranslator.validateNoLeadLagInValueBoundarySpec(oe.getExpression()); PTFExpressionDef exprDef = null; try { exprDef = buildExpressionDef(inpShape, oe.getExpression()); } catch (HiveException he) { throw new SemanticException(he); } PTFTranslator.validateValueBoundaryExprType(exprDef.getOI()); OrderExpressionDef orderExprDef = new OrderExpressionDef(exprDef); orderExprDef.setOrder(oe.getOrder()); orderExprDef.setNullOrder(oe.getNullOrder()); orderDef.addExpression(orderExprDef); } return orderDef; }
@Explain(displayName = "order by", explainLevels = { Level.USER, Level.DEFAULT, Level.EXTENDED }) public String getOrderExplain() { if (order == null || order.getExpressions() == null) { return null; } StringBuilder builder = new StringBuilder(); for (OrderExpressionDef expression : order.getExpressions()) { if (builder.length() > 0) { builder.append(", "); } builder.append(expression.getExprNode().getExprString()); if (expression.getOrder() == PTFInvocationSpec.Order.DESC) { builder.append("(DESC)"); } } return builder.toString(); }
public OrderDef(PartitionDef pDef) { for(PTFExpressionDef eDef : pDef.getExpressions()) { addExpression(new OrderExpressionDef(eDef)); } }
private static ExprNodeDesc[] getOrderExprNodeDescs(List<OrderExpressionDef> orderExpressions) { final int size = orderExpressions.size(); ExprNodeDesc[] exprNodeDescs = new ExprNodeDesc[size]; for (int i = 0; i < size; i++) { exprNodeDescs[i] = orderExpressions.get(i).getExprNode(); } return exprNodeDescs; }
@Override public boolean isDistanceGreater(Object v1, Object v2, int amt) { if (v1 != null && v2 != null) { double d1 = PrimitiveObjectInspectorUtils.getDouble(v1, (PrimitiveObjectInspector) expressionDef.getOI()); double d2 = PrimitiveObjectInspectorUtils.getDouble(v2, (PrimitiveObjectInspector) expressionDef.getOI()); return (d1 -d2) > amt; } return v1 != null || v2 != null; // True if only one value is null }
/** * Collect order expressions for RANGE based windowing * @throws SemanticException */ private OrderDef buildOrderExpressions(ShapeDetails inpShape, List<OrderExpression> orderExpressions) throws SemanticException { OrderDef orderDef = new OrderDef(); for (OrderExpression oe : orderExpressions) { PTFTranslator.validateNoLeadLagInValueBoundarySpec(oe.getExpression()); PTFExpressionDef exprDef = null; try { exprDef = buildExpressionDef(inpShape, oe.getExpression()); } catch (HiveException he) { throw new SemanticException(he); } PTFTranslator.validateValueBoundaryExprType(exprDef.getOI()); OrderExpressionDef orderExprDef = new OrderExpressionDef(exprDef); orderExprDef.setOrder(oe.getOrder()); orderExprDef.setNullOrder(oe.getNullOrder()); orderDef.addExpression(orderExprDef); } return orderDef; }
for (int i = 0; i < orderColList.size(); i++) { OrderExpressionDef colDef = orderColList.get(i); char orderChar = colDef.getOrder() == PTFInvocationSpec.Order.ASC ? '+' : '-'; int index = ExprNodeDescUtils.indexOf(colDef.getExprNode(), orderCols); if (index >= 0) { orderString.setCharAt(index, orderChar); continue; orderCols.add(colDef.getExprNode()); orderString.append(orderChar);
public OrderDef(PartitionDef pDef) { for(PTFExpressionDef eDef : pDef.getExpressions()) { addExpression(new OrderExpressionDef(eDef)); } }
private OrderExpressionDef translate(ShapeDetails inpShape, OrderExpression oExpr) throws SemanticException { OrderExpressionDef oexpDef = new OrderExpressionDef(); oexpDef.setOrder(oExpr.getOrder()); oexpDef.setNullOrder(oExpr.getNullOrder()); try { PTFExpressionDef expDef = buildExpressionDef(inpShape, oExpr.getExpression()); oexpDef.setExpressionTreeString(expDef.getExpressionTreeString()); oexpDef.setExprEvaluator(expDef.getExprEvaluator()); oexpDef.setExprNode(expDef.getExprNode()); oexpDef.setOI(expDef.getOI()); } catch (HiveException he) { throw new SemanticException(he); } PTFTranslator.validateComparable(oexpDef.getOI(), String.format("Partition Expression %s is not a comparable expression", oExpr.getExpression().toStringTree())); return oexpDef; }
@Explain(displayName = "order by", explainLevels = { Level.USER, Level.DEFAULT, Level.EXTENDED }) public String getOrderExplain() { if (order == null || order.getExpressions() == null) { return null; } StringBuilder builder = new StringBuilder(); for (OrderExpressionDef expression : order.getExpressions()) { if (builder.length() > 0) { builder.append(", "); } builder.append(expression.getExprNode().getExprString()); builder.append(" "); if (expression.getOrder() == PTFInvocationSpec.Order.ASC) { builder.append("ASC "); } else { builder.append("DESC "); } if (expression.getNullOrder() == PTFInvocationSpec.NullOrder.NULLS_FIRST) { builder.append("NULLS FIRST"); } else { builder.append("NULLS LAST"); } } return builder.toString(); }
@Override public boolean isDistanceGreater(Object v1, Object v2, int amt) { if (v1 != null && v2 != null) { long l1 = PrimitiveObjectInspectorUtils.getLong(v1, (PrimitiveObjectInspector) expressionDef.getOI()); long l2 = PrimitiveObjectInspectorUtils.getLong(v2, (PrimitiveObjectInspector) expressionDef.getOI()); return (l1 -l2) > amt; } return v1 != null || v2 != null; // True if only one value is null }
public Object computeValue(Object row) throws HiveException { Object o = expressionDef.getExprEvaluator().evaluate(row); return ObjectInspectorUtils.copyToStandardObject(o, expressionDef.getOI()); }
public OrderDef(PartitionDef pDef) { for(PTFExpressionDef eDef : pDef.getExpressions()) { addExpression(new OrderExpressionDef(eDef)); } }