diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java index 8b94d1d..948d4ac 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java @@ -65,7 +65,7 @@ import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils; import org.apache.hadoop.io.BytesWritable; -import org.apache.hadoop.io.IntWritable; +import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import javolution.util.FastBitSet; @@ -129,9 +129,9 @@ private transient boolean groupingSetsPresent; // generates grouping set private transient int groupingSetsPosition; // position of grouping set, generally the last of keys - private transient List groupingSets; // declared grouping set values + private transient List groupingSets; // declared grouping set values private transient FastBitSet[] groupingSetsBitSet; // bitsets acquired from grouping set values - private transient IntWritable[] newKeysGroupingSets; + private transient LongWritable[] newKeysGroupingSets; // for these positions, some variable primitive type (String) is used, so size // cannot be estimated. sample it at runtime. @@ -179,7 +179,7 @@ * @param length * @return */ - public static FastBitSet groupingSet2BitSet(int value, int length) { + public static FastBitSet groupingSet2BitSet(long value, int length) { FastBitSet bits = new FastBitSet(); for (int index = length - 1; index >= 0; index--) { if (value % 2 != 0) { @@ -230,13 +230,13 @@ protected void initializeOp(Configuration hconf) throws HiveException { if (groupingSetsPresent) { groupingSets = conf.getListGroupingSets(); groupingSetsPosition = conf.getGroupingSetPosition(); - newKeysGroupingSets = new IntWritable[groupingSets.size()]; + newKeysGroupingSets = new LongWritable[groupingSets.size()]; groupingSetsBitSet = new FastBitSet[groupingSets.size()]; int pos = 0; - for (Integer groupingSet: groupingSets) { + for (Long groupingSet: groupingSets) { // Create the mapping corresponding to the grouping set - newKeysGroupingSets[pos] = new IntWritable(groupingSet); + newKeysGroupingSets[pos] = new LongWritable(groupingSet); groupingSetsBitSet[pos] = groupingSet2BitSet(groupingSet, groupingSetsPosition); pos++; } @@ -1101,7 +1101,7 @@ public void closeOp(boolean abort) throws HiveException { Object[] keys=new Object[outputKeyLength]; int pos = conf.getGroupingSetPosition(); if (pos >= 0 && pos < outputKeyLength) { - keys[pos] = new IntWritable((1 << pos) - 1); + keys[pos] = new LongWritable((1L << pos) - 1); } forward(keys, aggregations); } else { @@ -1173,11 +1173,11 @@ public static boolean shouldEmitSummaryRow(GroupByDesc desc) { return true; } int groupingSetPosition = desc.getGroupingSetPosition(); - List listGroupingSets = desc.getListGroupingSets(); + List listGroupingSets = desc.getListGroupingSets(); // groupingSets are known at map/reducer side; but have to do real processing // hence grouppingSetsPresent is true only at map side if (groupingSetPosition >= 0 && listGroupingSets != null) { - Integer emptyGrouping = (1 << groupingSetPosition) - 1; + Long emptyGrouping = (1L << groupingSetPosition) - 1; if (listGroupingSets.contains(emptyGrouping)) { return true; } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorGroupByOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorGroupByOperator.java index 90145e5..a62d8cc 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorGroupByOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorGroupByOperator.java @@ -126,7 +126,7 @@ private transient boolean groupingSetsPresent; // The field bits (i.e. which fields to include) or "id" for each grouping set. - private transient int[] groupingSets; + private transient long[] groupingSets; // The position in the column keys of the dummy grouping set id column. private transient int groupingSetsPosition; @@ -935,13 +935,13 @@ private void setupGroupingSets() { return; } - groupingSets = ArrayUtils.toPrimitive(conf.getListGroupingSets().toArray(new Integer[0])); + groupingSets = ArrayUtils.toPrimitive(conf.getListGroupingSets().toArray(new Long[0])); groupingSetsPosition = conf.getGroupingSetPosition(); allGroupingSetsOverrideIsNulls = new boolean[groupingSets.length][]; int pos = 0; - for (int groupingSet: groupingSets) { + for (long groupingSet: groupingSets) { // Create the mapping corresponding to the grouping set diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/VirtualColumn.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/VirtualColumn.java index 0032305..7795d2f 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/VirtualColumn.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/VirtualColumn.java @@ -61,7 +61,7 @@ * set if that column has been aggregated in that row. Otherwise the * value is "0". Returns the decimal representation of the bit vector. */ - GROUPINGID("GROUPING__ID", TypeInfoFactory.intTypeInfo); + GROUPINGID("GROUPING__ID", TypeInfoFactory.longTypeInfo); public static final ImmutableSet VIRTUAL_COLUMN_NAMES = ImmutableSet.of(FILENAME.getName(), BLOCKOFFSET.getName(), ROWOFFSET.getName(), diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveGroupingID.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveGroupingID.java index adcda26..e74ff50 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveGroupingID.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveGroupingID.java @@ -33,7 +33,7 @@ private HiveGroupingID() { super(VirtualColumn.GROUPINGID.getName(), SqlKind.OTHER, - ReturnTypes.INTEGER, + ReturnTypes.BIGINT, InferTypes.BOOLEAN, OperandTypes.NILADIC, SqlFunctionCategory.SYSTEM); diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveGBOpConvUtil.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveGBOpConvUtil.java index 6f4188c..d764081 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveGBOpConvUtil.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveGBOpConvUtil.java @@ -101,7 +101,7 @@ private final List gbKeyTypes = new ArrayList(); private final List gbKeys = new ArrayList(); - private final List grpSets = new ArrayList(); + private final List grpSets = new ArrayList(); private boolean grpSetRqrAdditionalMRJob; private boolean grpIdFunctionNeeded; @@ -177,7 +177,7 @@ private static GBInfo getGBInfo(HiveAggregate aggRel, OpAttr inputOpAf, HiveConf if (aggRel.getGroupType() != Group.SIMPLE) { // 2.1 Translate Grouping set col bitset ImmutableList lstGrpSet = aggRel.getGroupSets(); - int bitmap = 0; + long bitmap = 0; for (ImmutableBitSet grpSet : lstGrpSet) { bitmap = 0; for (Integer bitIdx : grpSet.asList()) { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java index 28b4cfe..2d44d73 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java @@ -2825,7 +2825,7 @@ private AggregateCall convertGBAgg(AggInfo agg, RelNode input, List gbC } private RelNode genGBRelNode(List gbExprs, List aggInfoLst, - List groupSets, RelNode srcRel) throws SemanticException { + List groupSets, RelNode srcRel) throws SemanticException { ImmutableMap posMap = this.relToHiveColNameCalcitePosMap.get(srcRel); RexNodeConverter converter = new RexNodeConverter(this.cluster, srcRel.getRowType(), posMap, 0, false); @@ -2851,7 +2851,7 @@ private RelNode genGBRelNode(List gbExprs, List aggInfoLs if(hasGroupSets) { Set setTransformedGroupSets = new HashSet(groupSets.size()); - for(int val: groupSets) { + for(long val: groupSets) { setTransformedGroupSets.add(convert(val, groupSet.cardinality())); } // Calcite expects the grouping sets sorted and without duplicates @@ -2868,7 +2868,7 @@ private RelNode genGBRelNode(List gbExprs, List aggInfoLs // Create GroupingID column AggregateCall aggCall = AggregateCall.create(HiveGroupingID.INSTANCE, false, new ImmutableList.Builder().build(), -1, - this.cluster.getTypeFactory().createSqlType(SqlTypeName.INTEGER), + this.cluster.getTypeFactory().createSqlType(SqlTypeName.BIGINT), HiveGroupingID.INSTANCE.getName()); aggregateCalls.add(aggCall); } @@ -2887,7 +2887,7 @@ private RelNode genGBRelNode(List gbExprs, List aggInfoLs } /* This method returns the flip big-endian representation of value */ - private ImmutableBitSet convert(int value, int length) { + private ImmutableBitSet convert(long value, int length) { BitSet bits = new BitSet(); for (int index = length - 1; index >= 0; index--) { if (value % 2 != 0) { @@ -3130,7 +3130,7 @@ private RelNode genGBLogicalPlan(QB qb, RelNode srcRel) throws SemanticException // 5. GroupingSets, Cube, Rollup int groupingColsSize = gbExprNDescLst.size(); - List groupingSets = null; + List groupingSets = null; if (cubeRollupGrpSetPresent) { if (qbp.getDestRollups().contains(detsClauseName)) { groupingSets = getGroupingSetsForRollup(grpByAstExprs.size()); @@ -3183,7 +3183,7 @@ private RelNode genGBLogicalPlan(QB qb, RelNode srcRel) throws SemanticException groupByOutputRowResolver.put(null, VirtualColumn.GROUPINGID.getName(), new ColumnInfo( field, - TypeInfoFactory.intTypeInfo, + VirtualColumn.GROUPINGID.getTypeInfo(), null, true)); } 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 10fe6fc..7909fcd 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 @@ -247,6 +247,7 @@ import com.google.common.base.Strings; import com.google.common.collect.Sets; import com.google.common.math.IntMath; +import com.google.common.math.LongMath; /** * Implementation of the semantic analyzer. It generates the query plan. @@ -3969,18 +3970,18 @@ private Operator genScriptPlan(ASTNode trfm, QB qb, Operator input) } } - protected List getGroupingSetsForRollup(int size) { - List groupingSetKeys = new ArrayList(); + protected List getGroupingSetsForRollup(int size) { + List groupingSetKeys = new ArrayList(); for (int i = 0; i <= size; i++) { - groupingSetKeys.add((1 << i) - 1); + groupingSetKeys.add((1L << i) - 1); } return groupingSetKeys; } - protected List getGroupingSetsForCube(int size) { - int count = 1 << size; - List results = new ArrayList(count); - for (int i = 0; i < count; ++i) { + protected List getGroupingSetsForCube(int size) { + long count = 1L << size; + List results = new ArrayList(); + for (long i = 0; i < count; ++i) { results.add(i); } return results; @@ -3989,9 +3990,9 @@ private Operator genScriptPlan(ASTNode trfm, QB qb, Operator input) // This function returns the grouping sets along with the grouping expressions // Even if rollups and cubes are present in the query, they are converted to // grouping sets at this point - private ObjectPair, List> getGroupByGroupingSetsForClause( + private ObjectPair, List> getGroupByGroupingSetsForClause( QBParseInfo parseInfo, String dest) throws SemanticException { - List groupingSets = new ArrayList(); + List groupingSets = new ArrayList(); List groupByExprs = getGroupByForClause(parseInfo, dest); if (parseInfo.getDestRollups().contains(dest)) { groupingSets = getGroupingSetsForRollup(groupByExprs.size()); @@ -4001,10 +4002,10 @@ private Operator genScriptPlan(ASTNode trfm, QB qb, Operator input) groupingSets = getGroupingSets(groupByExprs, parseInfo, dest); } - return new ObjectPair, List>(groupByExprs, groupingSets); + return new ObjectPair, List>(groupByExprs, groupingSets); } - protected List getGroupingSets(List groupByExpr, QBParseInfo parseInfo, + protected List getGroupingSets(List groupByExpr, QBParseInfo parseInfo, String dest) throws SemanticException { Map exprPos = new HashMap(); for (int i = 0; i < groupByExpr.size(); ++i) { @@ -4013,14 +4014,14 @@ private Operator genScriptPlan(ASTNode trfm, QB qb, Operator input) } ASTNode root = parseInfo.getGroupByForClause(dest); - List result = new ArrayList(root == null ? 0 : root.getChildCount()); + List result = new ArrayList(root == null ? 0 : root.getChildCount()); if (root != null) { for (int i = 0; i < root.getChildCount(); ++i) { ASTNode child = (ASTNode) root.getChild(i); if (child.getType() != HiveParser.TOK_GROUPING_SETS_EXPRESSION) { continue; } - int bitmap = IntMath.pow(2, groupByExpr.size()) - 1; + long bitmap = LongMath.pow(2, groupByExpr.size()) - 1; for (int j = 0; j < child.getChildCount(); ++j) { String treeAsString = child.getChild(j).toStringTree(); Integer pos = exprPos.get(treeAsString); @@ -4041,20 +4042,20 @@ private Operator genScriptPlan(ASTNode trfm, QB qb, Operator input) return result; } - private boolean checkForEmptyGroupingSets(List bitmaps, int groupingIdAllSet) { + private boolean checkForEmptyGroupingSets(List bitmaps, int groupingIdAllSet) { boolean ret = true; - for (int mask : bitmaps) { + for (long mask : bitmaps) { ret &= mask == groupingIdAllSet; } return ret; } - public static int setBit(int bitmap, int bitIdx) { - return bitmap | (1 << bitIdx); + public static long setBit(long bitmap, int bitIdx) { + return bitmap | (1L << bitIdx); } - public static int unsetBit(int bitmap, int bitIdx) { - return bitmap & ~(1 << bitIdx); + public static long unsetBit(long bitmap, int bitIdx) { + return bitmap & ~(1L << bitIdx); } /** @@ -4913,7 +4914,7 @@ private void addGroupingSetKey(List groupByKeys, // For grouping sets, add a dummy grouping key String groupingSetColumnName = groupByInputRowResolver.get(null, VirtualColumn.GROUPINGID.getName()).getInternalName(); - ExprNodeDesc inputExpr = new ExprNodeColumnDesc(TypeInfoFactory.intTypeInfo, + ExprNodeDesc inputExpr = new ExprNodeColumnDesc(VirtualColumn.GROUPINGID.getTypeInfo(), groupingSetColumnName, null, false); groupByKeys.add(inputExpr); @@ -4922,7 +4923,7 @@ private void addGroupingSetKey(List groupByKeys, groupByOutputRowResolver.put(null, VirtualColumn.GROUPINGID.getName(), new ColumnInfo( field, - TypeInfoFactory.intTypeInfo, + VirtualColumn.GROUPINGID.getTypeInfo(), null, true)); colExprMap.put(field, groupByKeys.get(groupByKeys.size() - 1)); @@ -4944,7 +4945,7 @@ private void processGroupingSetReduceSinkOperator(RowResolver reduceSinkInputRow // add a key for reduce sink String groupingSetColumnName = reduceSinkInputRowResolver.get(null, VirtualColumn.GROUPINGID.getName()).getInternalName(); - ExprNodeDesc inputExpr = new ExprNodeColumnDesc(TypeInfoFactory.intTypeInfo, + ExprNodeDesc inputExpr = new ExprNodeColumnDesc(VirtualColumn.GROUPINGID.getTypeInfo(), groupingSetColumnName, null, false); reduceKeys.add(inputExpr); @@ -4982,7 +4983,7 @@ private void processGroupingSetReduceSinkOperator(RowResolver reduceSinkInputRow private Operator genGroupByPlanGroupByOperator1(QBParseInfo parseInfo, String dest, Operator reduceSinkOperatorInfo, GroupByDesc.Mode mode, Map genericUDAFEvaluators, - List groupingSets, + List groupingSets, boolean groupingSetsPresent, boolean groupingSetsNeedAdditionalMRJob) throws SemanticException { ArrayList outputColumnNames = new ArrayList(); @@ -5176,14 +5177,14 @@ private void createNewGroupingKey(List groupByKeys, Map colExprMap) { // The value for the constant does not matter. It is replaced by the grouping set // value for the actual implementation - ExprNodeConstantDesc constant = new ExprNodeConstantDesc(0); + ExprNodeConstantDesc constant = new ExprNodeConstantDesc(VirtualColumn.GROUPINGID.getTypeInfo(), 0L); groupByKeys.add(constant); String field = getColumnInternalName(groupByKeys.size() - 1); outputColumnNames.add(field); groupByOutputRowResolver.put(null, VirtualColumn.GROUPINGID.getName(), new ColumnInfo( field, - TypeInfoFactory.intTypeInfo, + VirtualColumn.GROUPINGID.getTypeInfo(), null, true)); colExprMap.put(field, constant); @@ -5209,7 +5210,7 @@ private Operator genGroupByPlanMapGroupByOperator(QB qb, Operator inputOperatorInfo, GroupByDesc.Mode mode, Map genericUDAFEvaluators, - List groupingSetKeys, + List groupingSetKeys, boolean groupingSetsPresent) throws SemanticException { RowResolver groupByInputRowResolver = opParseCtx.get(inputOperatorInfo) @@ -5909,11 +5910,11 @@ private Operator genGroupByPlan1MR(String dest, QB qb, Operator input) QBParseInfo parseInfo = qb.getParseInfo(); int numReducers = -1; - ObjectPair, List> grpByExprsGroupingSets = + ObjectPair, List> grpByExprsGroupingSets = getGroupByGroupingSetsForClause(parseInfo, dest); List grpByExprs = grpByExprsGroupingSets.getFirst(); - List groupingSets = grpByExprsGroupingSets.getSecond(); + List groupingSets = grpByExprsGroupingSets.getSecond(); if (grpByExprs.isEmpty()) { numReducers = 1; @@ -5958,10 +5959,10 @@ private Operator genGroupByPlan1ReduceMultiGBY(List dests, QB qb, Operat List whereExpressions = new ArrayList(); for (String dest : dests) { - ObjectPair, List> grpByExprsGroupingSets = + ObjectPair, List> grpByExprsGroupingSets = getGroupByGroupingSetsForClause(parseInfo, dest); - List groupingSets = grpByExprsGroupingSets.getSecond(); + List groupingSets = grpByExprsGroupingSets.getSecond(); if (!groupingSets.isEmpty()) { throw new SemanticException(ErrorMsg.HIVE_GROUPING_SETS_AGGR_NOMAPAGGR_MULTIGBY.getMsg()); } @@ -6104,11 +6105,11 @@ private Operator genGroupByPlan2MR(String dest, QB qb, Operator input) QBParseInfo parseInfo = qb.getParseInfo(); - ObjectPair, List> grpByExprsGroupingSets = + ObjectPair, List> grpByExprsGroupingSets = getGroupByGroupingSetsForClause(parseInfo, dest); List grpByExprs = grpByExprsGroupingSets.getFirst(); - List groupingSets = grpByExprsGroupingSets.getSecond(); + List groupingSets = grpByExprsGroupingSets.getSecond(); // Grouping sets are not allowed // This restriction can be lifted in future. @@ -6300,11 +6301,11 @@ private Operator genGroupByPlanMapAggrNoSkew(String dest, QB qb, Operator inputOperatorInfo) throws SemanticException { QBParseInfo parseInfo = qb.getParseInfo(); - ObjectPair, List> grpByExprsGroupingSets = + ObjectPair, List> grpByExprsGroupingSets = getGroupByGroupingSetsForClause(parseInfo, dest); List grpByExprs = grpByExprsGroupingSets.getFirst(); - List groupingSets = grpByExprsGroupingSets.getSecond(); + List groupingSets = grpByExprsGroupingSets.getSecond(); boolean groupingSetsPresent = !groupingSets.isEmpty(); int newMRJobGroupingSetsThreshold = @@ -6469,11 +6470,11 @@ private Operator genGroupByPlanMapAggr2MR(String dest, QB qb, QBParseInfo parseInfo = qb.getParseInfo(); - ObjectPair, List> grpByExprsGroupingSets = + ObjectPair, List> grpByExprsGroupingSets = getGroupByGroupingSetsForClause(parseInfo, dest); List grpByExprs = grpByExprsGroupingSets.getFirst(); - List groupingSets = grpByExprsGroupingSets.getSecond(); + List groupingSets = grpByExprsGroupingSets.getSecond(); boolean groupingSetsPresent = !groupingSets.isEmpty(); if (groupingSetsPresent) { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/GroupByDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/GroupByDesc.java index 9d4ad22..b84dd77 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/plan/GroupByDesc.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/GroupByDesc.java @@ -70,7 +70,7 @@ private boolean bucketGroup; private ArrayList keys; - private List listGroupingSets; + private List listGroupingSets; private boolean groupingSetsPresent; private int groupingSetPosition = -1; // /* in case of grouping sets; groupby1 will output values for every setgroup; this is the index of the column that information will be sent */ private ArrayList aggregators; @@ -90,7 +90,7 @@ public GroupByDesc( final ArrayList aggregators, final float groupByMemoryUsage, final float memoryThreshold, - final List listGroupingSets, + final List listGroupingSets, final boolean groupingSetsPresent, final int groupingSetsPosition, final boolean isDistinct) { @@ -107,7 +107,7 @@ public GroupByDesc( final boolean bucketGroup, final float groupByMemoryUsage, final float memoryThreshold, - final List listGroupingSets, + final List listGroupingSets, final boolean groupingSetsPresent, final int groupingSetsPosition, final boolean isDistinct) { @@ -267,11 +267,11 @@ public boolean isDistinctLike() { // in which case the group by would execute as a single map-reduce job. // For the group-by, the group by keys should be: a,b,groupingSet(for rollup), c // So, the starting position of grouping set need to be known - public List getListGroupingSets() { + public List getListGroupingSets() { return listGroupingSets; } - public void setListGroupingSets(final List listGroupingSets) { + public void setListGroupingSets(final List listGroupingSets) { this.listGroupingSets = listGroupingSets; } @@ -315,7 +315,7 @@ public Object clone() { keys.addAll(this.keys); ArrayList aggregators = new ArrayList<>(); aggregators.addAll(this.aggregators); - List listGroupingSets = new ArrayList<>(); + List listGroupingSets = new ArrayList<>(); listGroupingSets.addAll(this.listGroupingSets); return new GroupByDesc(this.mode, outputColumnNames, keys, aggregators, this.groupByMemoryUsage, this.memoryThreshold, listGroupingSets, this.groupingSetsPresent, diff --git a/ql/src/test/queries/clientpositive/groupingset_high_columns.q b/ql/src/test/queries/clientpositive/groupingset_high_columns.q new file mode 100644 index 0000000..e6c330c --- /dev/null +++ b/ql/src/test/queries/clientpositive/groupingset_high_columns.q @@ -0,0 +1,119 @@ +create table facts (val string); + +insert into facts values ('abcdefghijklmnopqrstuvwxyz0123456789'); + +set hive.vectorized.execution.enabled=false; +drop table groupingsets32; +drop table groupingsets33; + +create table groupingsets32 as +select +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +,count(*) as n from ( +select +substring(val,01,1) as c00, substring(val,02,1) as c01, substring(val,03,1) as c02,substring(val,04,1) as c03,substring(val,05,1) as c04,substring(val,06,1) as c05,substring(val,07,1) as c06, substring(val,08,1) as c07,substring(val,09,1) as c08,substring(val,10,1) as c09, +substring(val,11,1) as c10, substring(val,12,1) as c11, substring(val,13,1) as c12,substring(val,14,1) as c13,substring(val,15,1) as c14,substring(val,16,1) as c15,substring(val,17,1) as c16, substring(val,18,1) as c17,substring(val,19,1) as c18,substring(val,20,1) as c19, +substring(val,21,1) as c20, substring(val,22,1) as c21, substring(val,23,1) as c22,substring(val,24,1) as c23,substring(val,25,1) as c24,substring(val,26,1) as c25,substring(val,27,1) as c26, substring(val,28,1) as c27,substring(val,29,1) as c28,substring(val,30,1) as c29, +substring(val,31,1) as c30,substring(val,32,1) as c31 +from facts ) x +group by +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +grouping sets ( +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +); + +select * from groupingsets32; + +create table groupingsets33 as +select +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +,count(*) as n from ( +select +substring(val,01,1) as c00, substring(val,02,1) as c01, substring(val,03,1) as c02,substring(val,04,1) as c03,substring(val,05,1) as c04,substring(val,06,1) as c05,substring(val,07,1) as c06, substring(val,08,1) as c07,substring(val,09,1) as c08,substring(val,10,1) as c09, +substring(val,11,1) as c10, substring(val,12,1) as c11, substring(val,13,1) as c12,substring(val,14,1) as c13,substring(val,15,1) as c14,substring(val,16,1) as c15,substring(val,17,1) as c16, substring(val,18,1) as c17,substring(val,19,1) as c18,substring(val,20,1) as c19, +substring(val,21,1) as c20, substring(val,22,1) as c21, substring(val,23,1) as c22,substring(val,24,1) as c23,substring(val,25,1) as c24,substring(val,26,1) as c25,substring(val,27,1) as c26, substring(val,28,1) as c27,substring(val,29,1) as c28,substring(val,30,1) as c29, +substring(val,31,1) as c30,substring(val,32,1) as c31,substring(val,33,1) as c32 +from facts ) x +group by +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +grouping sets ( +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +) ; + +select * from groupingsets33; + +set hive.vectorized.execution.enabled=true; +drop table groupingsets32; +drop table groupingsets33; + +create table groupingsets32 as +select +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +,count(*) as n from ( +select +substring(val,01,1) as c00, substring(val,02,1) as c01, substring(val,03,1) as c02,substring(val,04,1) as c03,substring(val,05,1) as c04,substring(val,06,1) as c05,substring(val,07,1) as c06, substring(val,08,1) as c07,substring(val,09,1) as c08,substring(val,10,1) as c09, +substring(val,11,1) as c10, substring(val,12,1) as c11, substring(val,13,1) as c12,substring(val,14,1) as c13,substring(val,15,1) as c14,substring(val,16,1) as c15,substring(val,17,1) as c16, substring(val,18,1) as c17,substring(val,19,1) as c18,substring(val,20,1) as c19, +substring(val,21,1) as c20, substring(val,22,1) as c21, substring(val,23,1) as c22,substring(val,24,1) as c23,substring(val,25,1) as c24,substring(val,26,1) as c25,substring(val,27,1) as c26, substring(val,28,1) as c27,substring(val,29,1) as c28,substring(val,30,1) as c29, +substring(val,31,1) as c30,substring(val,32,1) as c31 +from facts ) x +group by +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +grouping sets ( +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +); + +select * from groupingsets32; + +create table groupingsets33 as +select +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +,count(*) as n from ( +select +substring(val,01,1) as c00, substring(val,02,1) as c01, substring(val,03,1) as c02,substring(val,04,1) as c03,substring(val,05,1) as c04,substring(val,06,1) as c05,substring(val,07,1) as c06, substring(val,08,1) as c07,substring(val,09,1) as c08,substring(val,10,1) as c09, +substring(val,11,1) as c10, substring(val,12,1) as c11, substring(val,13,1) as c12,substring(val,14,1) as c13,substring(val,15,1) as c14,substring(val,16,1) as c15,substring(val,17,1) as c16, substring(val,18,1) as c17,substring(val,19,1) as c18,substring(val,20,1) as c19, +substring(val,21,1) as c20, substring(val,22,1) as c21, substring(val,23,1) as c22,substring(val,24,1) as c23,substring(val,25,1) as c24,substring(val,26,1) as c25,substring(val,27,1) as c26, substring(val,28,1) as c27,substring(val,29,1) as c28,substring(val,30,1) as c29, +substring(val,31,1) as c30,substring(val,32,1) as c31,substring(val,33,1) as c32 +from facts ) x +group by +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +grouping sets ( +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +) ; + +select * from groupingsets33; diff --git a/ql/src/test/results/clientpositive/groupingset_high_columns.q.out b/ql/src/test/results/clientpositive/groupingset_high_columns.q.out new file mode 100644 index 0000000..3a1e86d --- /dev/null +++ b/ql/src/test/results/clientpositive/groupingset_high_columns.q.out @@ -0,0 +1,559 @@ +PREHOOK: query: create table facts (val string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@facts +POSTHOOK: query: create table facts (val string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@facts +PREHOOK: query: insert into facts values ('abcdefghijklmnopqrstuvwxyz0123456789') +PREHOOK: type: QUERY +PREHOOK: Output: default@facts +POSTHOOK: query: insert into facts values ('abcdefghijklmnopqrstuvwxyz0123456789') +POSTHOOK: type: QUERY +POSTHOOK: Output: default@facts +POSTHOOK: Lineage: facts.val SIMPLE [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, type:string, comment:), ] +PREHOOK: query: drop table groupingsets32 +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table groupingsets32 +POSTHOOK: type: DROPTABLE +PREHOOK: query: drop table groupingsets33 +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table groupingsets33 +POSTHOOK: type: DROPTABLE +PREHOOK: query: create table groupingsets32 as +select +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +,count(*) as n from ( +select +substring(val,01,1) as c00, substring(val,02,1) as c01, substring(val,03,1) as c02,substring(val,04,1) as c03,substring(val,05,1) as c04,substring(val,06,1) as c05,substring(val,07,1) as c06, substring(val,08,1) as c07,substring(val,09,1) as c08,substring(val,10,1) as c09, +substring(val,11,1) as c10, substring(val,12,1) as c11, substring(val,13,1) as c12,substring(val,14,1) as c13,substring(val,15,1) as c14,substring(val,16,1) as c15,substring(val,17,1) as c16, substring(val,18,1) as c17,substring(val,19,1) as c18,substring(val,20,1) as c19, +substring(val,21,1) as c20, substring(val,22,1) as c21, substring(val,23,1) as c22,substring(val,24,1) as c23,substring(val,25,1) as c24,substring(val,26,1) as c25,substring(val,27,1) as c26, substring(val,28,1) as c27,substring(val,29,1) as c28,substring(val,30,1) as c29, +substring(val,31,1) as c30,substring(val,32,1) as c31 +from facts ) x +group by +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +grouping sets ( +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +) +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@facts +PREHOOK: Output: database:default +PREHOOK: Output: default@groupingsets32 +POSTHOOK: query: create table groupingsets32 as +select +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +,count(*) as n from ( +select +substring(val,01,1) as c00, substring(val,02,1) as c01, substring(val,03,1) as c02,substring(val,04,1) as c03,substring(val,05,1) as c04,substring(val,06,1) as c05,substring(val,07,1) as c06, substring(val,08,1) as c07,substring(val,09,1) as c08,substring(val,10,1) as c09, +substring(val,11,1) as c10, substring(val,12,1) as c11, substring(val,13,1) as c12,substring(val,14,1) as c13,substring(val,15,1) as c14,substring(val,16,1) as c15,substring(val,17,1) as c16, substring(val,18,1) as c17,substring(val,19,1) as c18,substring(val,20,1) as c19, +substring(val,21,1) as c20, substring(val,22,1) as c21, substring(val,23,1) as c22,substring(val,24,1) as c23,substring(val,25,1) as c24,substring(val,26,1) as c25,substring(val,27,1) as c26, substring(val,28,1) as c27,substring(val,29,1) as c28,substring(val,30,1) as c29, +substring(val,31,1) as c30,substring(val,32,1) as c31 +from facts ) x +group by +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +grouping sets ( +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +) +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@facts +POSTHOOK: Output: database:default +POSTHOOK: Output: default@groupingsets32 +POSTHOOK: Lineage: groupingsets32.c00 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c01 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c02 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c03 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c04 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c05 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c06 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c07 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c08 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c09 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c10 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c11 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c12 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c13 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c14 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c15 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c16 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c17 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c18 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c19 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c20 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c21 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c22 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c23 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c24 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c25 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c26 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c27 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c28 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c29 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c30 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c31 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.n EXPRESSION [(facts)facts.null, ] +PREHOOK: query: select * from groupingsets32 +PREHOOK: type: QUERY +PREHOOK: Input: default@groupingsets32 +#### A masked pattern was here #### +POSTHOOK: query: select * from groupingsets32 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@groupingsets32 +#### A masked pattern was here #### +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 5 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 4 NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 3 NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 2 NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 0 NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL z NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL y NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL x NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL w NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL v NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL u NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL t NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL s NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL r NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL q NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL p NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL o NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL n NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL m NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL l NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL k NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL j NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL i NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL h NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL g NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL f NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL e NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL d NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL c NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL b NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +a NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +PREHOOK: query: create table groupingsets33 as +select +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +,count(*) as n from ( +select +substring(val,01,1) as c00, substring(val,02,1) as c01, substring(val,03,1) as c02,substring(val,04,1) as c03,substring(val,05,1) as c04,substring(val,06,1) as c05,substring(val,07,1) as c06, substring(val,08,1) as c07,substring(val,09,1) as c08,substring(val,10,1) as c09, +substring(val,11,1) as c10, substring(val,12,1) as c11, substring(val,13,1) as c12,substring(val,14,1) as c13,substring(val,15,1) as c14,substring(val,16,1) as c15,substring(val,17,1) as c16, substring(val,18,1) as c17,substring(val,19,1) as c18,substring(val,20,1) as c19, +substring(val,21,1) as c20, substring(val,22,1) as c21, substring(val,23,1) as c22,substring(val,24,1) as c23,substring(val,25,1) as c24,substring(val,26,1) as c25,substring(val,27,1) as c26, substring(val,28,1) as c27,substring(val,29,1) as c28,substring(val,30,1) as c29, +substring(val,31,1) as c30,substring(val,32,1) as c31,substring(val,33,1) as c32 +from facts ) x +group by +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +grouping sets ( +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +) +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@facts +PREHOOK: Output: database:default +PREHOOK: Output: default@groupingsets33 +POSTHOOK: query: create table groupingsets33 as +select +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +,count(*) as n from ( +select +substring(val,01,1) as c00, substring(val,02,1) as c01, substring(val,03,1) as c02,substring(val,04,1) as c03,substring(val,05,1) as c04,substring(val,06,1) as c05,substring(val,07,1) as c06, substring(val,08,1) as c07,substring(val,09,1) as c08,substring(val,10,1) as c09, +substring(val,11,1) as c10, substring(val,12,1) as c11, substring(val,13,1) as c12,substring(val,14,1) as c13,substring(val,15,1) as c14,substring(val,16,1) as c15,substring(val,17,1) as c16, substring(val,18,1) as c17,substring(val,19,1) as c18,substring(val,20,1) as c19, +substring(val,21,1) as c20, substring(val,22,1) as c21, substring(val,23,1) as c22,substring(val,24,1) as c23,substring(val,25,1) as c24,substring(val,26,1) as c25,substring(val,27,1) as c26, substring(val,28,1) as c27,substring(val,29,1) as c28,substring(val,30,1) as c29, +substring(val,31,1) as c30,substring(val,32,1) as c31,substring(val,33,1) as c32 +from facts ) x +group by +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +grouping sets ( +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +) +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@facts +POSTHOOK: Output: database:default +POSTHOOK: Output: default@groupingsets33 +POSTHOOK: Lineage: groupingsets33.c00 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c01 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c02 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c03 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c04 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c05 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c06 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c07 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c08 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c09 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c10 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c11 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c12 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c13 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c14 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c15 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c16 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c17 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c18 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c19 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c20 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c21 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c22 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c23 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c24 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c25 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c26 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c27 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c28 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c29 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c30 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c31 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c32 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.n EXPRESSION [(facts)facts.null, ] +PREHOOK: query: select * from groupingsets33 +PREHOOK: type: QUERY +PREHOOK: Input: default@groupingsets33 +#### A masked pattern was here #### +POSTHOOK: query: select * from groupingsets33 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@groupingsets33 +#### A masked pattern was here #### +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 6 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 5 NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 4 NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 3 NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 2 NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL z NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL y NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL x NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL w NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL v NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL u NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL t NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL s NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL r NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL q NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL p NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL o NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL n NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL m NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL l NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL k NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL j NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL i NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL h NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL g NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL f NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL e NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL d NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL c NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL b NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +a NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +PREHOOK: query: drop table groupingsets32 +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@groupingsets32 +PREHOOK: Output: default@groupingsets32 +POSTHOOK: query: drop table groupingsets32 +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@groupingsets32 +POSTHOOK: Output: default@groupingsets32 +PREHOOK: query: drop table groupingsets33 +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@groupingsets33 +PREHOOK: Output: default@groupingsets33 +POSTHOOK: query: drop table groupingsets33 +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@groupingsets33 +POSTHOOK: Output: default@groupingsets33 +PREHOOK: query: create table groupingsets32 as +select +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +,count(*) as n from ( +select +substring(val,01,1) as c00, substring(val,02,1) as c01, substring(val,03,1) as c02,substring(val,04,1) as c03,substring(val,05,1) as c04,substring(val,06,1) as c05,substring(val,07,1) as c06, substring(val,08,1) as c07,substring(val,09,1) as c08,substring(val,10,1) as c09, +substring(val,11,1) as c10, substring(val,12,1) as c11, substring(val,13,1) as c12,substring(val,14,1) as c13,substring(val,15,1) as c14,substring(val,16,1) as c15,substring(val,17,1) as c16, substring(val,18,1) as c17,substring(val,19,1) as c18,substring(val,20,1) as c19, +substring(val,21,1) as c20, substring(val,22,1) as c21, substring(val,23,1) as c22,substring(val,24,1) as c23,substring(val,25,1) as c24,substring(val,26,1) as c25,substring(val,27,1) as c26, substring(val,28,1) as c27,substring(val,29,1) as c28,substring(val,30,1) as c29, +substring(val,31,1) as c30,substring(val,32,1) as c31 +from facts ) x +group by +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +grouping sets ( +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +) +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@facts +PREHOOK: Output: database:default +PREHOOK: Output: default@groupingsets32 +POSTHOOK: query: create table groupingsets32 as +select +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +,count(*) as n from ( +select +substring(val,01,1) as c00, substring(val,02,1) as c01, substring(val,03,1) as c02,substring(val,04,1) as c03,substring(val,05,1) as c04,substring(val,06,1) as c05,substring(val,07,1) as c06, substring(val,08,1) as c07,substring(val,09,1) as c08,substring(val,10,1) as c09, +substring(val,11,1) as c10, substring(val,12,1) as c11, substring(val,13,1) as c12,substring(val,14,1) as c13,substring(val,15,1) as c14,substring(val,16,1) as c15,substring(val,17,1) as c16, substring(val,18,1) as c17,substring(val,19,1) as c18,substring(val,20,1) as c19, +substring(val,21,1) as c20, substring(val,22,1) as c21, substring(val,23,1) as c22,substring(val,24,1) as c23,substring(val,25,1) as c24,substring(val,26,1) as c25,substring(val,27,1) as c26, substring(val,28,1) as c27,substring(val,29,1) as c28,substring(val,30,1) as c29, +substring(val,31,1) as c30,substring(val,32,1) as c31 +from facts ) x +group by +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +grouping sets ( +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31 +) +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@facts +POSTHOOK: Output: database:default +POSTHOOK: Output: default@groupingsets32 +POSTHOOK: Lineage: groupingsets32.c00 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c01 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c02 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c03 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c04 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c05 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c06 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c07 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c08 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c09 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c10 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c11 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c12 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c13 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c14 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c15 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c16 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c17 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c18 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c19 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c20 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c21 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c22 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c23 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c24 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c25 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c26 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c27 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c28 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c29 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c30 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.c31 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets32.n EXPRESSION [(facts)facts.null, ] +PREHOOK: query: select * from groupingsets32 +PREHOOK: type: QUERY +PREHOOK: Input: default@groupingsets32 +#### A masked pattern was here #### +POSTHOOK: query: select * from groupingsets32 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@groupingsets32 +#### A masked pattern was here #### +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 5 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 4 NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 3 NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 2 NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 0 NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL z NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL y NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL x NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL w NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL v NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL u NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL t NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL s NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL r NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL q NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL p NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL o NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL n NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL m NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL l NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL k NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL j NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL i NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL h NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL g NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL f NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL e NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL d NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL c NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL b NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +a NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +PREHOOK: query: create table groupingsets33 as +select +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +,count(*) as n from ( +select +substring(val,01,1) as c00, substring(val,02,1) as c01, substring(val,03,1) as c02,substring(val,04,1) as c03,substring(val,05,1) as c04,substring(val,06,1) as c05,substring(val,07,1) as c06, substring(val,08,1) as c07,substring(val,09,1) as c08,substring(val,10,1) as c09, +substring(val,11,1) as c10, substring(val,12,1) as c11, substring(val,13,1) as c12,substring(val,14,1) as c13,substring(val,15,1) as c14,substring(val,16,1) as c15,substring(val,17,1) as c16, substring(val,18,1) as c17,substring(val,19,1) as c18,substring(val,20,1) as c19, +substring(val,21,1) as c20, substring(val,22,1) as c21, substring(val,23,1) as c22,substring(val,24,1) as c23,substring(val,25,1) as c24,substring(val,26,1) as c25,substring(val,27,1) as c26, substring(val,28,1) as c27,substring(val,29,1) as c28,substring(val,30,1) as c29, +substring(val,31,1) as c30,substring(val,32,1) as c31,substring(val,33,1) as c32 +from facts ) x +group by +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +grouping sets ( +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +) +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@facts +PREHOOK: Output: database:default +PREHOOK: Output: default@groupingsets33 +POSTHOOK: query: create table groupingsets33 as +select +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +,count(*) as n from ( +select +substring(val,01,1) as c00, substring(val,02,1) as c01, substring(val,03,1) as c02,substring(val,04,1) as c03,substring(val,05,1) as c04,substring(val,06,1) as c05,substring(val,07,1) as c06, substring(val,08,1) as c07,substring(val,09,1) as c08,substring(val,10,1) as c09, +substring(val,11,1) as c10, substring(val,12,1) as c11, substring(val,13,1) as c12,substring(val,14,1) as c13,substring(val,15,1) as c14,substring(val,16,1) as c15,substring(val,17,1) as c16, substring(val,18,1) as c17,substring(val,19,1) as c18,substring(val,20,1) as c19, +substring(val,21,1) as c20, substring(val,22,1) as c21, substring(val,23,1) as c22,substring(val,24,1) as c23,substring(val,25,1) as c24,substring(val,26,1) as c25,substring(val,27,1) as c26, substring(val,28,1) as c27,substring(val,29,1) as c28,substring(val,30,1) as c29, +substring(val,31,1) as c30,substring(val,32,1) as c31,substring(val,33,1) as c32 +from facts ) x +group by +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +grouping sets ( +c00,c01,c02,c03,c04,c05,c06,c07,c08,c09, +c10,c11,c12,c13,c14,c15,c16,c17,c18,c19, +c20,c21,c22,c23,c24,c25,c26,c27,c28,c29, +c30,c31,c32 +) +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@facts +POSTHOOK: Output: database:default +POSTHOOK: Output: default@groupingsets33 +POSTHOOK: Lineage: groupingsets33.c00 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c01 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c02 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c03 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c04 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c05 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c06 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c07 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c08 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c09 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c10 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c11 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c12 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c13 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c14 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c15 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c16 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c17 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c18 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c19 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c20 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c21 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c22 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c23 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c24 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c25 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c26 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c27 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c28 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c29 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c30 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c31 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.c32 EXPRESSION [(facts)facts.FieldSchema(name:val, type:string, comment:null), ] +POSTHOOK: Lineage: groupingsets33.n EXPRESSION [(facts)facts.null, ] +PREHOOK: query: select * from groupingsets33 +PREHOOK: type: QUERY +PREHOOK: Input: default@groupingsets33 +#### A masked pattern was here #### +POSTHOOK: query: select * from groupingsets33 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@groupingsets33 +#### A masked pattern was here #### +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 6 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 5 NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 4 NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 3 NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 2 NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL z NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL y NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL x NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL w NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL v NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL u NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL t NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL s NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL r NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL q NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL p NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL o NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL n NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL m NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL l NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL k NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL NULL j NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL NULL i NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL NULL h NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL NULL g NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL NULL f NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL NULL e NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL NULL d NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL NULL c NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +NULL b NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 +a NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1