http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 6373746..f0ea4c5 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -6340,6 +6340,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { ArrayList<ExprNodeDesc> partnCols = new ArrayList<ExprNodeDesc>(); ArrayList<ExprNodeDesc> sortCols = new ArrayList<ExprNodeDesc>(); ArrayList<Integer> sortOrders = new ArrayList<Integer>(); + ArrayList<Integer> nullSortOrders = new ArrayList<Integer>(); boolean multiFileSpray = false; int numFiles = 1; int totalFiles = 1; @@ -6357,6 +6358,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { (dest_tab.getSortCols().size() > 0)) { sortCols = getSortCols(dest, qb, dest_tab, table_desc, input, true); sortOrders = getSortOrders(dest, qb, dest_tab, input); + nullSortOrders = getNullSortOrders(dest, qb, dest_tab, input); if (!enforceBucketing && !dest_tab.isIndexTable()) { throw new SemanticException(ErrorMsg.TBL_SORTED_NOT_BUCKETED.getErrorCodedMsg(dest_tab.getCompleteName())); } else { @@ -6394,8 +6396,12 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { for (int sortOrder : sortOrders) { order.append(sortOrder == BaseSemanticAnalyzer.HIVE_COLUMN_ORDER_ASC ? '+' : '-'); } - input = genReduceSinkPlan(input, partnCols, sortCols, order.toString(), maxReducers, - (AcidUtils.isAcidTable(dest_tab) ? getAcidType() : AcidUtils.Operation.NOT_ACID)); + StringBuilder nullOrder = new StringBuilder(); + for (int pos : nullSortOrders) { + nullOrder.append(pos == BaseSemanticAnalyzer.HIVE_COLUMN_NULLS_FIRST ? 'a' : 'z'); + } + input = genReduceSinkPlan(input, partnCols, sortCols, order.toString(), nullOrder.toString(), + maxReducers, (AcidUtils.isAcidTable(dest_tab) ? getAcidType() : AcidUtils.Operation.NOT_ACID)); reduceSinkOperatorsAddedByEnforceBucketingSorting.add((ReduceSinkOperator)input.getParentOperators().get(0)); ctx.setMultiFileSpray(multiFileSpray); ctx.setNumFiles(numFiles); @@ -7356,6 +7362,23 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { return orders; } + private ArrayList<Integer> getNullSortOrders(String dest, QB qb, Table tab, Operator input) + throws SemanticException { + List<Order> tabSortCols = tab.getSortCols(); + List<FieldSchema> tabCols = tab.getCols(); + + ArrayList<Integer> orders = new ArrayList<Integer>(); + for (Order sortCol : tabSortCols) { + for (FieldSchema tabCol : tabCols) { + if (sortCol.getCol().equals(tabCol.getName())) { + orders.add(sortCol.getNullOrder()); + break; + } + } + } + return orders; + } + private Operator genReduceSinkPlan(String dest, QB qb, Operator<?> input, int numReducers, boolean hasOrderBy) throws SemanticException { @@ -7396,6 +7419,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { } ArrayList<ExprNodeDesc> sortCols = new ArrayList<ExprNodeDesc>(); StringBuilder order = new StringBuilder(); + StringBuilder nullOrder = new StringBuilder(); if (sortExprs != null) { int ccount = sortExprs.getChildCount(); for (int i = 0; i < ccount; ++i) { @@ -7405,20 +7429,40 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { // SortBy ASC order.append("+"); cl = (ASTNode) cl.getChild(0); + if (cl.getType() == HiveParser.TOK_NULLS_FIRST) { + nullOrder.append("a"); + } else if (cl.getType() == HiveParser.TOK_NULLS_LAST) { + nullOrder.append("z"); + } else { + throw new SemanticException( + "Unexpected null ordering option: " + cl.getType()); + } + cl = (ASTNode) cl.getChild(0); } else if (cl.getType() == HiveParser.TOK_TABSORTCOLNAMEDESC) { // SortBy DESC order.append("-"); cl = (ASTNode) cl.getChild(0); + if (cl.getType() == HiveParser.TOK_NULLS_FIRST) { + nullOrder.append("a"); + } else if (cl.getType() == HiveParser.TOK_NULLS_LAST) { + nullOrder.append("z"); + } else { + throw new SemanticException( + "Unexpected null ordering option: " + cl.getType()); + } + cl = (ASTNode) cl.getChild(0); } else { // ClusterBy order.append("+"); + nullOrder.append("a"); } ExprNodeDesc exprNode = genExprNodeDesc(cl, inputRR); sortCols.add(exprNode); } } Operator result = genReduceSinkPlan( - input, partCols, sortCols, order.toString(), numReducers, Operation.NOT_ACID); + input, partCols, sortCols, order.toString(), nullOrder.toString(), + numReducers, Operation.NOT_ACID); if (result.getParentOperators().size() == 1 && result.getParentOperators().get(0) instanceof ReduceSinkOperator) { ((ReduceSinkOperator) result.getParentOperators().get(0)) @@ -7430,7 +7474,8 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { @SuppressWarnings("nls") private Operator genReduceSinkPlan(Operator<?> input, ArrayList<ExprNodeDesc> partitionCols, ArrayList<ExprNodeDesc> sortCols, - String sortOrder, int numReducers, AcidUtils.Operation acidOp) throws SemanticException { + String sortOrder, String nullOrder, int numReducers, AcidUtils.Operation acidOp) + throws SemanticException { RowResolver inputRR = opParseCtx.get(input).getRowResolver(); @@ -7497,7 +7542,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { dummy.setParentOperators(null); ReduceSinkDesc rsdesc = PlanUtils.getReduceSinkDesc(sortCols, valueCols, outputColumns, - false, -1, partitionCols, sortOrder, numReducers, acidOp); + false, -1, partitionCols, sortOrder, nullOrder, numReducers, acidOp); Operator interim = putOpInsertMap(OperatorFactory.getAndMakeChild(rsdesc, new RowSchema(rsRR.getColumnInfos()), input), rsRR); @@ -11552,7 +11597,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { } } for (int child_pos = 0; child_pos < orderbyNode.getChildCount(); ++child_pos) { - ASTNode colNode = (ASTNode) orderbyNode.getChild(child_pos); + ASTNode colNode = (ASTNode) orderbyNode.getChild(child_pos).getChild(0); ASTNode node = (ASTNode) colNode.getChild(0); if (node.getToken().getType() == HiveParser.Number) { if( isByPos ) { @@ -11884,13 +11929,20 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { int exprCnt = sortNode.getChildCount(); for(int i=0; i < exprCnt; i++) { OrderExpression exprSpec = new OrderExpression(); - exprSpec.setExpression((ASTNode) sortNode.getChild(i).getChild(0)); - if ( sortNode.getChild(i).getType() == HiveParser.TOK_TABSORTCOLNAMEASC ) { + ASTNode orderSpec = (ASTNode) sortNode.getChild(i); + ASTNode nullOrderSpec = (ASTNode) orderSpec.getChild(0); + exprSpec.setExpression((ASTNode) nullOrderSpec.getChild(0)); + if ( orderSpec.getType() == HiveParser.TOK_TABSORTCOLNAMEASC ) { exprSpec.setOrder(org.apache.hadoop.hive.ql.parse.PTFInvocationSpec.Order.ASC); } else { exprSpec.setOrder(org.apache.hadoop.hive.ql.parse.PTFInvocationSpec.Order.DESC); } + if ( nullOrderSpec.getType() == HiveParser.TOK_NULLS_FIRST ) { + exprSpec.setNullOrder(org.apache.hadoop.hive.ql.parse.PTFInvocationSpec.NullOrder.NULLS_FIRST); + } else { + exprSpec.setNullOrder(org.apache.hadoop.hive.ql.parse.PTFInvocationSpec.NullOrder.NULLS_LAST); + } oSpec.addExpression(exprSpec); } return oSpec; @@ -12228,7 +12280,8 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { RowResolver inputRR, ArrayList<ExprNodeDesc> partCols, ArrayList<ExprNodeDesc> orderCols, - StringBuilder orderString) throws SemanticException { + StringBuilder orderString, + StringBuilder nullOrderString) throws SemanticException { List<PTFExpressionDef> partColList = tabDef.getPartition().getExpressions(); @@ -12238,6 +12291,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { partCols.add(exprNode); orderCols.add(exprNode); orderString.append('+'); + nullOrderString.append('a'); } } @@ -12252,13 +12306,16 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { for (int i = 0; i < orderColList.size(); i++) { OrderExpressionDef colDef = orderColList.get(i); char orderChar = colDef.getOrder() == PTFInvocationSpec.Order.ASC ? '+' : '-'; + char nullOrderChar = colDef.getNullOrder() == PTFInvocationSpec.NullOrder.NULLS_FIRST ? 'a' : 'z'; int index = ExprNodeDescUtils.indexOf(colDef.getExprNode(), orderCols); if (index >= 0) { orderString.setCharAt(index, orderChar); + nullOrderString.setCharAt(index, nullOrderChar); continue; } orderCols.add(colDef.getExprNode()); orderString.append(orderChar); + nullOrderString.append(nullOrderChar); } } @@ -12301,6 +12358,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { ArrayList<ExprNodeDesc> partCols = new ArrayList<ExprNodeDesc>(); ArrayList<ExprNodeDesc> orderCols = new ArrayList<ExprNodeDesc>(); StringBuilder orderString = new StringBuilder(); + StringBuilder nullOrderString = new StringBuilder(); /* * Use the input RR of TableScanOperator in case there is no map-side @@ -12308,8 +12366,9 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { * If the parent of ReduceSinkOperator is PTFOperator, use it's * output RR. */ - buildPTFReduceSinkDetails(tabDef, rr, partCols, orderCols, orderString); - input = genReduceSinkPlan(input, partCols, orderCols, orderString.toString(), -1, Operation.NOT_ACID); + buildPTFReduceSinkDetails(tabDef, rr, partCols, orderCols, orderString, nullOrderString); + input = genReduceSinkPlan(input, partCols, orderCols, orderString.toString(), + nullOrderString.toString(), -1, Operation.NOT_ACID); } /* @@ -12367,6 +12426,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { ArrayList<ExprNodeDesc> partCols = new ArrayList<ExprNodeDesc>(); ArrayList<ExprNodeDesc> orderCols = new ArrayList<ExprNodeDesc>(); StringBuilder order = new StringBuilder(); + StringBuilder nullOrder = new StringBuilder(); for (PartitionExpression partCol : spec.getQueryPartitionSpec().getExpressions()) { ExprNodeDesc partExpr = genExprNodeDesc(partCol.getExpression(), inputRR); @@ -12374,6 +12434,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { partCols.add(partExpr); orderCols.add(partExpr); order.append('+'); + nullOrder.append('a'); } } @@ -12381,17 +12442,21 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { for (OrderExpression orderCol : spec.getQueryOrderSpec().getExpressions()) { ExprNodeDesc orderExpr = genExprNodeDesc(orderCol.getExpression(), inputRR); char orderChar = orderCol.getOrder() == PTFInvocationSpec.Order.ASC ? '+' : '-'; + char nullOrderChar = orderCol.getNullOrder() == PTFInvocationSpec.NullOrder.NULLS_FIRST ? 'a' : 'z'; int index = ExprNodeDescUtils.indexOf(orderExpr, orderCols); if (index >= 0) { order.setCharAt(index, orderChar); + nullOrder.setCharAt(index, nullOrderChar); continue; } orderCols.add(genExprNodeDesc(orderCol.getExpression(), inputRR)); order.append(orderChar); + nullOrder.append(nullOrderChar); } } - return genReduceSinkPlan(input, partCols, orderCols, order.toString(), -1, Operation.NOT_ACID); + return genReduceSinkPlan(input, partCols, orderCols, order.toString(), nullOrder.toString(), + -1, Operation.NOT_ACID); } public static ArrayList<WindowExpressionSpec> parseSelect(String selectExprStr)
http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java index 598520c..45dfd27 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java @@ -735,6 +735,8 @@ public class TypeCheckProcFactory { windowingTokens.add(HiveParser.KW_CURRENT); windowingTokens.add(HiveParser.TOK_TABSORTCOLNAMEASC); windowingTokens.add(HiveParser.TOK_TABSORTCOLNAMEDESC); + windowingTokens.add(HiveParser.TOK_NULLS_FIRST); + windowingTokens.add(HiveParser.TOK_NULLS_LAST); } protected static boolean isRedundantConversionFunction(ASTNode expr, http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java index 990a10c..ae8c77f 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java @@ -23,15 +23,12 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; -import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hive.common.JavaUtils; import org.apache.hadoop.hive.conf.HiveConf; @@ -39,7 +36,6 @@ import org.apache.hadoop.hive.conf.HiveConf.ConfVars; import org.apache.hadoop.hive.metastore.MetaStoreUtils; import org.apache.hadoop.hive.metastore.api.FieldSchema; import org.apache.hadoop.hive.ql.exec.ColumnInfo; -import org.apache.hadoop.hive.ql.exec.Operator; import org.apache.hadoop.hive.ql.exec.RowSchema; import org.apache.hadoop.hive.ql.exec.TableScanOperator; import org.apache.hadoop.hive.ql.exec.Utilities; @@ -66,8 +62,8 @@ import org.apache.hadoop.hive.serde2.Deserializer; import org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe; import org.apache.hadoop.hive.serde2.binarysortable.BinarySortableSerDe; import org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe; -import org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe; import org.apache.hadoop.hive.serde2.lazy.LazySerDeParameters; +import org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe; import org.apache.hadoop.hive.serde2.lazybinary.LazyBinarySerDe; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory; @@ -76,6 +72,8 @@ import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.mapred.SequenceFileInputFormat; import org.apache.hadoop.mapred.SequenceFileOutputFormat; import org.apache.hadoop.mapred.TextInputFormat; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * PlanUtils. @@ -392,7 +390,7 @@ public final class PlanUtils { * Generate the table descriptor for reduce key. */ public static TableDesc getReduceKeyTableDesc(List<FieldSchema> fieldSchemas, - String order) { + String order, String nullOrder) { return new TableDesc( SequenceFileInputFormat.class, SequenceFileOutputFormat.class, Utilities.makeProperties(serdeConstants.LIST_COLUMNS, MetaStoreUtils @@ -400,6 +398,7 @@ public final class PlanUtils { serdeConstants.LIST_COLUMN_TYPES, MetaStoreUtils .getColumnTypesFromFieldSchema(fieldSchemas), serdeConstants.SERIALIZATION_SORT_ORDER, order, + serdeConstants.SERIALIZATION_NULL_SORT_ORDER, nullOrder, serdeConstants.SERIALIZATION_LIB, BinarySortableSerDe.class.getName())); } @@ -414,8 +413,10 @@ public final class PlanUtils { // be broadcast (instead of partitioned). As a consequence we use // a different SerDe than in the MR mapjoin case. StringBuilder order = new StringBuilder(); + StringBuilder nullOrder = new StringBuilder(); for (FieldSchema f: fieldSchemas) { order.append("+"); + nullOrder.append("a"); } return new TableDesc( SequenceFileInputFormat.class, SequenceFileOutputFormat.class, @@ -424,6 +425,7 @@ public final class PlanUtils { serdeConstants.LIST_COLUMN_TYPES, MetaStoreUtils .getColumnTypesFromFieldSchema(fieldSchemas), serdeConstants.SERIALIZATION_SORT_ORDER, order.toString(), + serdeConstants.SERIALIZATION_NULL_SORT_ORDER, nullOrder.toString(), serdeConstants.SERIALIZATION_LIB, BinarySortableSerDe.class.getName())); } else { return new TableDesc(SequenceFileInputFormat.class, @@ -609,15 +611,15 @@ public final class PlanUtils { public static ReduceSinkDesc getReduceSinkDesc( ArrayList<ExprNodeDesc> keyCols, ArrayList<ExprNodeDesc> valueCols, List<String> outputColumnNames, boolean includeKeyCols, int tag, - ArrayList<ExprNodeDesc> partitionCols, String order, int numReducers, - AcidUtils.Operation writeType) { + ArrayList<ExprNodeDesc> partitionCols, String order, String nullOrder, + int numReducers, AcidUtils.Operation writeType) { return getReduceSinkDesc(keyCols, keyCols.size(), valueCols, new ArrayList<List<Integer>>(), includeKeyCols ? outputColumnNames.subList(0, keyCols.size()) : new ArrayList<String>(), includeKeyCols ? outputColumnNames.subList(keyCols.size(), outputColumnNames.size()) : outputColumnNames, - includeKeyCols, tag, partitionCols, order, numReducers, writeType); + includeKeyCols, tag, partitionCols, order, nullOrder, numReducers, writeType); } /** @@ -654,8 +656,8 @@ public final class PlanUtils { List<String> outputKeyColumnNames, List<String> outputValueColumnNames, boolean includeKeyCols, int tag, - ArrayList<ExprNodeDesc> partitionCols, String order, int numReducers, - AcidUtils.Operation writeType) { + ArrayList<ExprNodeDesc> partitionCols, String order, String nullOrder, + int numReducers, AcidUtils.Operation writeType) { TableDesc keyTable = null; TableDesc valueTable = null; ArrayList<String> outputKeyCols = new ArrayList<String>(); @@ -666,11 +668,14 @@ public final class PlanUtils { if (order.length() < outputKeyColumnNames.size()) { order = order + "+"; } - keyTable = getReduceKeyTableDesc(keySchema, order); + if (nullOrder.length() < outputKeyColumnNames.size()) { + nullOrder = nullOrder + "a"; + } + keyTable = getReduceKeyTableDesc(keySchema, order, nullOrder); outputKeyCols.addAll(outputKeyColumnNames); } else { keyTable = getReduceKeyTableDesc(getFieldSchemasFromColumnList( - keyCols, "reducesinkkey"),order); + keyCols, "reducesinkkey"), order, nullOrder); for (int i = 0; i < keyCols.size(); i++) { outputKeyCols.add("reducesinkkey" + i); } @@ -767,12 +772,14 @@ public final class PlanUtils { } StringBuilder order = new StringBuilder(); + StringBuilder nullOrder = new StringBuilder(); for (int i = 0; i < keyCols.size(); i++) { order.append("+"); + nullOrder.append("a"); } return getReduceSinkDesc(keyCols, numKeys, valueCols, distinctColIndices, outputKeyColumnNames, outputValueColumnNames, includeKey, tag, - partitionCols, order.toString(), numReducers, writeType); + partitionCols, order.toString(), nullOrder.toString(), numReducers, writeType); } /** http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/java/org/apache/hadoop/hive/ql/plan/ReduceSinkDesc.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/ReduceSinkDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/ReduceSinkDesc.java index 41d9ffe..d7e404c 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/plan/ReduceSinkDesc.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/ReduceSinkDesc.java @@ -22,10 +22,10 @@ import java.util.ArrayList; import java.util.EnumSet; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.apache.hadoop.hive.ql.io.AcidUtils; import org.apache.hadoop.hive.ql.plan.Explain.Level; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @@ -380,6 +380,25 @@ public class ReduceSinkDesc extends AbstractOperatorDesc { return false; } + /** + * Returns the null order in the key columns. + * + * @return null, which means default for all key columns, or a String + * of the same length as key columns, that consists of only "a" + * (null first) and "z" (null last). + */ + @Explain(displayName = "null sort order", explainLevels = { Level.EXTENDED }) + public String getNullOrder() { + return keySerializeInfo.getProperties().getProperty( + org.apache.hadoop.hive.serde.serdeConstants.SERIALIZATION_NULL_SORT_ORDER); + } + + public void setNullOrder(String nullOrderStr) { + keySerializeInfo.getProperties().setProperty( + org.apache.hadoop.hive.serde.serdeConstants.SERIALIZATION_NULL_SORT_ORDER, + nullOrderStr); + } + public List<List<Integer>> getDistinctColumnIndices() { return distinctColumnIndices; } http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/java/org/apache/hadoop/hive/ql/plan/ptf/OrderExpressionDef.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/ptf/OrderExpressionDef.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/ptf/OrderExpressionDef.java index e367d13..827911a 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/plan/ptf/OrderExpressionDef.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/ptf/OrderExpressionDef.java @@ -18,15 +18,18 @@ package org.apache.hadoop.hive.ql.plan.ptf; +import org.apache.hadoop.hive.ql.parse.PTFInvocationSpec.NullOrder; import org.apache.hadoop.hive.ql.parse.PTFInvocationSpec.Order; public class OrderExpressionDef extends PTFExpressionDef { private Order order; + private NullOrder nullOrder; public OrderExpressionDef() {} public OrderExpressionDef(PTFExpressionDef e) { super(e); order = Order.ASC; + nullOrder = NullOrder.NULLS_FIRST; } public Order getOrder() { @@ -36,5 +39,13 @@ public class OrderExpressionDef extends PTFExpressionDef { public void setOrder(Order order) { this.order = order; } -} + public NullOrder getNullOrder() { + return nullOrder; + } + + public void setNullOrder(NullOrder nullOrder) { + this.nullOrder = nullOrder; + } + +} http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/java/org/apache/hadoop/hive/ql/plan/ptf/PartitionedTableFunctionDef.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/ptf/PartitionedTableFunctionDef.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/ptf/PartitionedTableFunctionDef.java index 2a8b1c0..54b0fb8 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/plan/ptf/PartitionedTableFunctionDef.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/ptf/PartitionedTableFunctionDef.java @@ -122,8 +122,16 @@ public class PartitionedTableFunctionDef extends PTFInputDef { builder.append(", "); } builder.append(expression.getExprNode().getExprString()); - if (expression.getOrder() == PTFInvocationSpec.Order.DESC) { - builder.append("(DESC)"); + 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(); http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java index 2c076f50..2ac4039 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java @@ -27,19 +27,18 @@ import java.util.List; import java.util.Map; import org.apache.commons.lang.ArrayUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hive.common.type.HiveDecimal; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.conf.HiveConf.ConfVars; -import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hive.ql.exec.FunctionRegistry; import org.apache.hadoop.hive.ql.exec.PTFOperator; import org.apache.hadoop.hive.ql.exec.PTFPartition; -import org.apache.hadoop.hive.ql.exec.WindowFunctionInfo; import org.apache.hadoop.hive.ql.exec.PTFPartition.PTFPartitionIterator; import org.apache.hadoop.hive.ql.exec.PTFRollingPartition; +import org.apache.hadoop.hive.ql.exec.WindowFunctionInfo; import org.apache.hadoop.hive.ql.metadata.HiveException; +import org.apache.hadoop.hive.ql.parse.PTFInvocationSpec.NullOrder; import org.apache.hadoop.hive.ql.parse.PTFInvocationSpec.Order; import org.apache.hadoop.hive.ql.parse.SemanticException; import org.apache.hadoop.hive.ql.parse.WindowingSpec.BoundarySpec; @@ -62,6 +61,8 @@ import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.StructField; import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @SuppressWarnings("deprecation") public class WindowingTableFunction extends TableFunctionEvaluator { @@ -110,6 +111,7 @@ public class WindowingTableFunction extends TableFunctionEvaluator { WindowTableFunctionDef wTFnDef = (WindowTableFunctionDef) getTableDef(); Order order = wTFnDef.getOrder().getExpressions().get(0).getOrder(); + NullOrder nullOrder = wTFnDef.getOrder().getExpressions().get(0).getNullOrder(); for(WindowFunctionDef wFn : wTFnDef.getWindowFunctions()) { boolean processWindow = processWindow(wFn); @@ -121,7 +123,7 @@ public class WindowingTableFunction extends TableFunctionEvaluator { } oColumns.add((List<?>)out); } else { - oColumns.add(executeFnwithWindow(getQueryDef(), wFn, iPart, order)); + oColumns.add(executeFnwithWindow(getQueryDef(), wFn, iPart, order, nullOrder)); } } @@ -421,7 +423,7 @@ public class WindowingTableFunction extends TableFunctionEvaluator { int rowToProcess = streamingState.rollingPart.rowToProcess(wFn.getWindowFrame()); if (rowToProcess >= 0) { Range rng = getRange(wFn, rowToProcess, streamingState.rollingPart, - streamingState.order); + streamingState.order, streamingState.nullOrder); PTFPartitionIterator<Object> rItr = rng.iterator(); PTFOperator.connectLeadLagFunctionsToPartition(ptfDesc, rItr); Object out = evaluateWindowFunction(wFn, rItr); @@ -499,7 +501,7 @@ public class WindowingTableFunction extends TableFunctionEvaluator { int rowToProcess = streamingState.rollingPart.size() - numRowsRemaining; if (rowToProcess >= 0) { Range rng = getRange(wFn, rowToProcess, streamingState.rollingPart, - streamingState.order); + streamingState.order, streamingState.nullOrder); PTFPartitionIterator<Object> rItr = rng.iterator(); PTFOperator.connectLeadLagFunctionsToPartition(ptfDesc, rItr); Object out = evaluateWindowFunction(wFn, rItr); @@ -659,11 +661,12 @@ public class WindowingTableFunction extends TableFunctionEvaluator { ArrayList<Object> executeFnwithWindow(PTFDesc ptfDesc, WindowFunctionDef wFnDef, PTFPartition iPart, - Order order) + Order order, + NullOrder nullOrder) throws HiveException { ArrayList<Object> vals = new ArrayList<Object>(); for(int i=0; i < iPart.size(); i++) { - Range rng = getRange(wFnDef, i, iPart, order); + Range rng = getRange(wFnDef, i, iPart, order, nullOrder); PTFPartitionIterator<Object> rItr = rng.iterator(); PTFOperator.connectLeadLagFunctionsToPartition(ptfDesc, rItr); Object out = evaluateWindowFunction(wFnDef, rItr); @@ -672,7 +675,7 @@ public class WindowingTableFunction extends TableFunctionEvaluator { return vals; } - private Range getRange(WindowFunctionDef wFnDef, int currRow, PTFPartition p, Order order) throws HiveException + private Range getRange(WindowFunctionDef wFnDef, int currRow, PTFPartition p, Order order, NullOrder nullOrder) throws HiveException { BoundaryDef startB = wFnDef.getWindowFrame().getStart(); BoundaryDef endB = wFnDef.getWindowFrame().getEnd(); @@ -691,10 +694,10 @@ public class WindowingTableFunction extends TableFunctionEvaluator { else { ValueBoundaryScanner vbs; if ( startB instanceof ValueBoundaryDef ) { - vbs = ValueBoundaryScanner.getScanner((ValueBoundaryDef)startB, order); + vbs = ValueBoundaryScanner.getScanner((ValueBoundaryDef)startB, order, nullOrder); } else { - vbs = ValueBoundaryScanner.getScanner((ValueBoundaryDef)endB, order); + vbs = ValueBoundaryScanner.getScanner((ValueBoundaryDef)endB, order, nullOrder); } vbs.reset(startB); start = vbs.computeStart(currRow, p); @@ -775,12 +778,14 @@ public class WindowingTableFunction extends TableFunctionEvaluator { { BoundaryDef bndDef; Order order; + NullOrder nullOrder; PTFExpressionDef expressionDef; - public ValueBoundaryScanner(BoundaryDef bndDef, Order order, PTFExpressionDef expressionDef) + public ValueBoundaryScanner(BoundaryDef bndDef, Order order, NullOrder nullOrder, PTFExpressionDef expressionDef) { this.bndDef = bndDef; this.order = order; + this.nullOrder = nullOrder; this.expressionDef = expressionDef; } @@ -1135,7 +1140,7 @@ public class WindowingTableFunction extends TableFunctionEvaluator { @SuppressWarnings("incomplete-switch") - public static ValueBoundaryScanner getScanner(ValueBoundaryDef vbDef, Order order) + public static ValueBoundaryScanner getScanner(ValueBoundaryDef vbDef, Order order, NullOrder nullOrder) throws HiveException { PrimitiveObjectInspector pOI = (PrimitiveObjectInspector) vbDef.getOI(); switch(pOI.getPrimitiveCategory()) { @@ -1144,16 +1149,16 @@ public class WindowingTableFunction extends TableFunctionEvaluator { case LONG: case SHORT: case TIMESTAMP: - return new LongValueBoundaryScanner(vbDef, order, vbDef.getExpressionDef()); + return new LongValueBoundaryScanner(vbDef, order, nullOrder, vbDef.getExpressionDef()); case DOUBLE: case FLOAT: - return new DoubleValueBoundaryScanner(vbDef, order, vbDef.getExpressionDef()); + return new DoubleValueBoundaryScanner(vbDef, order, nullOrder, vbDef.getExpressionDef()); case DECIMAL: - return new HiveDecimalValueBoundaryScanner(vbDef, order, vbDef.getExpressionDef()); + return new HiveDecimalValueBoundaryScanner(vbDef, order, nullOrder, vbDef.getExpressionDef()); case DATE: - return new DateValueBoundaryScanner(vbDef, order, vbDef.getExpressionDef()); + return new DateValueBoundaryScanner(vbDef, order, nullOrder, vbDef.getExpressionDef()); case STRING: - return new StringValueBoundaryScanner(vbDef, order, vbDef.getExpressionDef()); + return new StringValueBoundaryScanner(vbDef, order, nullOrder, vbDef.getExpressionDef()); } throw new HiveException( String.format("Internal Error: attempt to setup a Window for datatype %s", @@ -1162,9 +1167,9 @@ public class WindowingTableFunction extends TableFunctionEvaluator { } public static class LongValueBoundaryScanner extends ValueBoundaryScanner { - public LongValueBoundaryScanner(BoundaryDef bndDef, Order order, + public LongValueBoundaryScanner(BoundaryDef bndDef, Order order, NullOrder nullOrder, PTFExpressionDef expressionDef) { - super(bndDef,order,expressionDef); + super(bndDef,order,nullOrder,expressionDef); } @Override @@ -1196,8 +1201,8 @@ public class WindowingTableFunction extends TableFunctionEvaluator { public static class DoubleValueBoundaryScanner extends ValueBoundaryScanner { public DoubleValueBoundaryScanner(BoundaryDef bndDef, Order order, - PTFExpressionDef expressionDef) { - super(bndDef,order,expressionDef); + NullOrder nullOrder, PTFExpressionDef expressionDef) { + super(bndDef,order,nullOrder,expressionDef); } @Override @@ -1229,8 +1234,8 @@ public class WindowingTableFunction extends TableFunctionEvaluator { public static class HiveDecimalValueBoundaryScanner extends ValueBoundaryScanner { public HiveDecimalValueBoundaryScanner(BoundaryDef bndDef, Order order, - PTFExpressionDef expressionDef) { - super(bndDef,order,expressionDef); + NullOrder nullOrder, PTFExpressionDef expressionDef) { + super(bndDef,order,nullOrder,expressionDef); } @Override @@ -1262,8 +1267,8 @@ public class WindowingTableFunction extends TableFunctionEvaluator { public static class DateValueBoundaryScanner extends ValueBoundaryScanner { public DateValueBoundaryScanner(BoundaryDef bndDef, Order order, - PTFExpressionDef expressionDef) { - super(bndDef,order,expressionDef); + NullOrder nullOrder, PTFExpressionDef expressionDef) { + super(bndDef,order,nullOrder,expressionDef); } @Override @@ -1290,8 +1295,8 @@ public class WindowingTableFunction extends TableFunctionEvaluator { public static class StringValueBoundaryScanner extends ValueBoundaryScanner { public StringValueBoundaryScanner(BoundaryDef bndDef, Order order, - PTFExpressionDef expressionDef) { - super(bndDef,order,expressionDef); + NullOrder nullOrder, PTFExpressionDef expressionDef) { + super(bndDef,order,nullOrder,expressionDef); } @Override @@ -1347,6 +1352,7 @@ public class WindowingTableFunction extends TableFunctionEvaluator { int[] wFnsToProcess; WindowTableFunctionDef wTFnDef; Order order; + NullOrder nullOrder; PTFDesc ptfDesc; StructObjectInspector inputOI; AggregationBuffer[] aggBuffers; @@ -1362,6 +1368,7 @@ public class WindowingTableFunction extends TableFunctionEvaluator { this.currIdx = 0; wTFnDef = (WindowTableFunctionDef) getTableDef(); order = wTFnDef.getOrder().getExpressions().get(0).getOrder(); + nullOrder = wTFnDef.getOrder().getExpressions().get(0).getNullOrder(); ptfDesc = getQueryDef(); inputOI = iPart.getOutputOI(); @@ -1416,7 +1423,7 @@ public class WindowingTableFunction extends TableFunctionEvaluator { out = ObjectInspectorUtils.copyToStandardObject(out, wFn.getOI()); output.set(j, out); } else { - Range rng = getRange(wFn, currIdx, iPart, order); + Range rng = getRange(wFn, currIdx, iPart, order, nullOrder); PTFPartitionIterator<Object> rItr = rng.iterator(); PTFOperator.connectLeadLagFunctionsToPartition(ptfDesc, rItr); output.set(j, evaluateWindowFunction(wFn, rItr)); @@ -1453,6 +1460,7 @@ public class WindowingTableFunction extends TableFunctionEvaluator { AggregationBuffer[] aggBuffers; Object[][] funcArgs; Order order; + NullOrder nullOrder; RankLimit rnkLimit; @SuppressWarnings("unchecked") @@ -1467,6 +1475,7 @@ public class WindowingTableFunction extends TableFunctionEvaluator { precedingSpan, followingSpan); order = tabDef.getOrder().getExpressions().get(0).getOrder(); + nullOrder = tabDef.getOrder().getExpressions().get(0).getNullOrder(); int numFns = tabDef.getWindowFunctions().size(); fnOutputs = new ArrayList[numFns]; http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/org/apache/hadoop/hive/ql/txn/compactor/TestWorker.java ---------------------------------------------------------------------- diff --git a/ql/src/test/org/apache/hadoop/hive/ql/txn/compactor/TestWorker.java b/ql/src/test/org/apache/hadoop/hive/ql/txn/compactor/TestWorker.java index cf7eb70..7f6430f 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/txn/compactor/TestWorker.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/txn/compactor/TestWorker.java @@ -224,7 +224,7 @@ public class TestWorker extends CompactorTest { @Test public void sortedTable() throws Exception { List<Order> sortCols = new ArrayList<Order>(1); - sortCols.add(new Order("b", 1)); + sortCols.add(new Order("b", 1, 0)); Table t = newTable("default", "st", false, new HashMap<String, String>(), sortCols, false); @@ -249,7 +249,7 @@ public class TestWorker extends CompactorTest { @Test public void sortedPartition() throws Exception { List<Order> sortCols = new ArrayList<Order>(1); - sortCols.add(new Order("b", 1)); + sortCols.add(new Order("b", 1, 0)); Table t = newTable("default", "sp", true, new HashMap<String, String>(), sortCols, false); Partition p = newPartition(t, "today", sortCols); http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/queries/clientpositive/keyword_3.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientpositive/keyword_3.q b/ql/src/test/queries/clientpositive/keyword_3.q new file mode 100644 index 0000000..098d0f9 --- /dev/null +++ b/ql/src/test/queries/clientpositive/keyword_3.q @@ -0,0 +1,8 @@ +drop table NULLS; + +create table NULLS (LAST string); + +insert overwrite table NULLS + select key from src where key = '238' limit 1; + +select LAST from NULLS; http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/queries/clientpositive/order_null.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientpositive/order_null.q b/ql/src/test/queries/clientpositive/order_null.q new file mode 100644 index 0000000..ea833e0 --- /dev/null +++ b/ql/src/test/queries/clientpositive/order_null.q @@ -0,0 +1,29 @@ +create table src_null (a int, b string); +insert into src_null values (1, 'A'); +insert into src_null values (null, null); +insert into src_null values (3, null); +insert into src_null values (2, null); +insert into src_null values (2, 'A'); +insert into src_null values (2, 'B'); + +SELECT x.* FROM src_null x ORDER BY a asc; + +SELECT x.* FROM src_null x ORDER BY a desc; + +SELECT x.* FROM src_null x ORDER BY b asc, a asc nulls last; + +SELECT x.* FROM src_null x ORDER BY b desc, a asc; + +SELECT x.* FROM src_null x ORDER BY a asc nulls first; + +SELECT x.* FROM src_null x ORDER BY a desc nulls first; + +SELECT x.* FROM src_null x ORDER BY b asc nulls last, a; + +SELECT x.* FROM src_null x ORDER BY b desc nulls last, a; + +SELECT x.* FROM src_null x ORDER BY a asc nulls last, b desc; + +SELECT x.* FROM src_null x ORDER BY b desc nulls last, a desc nulls last; + +SELECT x.* FROM src_null x ORDER BY b asc nulls first, a asc nulls last; http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/queries/clientpositive/windowing_order_null.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientpositive/windowing_order_null.q b/ql/src/test/queries/clientpositive/windowing_order_null.q new file mode 100644 index 0000000..6d8ece0 --- /dev/null +++ b/ql/src/test/queries/clientpositive/windowing_order_null.q @@ -0,0 +1,35 @@ +drop table over10k; + +create table over10k( + t tinyint, + si smallint, + i int, + b bigint, + f float, + d double, + bo boolean, + s string, + ts timestamp, + dec decimal, + bin binary) + row format delimited + fields terminated by '|'; + +load data local inpath '../../data/files/over10k' into table over10k; +load data local inpath '../../data/files/over4_null' into table over10k; + +select i, s, b, sum(b) over (partition by i order by s nulls last,b rows unbounded preceding) from over10k limit 10; + +select d, s, f, sum(f) over (partition by d order by s,f desc nulls first rows unbounded preceding) from over10k limit 10; + +select ts, s, f, sum(f) over (partition by ts order by f asc nulls first range between current row and unbounded following) from over10k limit 10; + +select t, s, d, avg(d) over (partition by t order by s,d desc nulls first rows between 5 preceding and 5 following) from over10k limit 10; + +select ts, s, sum(i) over(partition by ts order by s nulls last) from over10k limit 10 offset 3; + +select s, i, round(sum(d) over (partition by s order by i desc nulls last) , 3) from over10k limit 5; + +select s, i, round(avg(d) over (partition by s order by i desc nulls last) / 10.0 , 3) from over10k limit 5; + +select s, i, round((avg(d) over w1 + 10.0) - (avg(d) over w1 - 10.0),3) from over10k window w1 as (partition by s order by i nulls last) limit 5; http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/alter_numbuckets_partitioned_table2_h23.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/alter_numbuckets_partitioned_table2_h23.q.out b/ql/src/test/results/clientpositive/alter_numbuckets_partitioned_table2_h23.q.out index 3b71598..9eea7f7 100644 --- a/ql/src/test/results/clientpositive/alter_numbuckets_partitioned_table2_h23.q.out +++ b/ql/src/test/results/clientpositive/alter_numbuckets_partitioned_table2_h23.q.out @@ -232,7 +232,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 8 Bucket Columns: [key] -Sort Columns: [Order(col:key, order:0)] +Sort Columns: [Order(col:key, order:0, nullOrder:1)] Storage Desc Params: serialization.format 1 PREHOOK: query: INSERT OVERWRITE TABLE tst1 PARTITION (ds = '1') SELECT key, value FROM src @@ -281,7 +281,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 8 Bucket Columns: [key] -Sort Columns: [Order(col:key, order:0)] +Sort Columns: [Order(col:key, order:0, nullOrder:1)] Storage Desc Params: serialization.format 1 PREHOOK: query: -- Test changing the bucket columns @@ -326,7 +326,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 8 Bucket Columns: [value] -Sort Columns: [Order(col:key, order:0)] +Sort Columns: [Order(col:key, order:0, nullOrder:1)] Storage Desc Params: serialization.format 1 PREHOOK: query: INSERT OVERWRITE TABLE tst1 PARTITION (ds = '1') SELECT key, value FROM src @@ -375,7 +375,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 8 Bucket Columns: [value] -Sort Columns: [Order(col:key, order:0)] +Sort Columns: [Order(col:key, order:0, nullOrder:1)] Storage Desc Params: serialization.format 1 PREHOOK: query: -- Test changing the number of buckets @@ -420,7 +420,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 4 Bucket Columns: [value] -Sort Columns: [Order(col:key, order:0)] +Sort Columns: [Order(col:key, order:0, nullOrder:1)] Storage Desc Params: serialization.format 1 PREHOOK: query: INSERT OVERWRITE TABLE tst1 PARTITION (ds = '1') SELECT key, value FROM src @@ -469,7 +469,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 4 Bucket Columns: [value] -Sort Columns: [Order(col:key, order:0)] +Sort Columns: [Order(col:key, order:0, nullOrder:1)] Storage Desc Params: serialization.format 1 PREHOOK: query: -- Test changing the sort columns @@ -514,7 +514,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 4 Bucket Columns: [value] -Sort Columns: [Order(col:value, order:0)] +Sort Columns: [Order(col:value, order:0, nullOrder:1)] Storage Desc Params: serialization.format 1 PREHOOK: query: INSERT OVERWRITE TABLE tst1 PARTITION (ds = '1') SELECT key, value FROM src @@ -563,7 +563,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 4 Bucket Columns: [value] -Sort Columns: [Order(col:value, order:0)] +Sort Columns: [Order(col:value, order:0, nullOrder:1)] Storage Desc Params: serialization.format 1 PREHOOK: query: -- Test changing the sort order @@ -608,7 +608,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 4 Bucket Columns: [value] -Sort Columns: [Order(col:value, order:1)] +Sort Columns: [Order(col:value, order:1, nullOrder:0)] Storage Desc Params: serialization.format 1 PREHOOK: query: INSERT OVERWRITE TABLE tst1 PARTITION (ds = '1') SELECT key, value FROM src @@ -657,7 +657,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 4 Bucket Columns: [value] -Sort Columns: [Order(col:value, order:1)] +Sort Columns: [Order(col:value, order:1, nullOrder:0)] Storage Desc Params: serialization.format 1 PREHOOK: query: -- Test a sorted partition gets converted to unsorted http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/alter_numbuckets_partitioned_table_h23.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/alter_numbuckets_partitioned_table_h23.q.out b/ql/src/test/results/clientpositive/alter_numbuckets_partitioned_table_h23.q.out index cab3de4..af2f47a 100644 --- a/ql/src/test/results/clientpositive/alter_numbuckets_partitioned_table_h23.q.out +++ b/ql/src/test/results/clientpositive/alter_numbuckets_partitioned_table_h23.q.out @@ -408,7 +408,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 12 Bucket Columns: [key] -Sort Columns: [Order(col:key, order:1)] +Sort Columns: [Order(col:key, order:1, nullOrder:0)] Storage Desc Params: serialization.format 1 PREHOOK: query: -- Test changing sort order @@ -455,7 +455,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 12 Bucket Columns: [key] -Sort Columns: [Order(col:value, order:0)] +Sort Columns: [Order(col:value, order:0, nullOrder:1)] Storage Desc Params: serialization.format 1 PREHOOK: query: -- Test removing test order http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/alter_partition_clusterby_sortby.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/alter_partition_clusterby_sortby.q.out b/ql/src/test/results/clientpositive/alter_partition_clusterby_sortby.q.out index 184d2e4..46d5b34 100644 --- a/ql/src/test/results/clientpositive/alter_partition_clusterby_sortby.q.out +++ b/ql/src/test/results/clientpositive/alter_partition_clusterby_sortby.q.out @@ -110,7 +110,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 4 Bucket Columns: [b] -Sort Columns: [Order(col:b, order:0)] +Sort Columns: [Order(col:b, order:0, nullOrder:1)] Storage Desc Params: serialization.format 1 PREHOOK: query: -- Turn off clustering for a partition @@ -200,7 +200,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 4 Bucket Columns: [a, b] -Sort Columns: [Order(col:a, order:0), Order(col:b, order:1)] +Sort Columns: [Order(col:a, order:0, nullOrder:1), Order(col:b, order:1, nullOrder:0)] Storage Desc Params: serialization.format 1 PREHOOK: query: drop table alter_table_partition_clusterby_sortby http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/alter_partition_coltype.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/alter_partition_coltype.q.out b/ql/src/test/results/clientpositive/alter_partition_coltype.q.out index 20ef536..a184372 100644 --- a/ql/src/test/results/clientpositive/alter_partition_coltype.q.out +++ b/ql/src/test/results/clientpositive/alter_partition_coltype.q.out @@ -131,6 +131,7 @@ STAGE PLANS: outputColumnNames: _col0 Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE tag: -1 @@ -357,6 +358,7 @@ STAGE PLANS: outputColumnNames: _col0 Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE tag: -1 @@ -515,6 +517,7 @@ STAGE PLANS: outputColumnNames: _col0 Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE tag: -1 http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/alter_table_not_sorted.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/alter_table_not_sorted.q.out b/ql/src/test/results/clientpositive/alter_table_not_sorted.q.out index 6e1ec59..8a88bc4 100644 --- a/ql/src/test/results/clientpositive/alter_table_not_sorted.q.out +++ b/ql/src/test/results/clientpositive/alter_table_not_sorted.q.out @@ -34,7 +34,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 4 Bucket Columns: [a] -Sort Columns: [Order(col:a, order:1)] +Sort Columns: [Order(col:a, order:1, nullOrder:0)] Storage Desc Params: serialization.format 1 PREHOOK: query: alter table alter_table_not_sorted not sorted http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/authorization_index.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/authorization_index.q.out b/ql/src/test/results/clientpositive/authorization_index.q.out index adc02ad..a6ec998 100644 --- a/ql/src/test/results/clientpositive/authorization_index.q.out +++ b/ql/src/test/results/clientpositive/authorization_index.q.out @@ -41,7 +41,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat Compressed: No Num Buckets: -1 Bucket Columns: [] -Sort Columns: [Order(col:a, order:1)] +Sort Columns: [Order(col:a, order:1, nullOrder:0)] PREHOOK: query: alter index t1_index on t1 rebuild PREHOOK: type: ALTERINDEX_REBUILD PREHOOK: Input: default@t1 http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/auto_join_reordering_values.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/auto_join_reordering_values.q.out b/ql/src/test/results/clientpositive/auto_join_reordering_values.q.out index 22c8300..ac349a4 100644 --- a/ql/src/test/results/clientpositive/auto_join_reordering_values.q.out +++ b/ql/src/test/results/clientpositive/auto_join_reordering_values.q.out @@ -192,6 +192,7 @@ STAGE PLANS: Statistics: Num rows: 1 Data size: 36 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator key expressions: _col1 (type: string) + null sort order: a sort order: + Map-reduce partition columns: _col1 (type: string) Statistics: Num rows: 1 Data size: 36 Basic stats: COMPLETE Column stats: NONE @@ -212,6 +213,7 @@ STAGE PLANS: Statistics: Num rows: 1 Data size: 36 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator key expressions: _col0 (type: string) + null sort order: a sort order: + Map-reduce partition columns: _col0 (type: string) Statistics: Num rows: 1 Data size: 36 Basic stats: COMPLETE Column stats: NONE @@ -301,6 +303,7 @@ STAGE PLANS: GatherStats: false Reduce Output Operator key expressions: _col0 (type: int) + null sort order: a sort order: + Map-reduce partition columns: _col0 (type: int) Statistics: Num rows: 1 Data size: 39 Basic stats: COMPLETE Column stats: NONE @@ -321,6 +324,7 @@ STAGE PLANS: Statistics: Num rows: 1 Data size: 36 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator key expressions: _col0 (type: int) + null sort order: a sort order: + Map-reduce partition columns: _col0 (type: int) Statistics: Num rows: 1 Data size: 36 Basic stats: COMPLETE Column stats: NONE @@ -431,6 +435,7 @@ STAGE PLANS: GatherStats: false Reduce Output Operator key expressions: _col2 (type: int) + null sort order: a sort order: + Map-reduce partition columns: _col2 (type: int) Statistics: Num rows: 1 Data size: 42 Basic stats: COMPLETE Column stats: NONE @@ -451,6 +456,7 @@ STAGE PLANS: Statistics: Num rows: 1 Data size: 36 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator key expressions: _col0 (type: int) + null sort order: a sort order: + Map-reduce partition columns: _col0 (type: int) Statistics: Num rows: 1 Data size: 36 Basic stats: COMPLETE Column stats: NONE @@ -561,6 +567,7 @@ STAGE PLANS: GatherStats: false Reduce Output Operator key expressions: _col3 (type: int) + null sort order: a sort order: + Map-reduce partition columns: _col3 (type: int) Statistics: Num rows: 1 Data size: 46 Basic stats: COMPLETE Column stats: NONE @@ -581,6 +588,7 @@ STAGE PLANS: Statistics: Num rows: 100 Data size: 288 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator key expressions: _col0 (type: int) + null sort order: a sort order: + Map-reduce partition columns: _col0 (type: int) Statistics: Num rows: 100 Data size: 288 Basic stats: COMPLETE Column stats: NONE http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/auto_sortmerge_join_1.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/auto_sortmerge_join_1.q.out b/ql/src/test/results/clientpositive/auto_sortmerge_join_1.q.out index 3a91947..f768ea4 100644 --- a/ql/src/test/results/clientpositive/auto_sortmerge_join_1.q.out +++ b/ql/src/test/results/clientpositive/auto_sortmerge_join_1.q.out @@ -174,6 +174,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -394,6 +395,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -691,6 +693,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -1007,6 +1010,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -1208,6 +1212,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/auto_sortmerge_join_11.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/auto_sortmerge_join_11.q.out b/ql/src/test/results/clientpositive/auto_sortmerge_join_11.q.out index efdd94a..f4bbfd0 100644 --- a/ql/src/test/results/clientpositive/auto_sortmerge_join_11.q.out +++ b/ql/src/test/results/clientpositive/auto_sortmerge_join_11.q.out @@ -242,6 +242,7 @@ STAGE PLANS: outputColumnNames: _col0 Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE tag: -1 @@ -589,6 +590,7 @@ STAGE PLANS: outputColumnNames: _col0 Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE tag: -1 @@ -934,6 +936,7 @@ STAGE PLANS: outputColumnNames: _col0 Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE tag: -1 @@ -1357,6 +1360,7 @@ STAGE PLANS: outputColumnNames: _col0 Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE tag: -1 http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/auto_sortmerge_join_12.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/auto_sortmerge_join_12.q.out b/ql/src/test/results/clientpositive/auto_sortmerge_join_12.q.out index 33e2def..e5ff904 100644 --- a/ql/src/test/results/clientpositive/auto_sortmerge_join_12.q.out +++ b/ql/src/test/results/clientpositive/auto_sortmerge_join_12.q.out @@ -447,6 +447,7 @@ STAGE PLANS: outputColumnNames: _col0 Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE tag: -1 http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/auto_sortmerge_join_2.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/auto_sortmerge_join_2.q.out b/ql/src/test/results/clientpositive/auto_sortmerge_join_2.q.out index fbbe9c4..0de079d 100644 --- a/ql/src/test/results/clientpositive/auto_sortmerge_join_2.q.out +++ b/ql/src/test/results/clientpositive/auto_sortmerge_join_2.q.out @@ -154,6 +154,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -453,6 +454,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -769,6 +771,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -970,6 +973,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/auto_sortmerge_join_3.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/auto_sortmerge_join_3.q.out b/ql/src/test/results/clientpositive/auto_sortmerge_join_3.q.out index 52cea36..a161f1c 100644 --- a/ql/src/test/results/clientpositive/auto_sortmerge_join_3.q.out +++ b/ql/src/test/results/clientpositive/auto_sortmerge_join_3.q.out @@ -154,6 +154,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -328,6 +329,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -622,6 +624,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -892,6 +895,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -1093,6 +1097,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/auto_sortmerge_join_4.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/auto_sortmerge_join_4.q.out b/ql/src/test/results/clientpositive/auto_sortmerge_join_4.q.out index c50865e..3421ab1 100644 --- a/ql/src/test/results/clientpositive/auto_sortmerge_join_4.q.out +++ b/ql/src/test/results/clientpositive/auto_sortmerge_join_4.q.out @@ -170,6 +170,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -344,6 +345,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -638,6 +640,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -908,6 +911,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -1109,6 +1113,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/auto_sortmerge_join_5.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/auto_sortmerge_join_5.q.out b/ql/src/test/results/clientpositive/auto_sortmerge_join_5.q.out index 2e63698..9c2663c 100644 --- a/ql/src/test/results/clientpositive/auto_sortmerge_join_5.q.out +++ b/ql/src/test/results/clientpositive/auto_sortmerge_join_5.q.out @@ -141,6 +141,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -306,6 +307,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -504,6 +506,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -675,6 +678,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -821,6 +825,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/auto_sortmerge_join_7.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/auto_sortmerge_join_7.q.out b/ql/src/test/results/clientpositive/auto_sortmerge_join_7.q.out index 2675eca..a25db01 100644 --- a/ql/src/test/results/clientpositive/auto_sortmerge_join_7.q.out +++ b/ql/src/test/results/clientpositive/auto_sortmerge_join_7.q.out @@ -187,6 +187,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -409,6 +410,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -751,6 +753,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -1111,6 +1114,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -1357,6 +1361,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/auto_sortmerge_join_8.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/auto_sortmerge_join_8.q.out b/ql/src/test/results/clientpositive/auto_sortmerge_join_8.q.out index 9de9d73..38996a7 100644 --- a/ql/src/test/results/clientpositive/auto_sortmerge_join_8.q.out +++ b/ql/src/test/results/clientpositive/auto_sortmerge_join_8.q.out @@ -187,6 +187,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -409,6 +410,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -753,6 +755,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -1113,6 +1116,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) @@ -1359,6 +1363,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/bucket1.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/bucket1.q.out b/ql/src/test/results/clientpositive/bucket1.q.out index 9e03236..0680176 100644 --- a/ql/src/test/results/clientpositive/bucket1.q.out +++ b/ql/src/test/results/clientpositive/bucket1.q.out @@ -53,6 +53,7 @@ STAGE PLANS: outputColumnNames: _col0, _col1 Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Map-reduce partition columns: UDFToInteger(_col0) (type: int) Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/bucket2.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/bucket2.q.out b/ql/src/test/results/clientpositive/bucket2.q.out index 374b0e1..958e556 100644 --- a/ql/src/test/results/clientpositive/bucket2.q.out +++ b/ql/src/test/results/clientpositive/bucket2.q.out @@ -53,6 +53,7 @@ STAGE PLANS: outputColumnNames: _col0, _col1 Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Map-reduce partition columns: UDFToInteger(_col0) (type: int) Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/bucket3.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/bucket3.q.out b/ql/src/test/results/clientpositive/bucket3.q.out index 542bbb7..eca9ba5 100644 --- a/ql/src/test/results/clientpositive/bucket3.q.out +++ b/ql/src/test/results/clientpositive/bucket3.q.out @@ -57,6 +57,7 @@ STAGE PLANS: outputColumnNames: _col0, _col1 Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Map-reduce partition columns: UDFToInteger(_col0) (type: int) Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/bucket4.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/bucket4.q.out b/ql/src/test/results/clientpositive/bucket4.q.out index 5c7126b..dd9ef00 100644 --- a/ql/src/test/results/clientpositive/bucket4.q.out +++ b/ql/src/test/results/clientpositive/bucket4.q.out @@ -50,6 +50,7 @@ STAGE PLANS: Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator key expressions: UDFToInteger(_col0) (type: int) + null sort order: a sort order: + Map-reduce partition columns: UDFToInteger(_col0) (type: int) Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/bucket5.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/bucket5.q.out b/ql/src/test/results/clientpositive/bucket5.q.out index 46e3d54..aa47ba8 100644 --- a/ql/src/test/results/clientpositive/bucket5.q.out +++ b/ql/src/test/results/clientpositive/bucket5.q.out @@ -93,6 +93,7 @@ STAGE PLANS: Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator key expressions: UDFToInteger(_col0) (type: int) + null sort order: a sort order: + Map-reduce partition columns: UDFToInteger(_col0) (type: int) Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE @@ -239,6 +240,7 @@ STAGE PLANS: GatherStats: false Reduce Output Operator key expressions: _col0 (type: string) + null sort order: a sort order: + Map-reduce partition columns: _col0 (type: string) Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE @@ -533,7 +535,7 @@ OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 2 Bucket Columns: [key] -Sort Columns: [Order(col:key, order:1)] +Sort Columns: [Order(col:key, order:1, nullOrder:0)] Storage Desc Params: serialization.format 1 PREHOOK: query: SELECT * FROM bucketed_table TABLESAMPLE (BUCKET 1 OUT OF 2) s LIMIT 10 http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/bucket_many.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/bucket_many.q.out b/ql/src/test/results/clientpositive/bucket_many.q.out index ecd5e29..a9e2f0b 100644 --- a/ql/src/test/results/clientpositive/bucket_many.q.out +++ b/ql/src/test/results/clientpositive/bucket_many.q.out @@ -49,6 +49,7 @@ STAGE PLANS: outputColumnNames: _col0, _col1 Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Map-reduce partition columns: UDFToInteger(_col0) (type: int) Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/bucket_map_join_1.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/bucket_map_join_1.q.out b/ql/src/test/results/clientpositive/bucket_map_join_1.q.out index 5f1e9b9..05fb434 100644 --- a/ql/src/test/results/clientpositive/bucket_map_join_1.q.out +++ b/ql/src/test/results/clientpositive/bucket_map_join_1.q.out @@ -156,6 +156,7 @@ STAGE PLANS: outputColumnNames: _col0 Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE tag: -1 http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/bucket_map_join_2.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/bucket_map_join_2.q.out b/ql/src/test/results/clientpositive/bucket_map_join_2.q.out index 07958ce..1173c93 100644 --- a/ql/src/test/results/clientpositive/bucket_map_join_2.q.out +++ b/ql/src/test/results/clientpositive/bucket_map_join_2.q.out @@ -156,6 +156,7 @@ STAGE PLANS: outputColumnNames: _col0 Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE tag: -1 http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/bucketcontext_1.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/bucketcontext_1.q.out b/ql/src/test/results/clientpositive/bucketcontext_1.q.out index 8b2ebb0..78a0c8c 100644 --- a/ql/src/test/results/clientpositive/bucketcontext_1.q.out +++ b/ql/src/test/results/clientpositive/bucketcontext_1.q.out @@ -245,6 +245,7 @@ STAGE PLANS: outputColumnNames: _col0 Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE tag: -1 @@ -471,6 +472,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/bucketcontext_2.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/bucketcontext_2.q.out b/ql/src/test/results/clientpositive/bucketcontext_2.q.out index 9168ee1..bc08fd2 100644 --- a/ql/src/test/results/clientpositive/bucketcontext_2.q.out +++ b/ql/src/test/results/clientpositive/bucketcontext_2.q.out @@ -229,6 +229,7 @@ STAGE PLANS: outputColumnNames: _col0 Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE tag: -1 @@ -455,6 +456,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint) http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/test/results/clientpositive/bucketcontext_3.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/bucketcontext_3.q.out b/ql/src/test/results/clientpositive/bucketcontext_3.q.out index e9e3406..0cba2ca 100644 --- a/ql/src/test/results/clientpositive/bucketcontext_3.q.out +++ b/ql/src/test/results/clientpositive/bucketcontext_3.q.out @@ -272,6 +272,7 @@ STAGE PLANS: outputColumnNames: _col0 Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator + null sort order: sort order: Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE tag: -1 @@ -452,6 +453,7 @@ STAGE PLANS: mode: hash outputColumnNames: _col0 Reduce Output Operator + null sort order: sort order: tag: -1 value expressions: _col0 (type: bigint)
