Index: data/files/in.txt =================================================================== --- data/files/in.txt (revision 0) +++ data/files/in.txt (revision 0) @@ -0,0 +1,3 @@ +35 +48 +100100 Index: ql/src/java/org/apache/hadoop/hive/ql/exec/AbstractMapJoinOperator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/AbstractMapJoinOperator.java (revision 987381) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/AbstractMapJoinOperator.java (working copy) @@ -130,4 +130,18 @@ public int getType() { return OperatorType.MAPJOIN; } + + // returns true if there are elements in key list and all of them are null + protected boolean hasNullElements(ArrayList key) { + if (key != null && key.size() > 0) { + for (Object k : key) { + if (k != null) { + return false; + } + } + return true; + } + return false; + } + } Index: ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java (revision 987381) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java (working copy) @@ -30,6 +30,7 @@ import org.apache.hadoop.hive.ql.metadata.HiveException; import org.apache.hadoop.hive.ql.plan.JoinDesc; import org.apache.hadoop.hive.ql.plan.api.OperatorType; +import org.apache.hadoop.hive.serde2.SerDeUtils; import org.apache.hadoop.hive.serde2.objectinspector.StructField; import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; import org.apache.hadoop.io.LongWritable; @@ -86,6 +87,10 @@ // number of rows for the key in the given table int sz = storage.get(alias).size(); + StructObjectInspector soi = (StructObjectInspector) inputObjInspectors[tag]; + StructField sf = soi.getStructFieldRef(Utilities.ReduceField.KEY + .toString()); + Object keyObject = soi.getStructFieldData(row, sf); // Are we consuming too much memory if (alias == numAliases - 1 && !(handleSkewJoin && skewJoinKeyContext.currBigKeyTag >= 0)) { @@ -105,10 +110,6 @@ // operand // We won't output a warning for the last join operand since the size // will never goes to joinEmitInterval. - StructObjectInspector soi = (StructObjectInspector) inputObjInspectors[tag]; - StructField sf = soi.getStructFieldRef(Utilities.ReduceField.KEY - .toString()); - Object keyObject = soi.getStructFieldData(row, sf); LOG.warn("table " + alias + " has " + sz + " rows for join key " + keyObject); nextSz = getNextSize(nextSz); @@ -117,6 +118,11 @@ // Add the value to the vector storage.get(alias).add(nr); + // if join-key is null, process each row in different group. + if (SerDeUtils.isNullObject(keyObject, sf.getFieldObjectInspector())) { + endGroup(); + startGroup(); + } } catch (Exception e) { e.printStackTrace(); throw new HiveException(e); Index: ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java (revision 987381) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java (working copy) @@ -282,7 +282,8 @@ MapJoinObjectKey keyMap = new MapJoinObjectKey(metadataKeyTag, key); MapJoinObjectValue o = mapJoinTables.get(pos).get(keyMap); - if (o == null) { + // there is no join-value or join-key has null elements + if (o == null || (hasNullElements(key))) { if (noOuterJoin) { storage.put(pos, emptyList); } else { Index: ql/src/java/org/apache/hadoop/hive/ql/exec/SMBMapJoinOperator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/SMBMapJoinOperator.java (revision 987381) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/SMBMapJoinOperator.java (working copy) @@ -383,6 +383,15 @@ private int compareKeys (ArrayList k1, ArrayList k2) { int ret = 0; + boolean k1HasNulls = hasNullElements(k1); + boolean k2HasNulls = hasNullElements(k2); + if (k1HasNulls && k2HasNulls) { + return -1; // just return k1 is smaller than k2 + } else if (k1HasNulls) { + return (0 - k2.size()); + } else if (k2HasNulls) { + return k1.size(); + } for (int i = 0; i < k1.size() && i < k1.size(); i++) { WritableComparable key_1 = (WritableComparable) k1.get(i); WritableComparable key_2 = (WritableComparable) k2.get(i); Index: ql/src/test/queries/clientpositive/join_nulls.q =================================================================== --- ql/src/test/queries/clientpositive/join_nulls.q (revision 0) +++ ql/src/test/queries/clientpositive/join_nulls.q (revision 0) @@ -0,0 +1,68 @@ +DROP TABLE myinput1; +DROP TABLE smb_input1; +DROP TABLE smb_input2; + +CREATE TABLE myinput1(key int, value int); +LOAD DATA LOCAL INPATH '../data/files/in.txt' INTO TABLE myinput1; + +SELECT * FROM myinput1 a JOIN myinput1 b; +SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b; +SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b; +SELECT * FROM myinput1 a JOIN myinput1 b ON a.key = b.value; +SELECT * FROM myinput1 a JOIN myinput1 b ON a.key = b.key; +SELECT * FROM myinput1 a JOIN myinput1 b ON a.value = b.value; +SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.value; +SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.value = b.value; +SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.key; +SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.value; +SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.key; +SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.value = b.value; +SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.key = b.value; +SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.key = b.key; +SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.value = b.value; + +SELECT * from myinput1 a LEFT OUTER JOIN myinput1 b ON (a.value=b.value) RIGHT OUTER JOIN myinput1 c ON (b.value=c.value); +SELECT * from myinput1 a RIGHT OUTER JOIN myinput1 b ON (a.value=b.value) LEFT OUTER JOIN myinput1 c ON (b.value=c.value); +SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b RIGHT OUTER JOIN myinput1 c ON a.value = b.value and b.value = c.value; + +SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b; +SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.value; +SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.key; +SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.value = b.value; +SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.value; +SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.key; +SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.value = b.value; +SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.value; +SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.key; +SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.value = b.value; +SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.value; +SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.key; +SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.value = b.value; + +CREATE TABLE smb_input1(key int, value int) CLUSTERED BY (key) SORTED BY (key) INTO 2 BUCKETS; +CREATE TABLE smb_input2(key int, value int) CLUSTERED BY (value) SORTED BY (value) INTO 2 BUCKETS; +LOAD DATA LOCAL INPATH '../data/files/in.txt' overwrite into table smb_input1; +LOAD DATA LOCAL INPATH '../data/files/in.txt' overwrite into table smb_input2; + +SET hive.optimize.bucketmapJOIN = true; +SET hive.optimize.bucketmapJOIN.sortedmerge = true; +SET hive.input.format = org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat; + +SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a JOIN smb_input1 b ON a.key = b.key; +SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a RIGHT OUTER JOIN smb_input1 b ON a.key = b.key; +SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a JOIN smb_input1 b ON a.key = b.key; +SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a LEFT OUTER JOIN smb_input1 b ON a.key = b.key; + +SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a JOIN smb_input2 b ON a.key = b.value; +SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a JOIN smb_input2 b ON a.key = b.value; +SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a LEFT OUTER JOIN smb_input2 b ON a.key = b.value; +SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a RIGHT OUTER JOIN smb_input2 b ON a.key = b.value; + +SELECT /*+ MAPJOIN(a) */ * FROM smb_input2 a JOIN smb_input2 b ON a.value = b.value; +SELECT /*+ MAPJOIN(a) */ * FROM smb_input2 a RIGHT OUTER JOIN smb_input2 b ON a.value = b.value; +SELECT /*+ MAPJOIN(b) */ * FROM smb_input2 a JOIN smb_input2 b ON a.value = b.value; +SELECT /*+ MAPJOIN(b) */ * FROM smb_input2 a LEFT OUTER JOIN smb_input2 b ON a.value = b.value; + +DROP TABLE smb_input2; +DROP TABLE smb_input1; +DROP TABLE myinput1; Index: ql/src/test/results/clientpositive/join_nulls.q.out =================================================================== --- ql/src/test/results/clientpositive/join_nulls.q.out (revision 0) +++ ql/src/test/results/clientpositive/join_nulls.q.out (revision 0) @@ -0,0 +1,555 @@ +PREHOOK: query: DROP TABLE myinput1 +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE myinput1 +POSTHOOK: type: DROPTABLE +PREHOOK: query: DROP TABLE smb_input1 +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE smb_input1 +POSTHOOK: type: DROPTABLE +PREHOOK: query: DROP TABLE smb_input2 +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE smb_input2 +POSTHOOK: type: DROPTABLE +PREHOOK: query: CREATE TABLE myinput1(key int, value int) +PREHOOK: type: CREATETABLE +POSTHOOK: query: CREATE TABLE myinput1(key int, value int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@myinput1 +PREHOOK: query: LOAD DATA LOCAL INPATH '../data/files/in.txt' INTO TABLE myinput1 +PREHOOK: type: LOAD +POSTHOOK: query: LOAD DATA LOCAL INPATH '../data/files/in.txt' INTO TABLE myinput1 +POSTHOOK: type: LOAD +POSTHOOK: Output: default@myinput1 +PREHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-08_391_4752584526010361356/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-08_391_4752584526010361356/-mr-10000 +NULL 35 NULL 35 +NULL 35 48 NULL +NULL 35 100 100 +48 NULL NULL 35 +48 NULL 48 NULL +48 NULL 100 100 +100 100 NULL 35 +100 100 48 NULL +100 100 100 100 +PREHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-11_149_2898312826252418598/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-11_149_2898312826252418598/-mr-10000 +NULL 35 NULL 35 +NULL 35 48 NULL +NULL 35 100 100 +48 NULL NULL 35 +48 NULL 48 NULL +48 NULL 100 100 +100 100 NULL 35 +100 100 48 NULL +100 100 100 100 +PREHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-13_528_2268378384092937155/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-13_528_2268378384092937155/-mr-10000 +NULL 35 NULL 35 +NULL 35 48 NULL +NULL 35 100 100 +48 NULL NULL 35 +48 NULL 48 NULL +48 NULL 100 100 +100 100 NULL 35 +100 100 48 NULL +100 100 100 100 +PREHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b ON a.key = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-15_943_9141662590117440670/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b ON a.key = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-15_943_9141662590117440670/-mr-10000 +100 100 100 100 +PREHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b ON a.key = b.key +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-18_595_3065461188494027926/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b ON a.key = b.key +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-18_595_3065461188494027926/-mr-10000 +48 NULL 48 NULL +100 100 100 100 +PREHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b ON a.value = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-21_560_7229201863120817452/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b ON a.value = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-21_560_7229201863120817452/-mr-10000 +NULL 35 NULL 35 +100 100 100 100 +PREHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-24_297_26639726381145994/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-24_297_26639726381145994/-mr-10000 +NULL 35 NULL NULL +48 NULL NULL NULL +100 100 100 100 +PREHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.value = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-26_631_2268962972770545568/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.value = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-26_631_2268962972770545568/-mr-10000 +48 NULL NULL NULL +NULL 35 NULL 35 +100 100 100 100 +PREHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.key +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-28_973_3508925705051374168/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.key +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-28_973_3508925705051374168/-mr-10000 +NULL 35 NULL NULL +48 NULL 48 NULL +100 100 100 100 +PREHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-31_688_2095303536136296878/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-31_688_2095303536136296878/-mr-10000 +NULL NULL 48 NULL +NULL NULL NULL 35 +100 100 100 100 +PREHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.key +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-34_375_7303720855228319235/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.key +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-34_375_7303720855228319235/-mr-10000 +NULL NULL NULL 35 +48 NULL 48 NULL +100 100 100 100 +PREHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.value = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-36_902_6589859518075340441/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.value = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-36_902_6589859518075340441/-mr-10000 +NULL NULL 48 NULL +NULL 35 NULL 35 +100 100 100 100 +PREHOOK: query: SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.key = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-39_240_7645461130948886094/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.key = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-39_240_7645461130948886094/-mr-10000 +NULL 35 NULL NULL +NULL NULL 48 NULL +NULL NULL NULL 35 +48 NULL NULL NULL +100 100 100 100 +PREHOOK: query: SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.key = b.key +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-41_960_2316885948856720958/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.key = b.key +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-41_960_2316885948856720958/-mr-10000 +NULL 35 NULL NULL +NULL NULL NULL 35 +48 NULL 48 NULL +100 100 100 100 +PREHOOK: query: SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.value = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-44_998_2188762935520485341/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.value = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-44_998_2188762935520485341/-mr-10000 +48 NULL NULL NULL +NULL NULL 48 NULL +NULL 35 NULL 35 +100 100 100 100 +PREHOOK: query: SELECT * from myinput1 a LEFT OUTER JOIN myinput1 b ON (a.value=b.value) RIGHT OUTER JOIN myinput1 c ON (b.value=c.value) +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-47_365_6343807854183991495/-mr-10000 +POSTHOOK: query: SELECT * from myinput1 a LEFT OUTER JOIN myinput1 b ON (a.value=b.value) RIGHT OUTER JOIN myinput1 c ON (b.value=c.value) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-47_365_6343807854183991495/-mr-10000 +NULL NULL NULL NULL 48 NULL +NULL 35 NULL 35 NULL 35 +100 100 100 100 100 100 +PREHOOK: query: SELECT * from myinput1 a RIGHT OUTER JOIN myinput1 b ON (a.value=b.value) LEFT OUTER JOIN myinput1 c ON (b.value=c.value) +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-50_022_1548493935885940035/-mr-10000 +POSTHOOK: query: SELECT * from myinput1 a RIGHT OUTER JOIN myinput1 b ON (a.value=b.value) LEFT OUTER JOIN myinput1 c ON (b.value=c.value) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-50_022_1548493935885940035/-mr-10000 +NULL NULL 48 NULL NULL NULL +NULL 35 NULL 35 NULL 35 +100 100 100 100 100 100 +PREHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b RIGHT OUTER JOIN myinput1 c ON a.value = b.value and b.value = c.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-52_410_7339678981342635264/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b RIGHT OUTER JOIN myinput1 c ON a.value = b.value and b.value = c.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-52_410_7339678981342635264/-mr-10000 +NULL NULL NULL NULL 48 NULL +NULL 35 NULL 35 NULL 35 +100 100 100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-57_165_929592299331887710/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-57_165_929592299331887710/-mr-10000 +NULL 35 NULL 35 +48 NULL NULL 35 +100 100 NULL 35 +NULL 35 48 NULL +48 NULL 48 NULL +100 100 48 NULL +NULL 35 100 100 +48 NULL 100 100 +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-59_437_6134367402018389537/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-50-59_437_6134367402018389537/-mr-10000 +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.key +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-01_671_307952941272541935/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.key +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-01_671_307952941272541935/-mr-10000 +48 NULL 48 NULL +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.value = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-03_929_6638122364589628099/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.value = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-03_929_6638122364589628099/-mr-10000 +NULL 35 NULL 35 +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-06_166_7726105873515889452/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-06_166_7726105873515889452/-mr-10000 +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.key +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-08_324_3873857601124172513/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.key +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-08_324_3873857601124172513/-mr-10000 +48 NULL 48 NULL +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.value = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-10_513_8770247944287616774/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.value = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-10_513_8770247944287616774/-mr-10000 +NULL 35 NULL 35 +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-12_757_2929022808175320770/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-12_757_2929022808175320770/-mr-10000 +NULL 35 NULL NULL +48 NULL NULL NULL +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.key +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-15_002_2452904094005458009/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.key +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-15_002_2452904094005458009/-mr-10000 +NULL 35 NULL NULL +48 NULL 48 NULL +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.value = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-17_239_6286656808000430946/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.value = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-17_239_6286656808000430946/-mr-10000 +NULL 35 NULL 35 +48 NULL NULL NULL +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-19_480_8884329678358766434/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-19_480_8884329678358766434/-mr-10000 +NULL NULL NULL 35 +NULL NULL 48 NULL +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.key +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-21_731_3284319522293807069/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.key +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-21_731_3284319522293807069/-mr-10000 +NULL NULL NULL 35 +48 NULL 48 NULL +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.value = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-24_006_5381361324428094066/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.value = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-24_006_5381361324428094066/-mr-10000 +NULL 35 NULL 35 +NULL NULL 48 NULL +100 100 100 100 +PREHOOK: query: CREATE TABLE smb_input1(key int, value int) CLUSTERED BY (key) SORTED BY (key) INTO 2 BUCKETS +PREHOOK: type: CREATETABLE +POSTHOOK: query: CREATE TABLE smb_input1(key int, value int) CLUSTERED BY (key) SORTED BY (key) INTO 2 BUCKETS +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@smb_input1 +PREHOOK: query: CREATE TABLE smb_input2(key int, value int) CLUSTERED BY (value) SORTED BY (value) INTO 2 BUCKETS +PREHOOK: type: CREATETABLE +POSTHOOK: query: CREATE TABLE smb_input2(key int, value int) CLUSTERED BY (value) SORTED BY (value) INTO 2 BUCKETS +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@smb_input2 +PREHOOK: query: LOAD DATA LOCAL INPATH '../data/files/in.txt' overwrite into table smb_input1 +PREHOOK: type: LOAD +POSTHOOK: query: LOAD DATA LOCAL INPATH '../data/files/in.txt' overwrite into table smb_input1 +POSTHOOK: type: LOAD +POSTHOOK: Output: default@smb_input1 +PREHOOK: query: LOAD DATA LOCAL INPATH '../data/files/in.txt' overwrite into table smb_input2 +PREHOOK: type: LOAD +POSTHOOK: query: LOAD DATA LOCAL INPATH '../data/files/in.txt' overwrite into table smb_input2 +POSTHOOK: type: LOAD +POSTHOOK: Output: default@smb_input2 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a JOIN smb_input1 b ON a.key = b.key +PREHOOK: type: QUERY +PREHOOK: Input: default@smb_input1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-26_552_6000616743269340476/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a JOIN smb_input1 b ON a.key = b.key +POSTHOOK: type: QUERY +POSTHOOK: Input: default@smb_input1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-26_552_6000616743269340476/-mr-10000 +48 NULL 48 NULL +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a RIGHT OUTER JOIN smb_input1 b ON a.key = b.key +PREHOOK: type: QUERY +PREHOOK: Input: default@smb_input1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-28_743_4515079916926777454/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a RIGHT OUTER JOIN smb_input1 b ON a.key = b.key +POSTHOOK: type: QUERY +POSTHOOK: Input: default@smb_input1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-28_743_4515079916926777454/-mr-10000 +NULL NULL NULL 35 +48 NULL 48 NULL +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a JOIN smb_input1 b ON a.key = b.key +PREHOOK: type: QUERY +PREHOOK: Input: default@smb_input1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-30_953_7545141411696520010/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a JOIN smb_input1 b ON a.key = b.key +POSTHOOK: type: QUERY +POSTHOOK: Input: default@smb_input1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-30_953_7545141411696520010/-mr-10000 +48 NULL 48 NULL +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a LEFT OUTER JOIN smb_input1 b ON a.key = b.key +PREHOOK: type: QUERY +PREHOOK: Input: default@smb_input1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-33_208_3154755069618906586/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a LEFT OUTER JOIN smb_input1 b ON a.key = b.key +POSTHOOK: type: QUERY +POSTHOOK: Input: default@smb_input1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-33_208_3154755069618906586/-mr-10000 +NULL 35 NULL NULL +48 NULL 48 NULL +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a JOIN smb_input2 b ON a.key = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@smb_input2 +PREHOOK: Input: default@smb_input1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-35_442_1394929858876575394/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a JOIN smb_input2 b ON a.key = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@smb_input2 +POSTHOOK: Input: default@smb_input1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-35_442_1394929858876575394/-mr-10000 +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a JOIN smb_input2 b ON a.key = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@smb_input2 +PREHOOK: Input: default@smb_input1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-37_672_2903981770734413898/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a JOIN smb_input2 b ON a.key = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@smb_input2 +POSTHOOK: Input: default@smb_input1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-37_672_2903981770734413898/-mr-10000 +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a LEFT OUTER JOIN smb_input2 b ON a.key = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@smb_input2 +PREHOOK: Input: default@smb_input1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-39_905_6322091550769457171/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a LEFT OUTER JOIN smb_input2 b ON a.key = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@smb_input2 +POSTHOOK: Input: default@smb_input1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-39_905_6322091550769457171/-mr-10000 +NULL 35 NULL NULL +48 NULL NULL NULL +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a RIGHT OUTER JOIN smb_input2 b ON a.key = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@smb_input2 +PREHOOK: Input: default@smb_input1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-42_089_6843023658996584721/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a RIGHT OUTER JOIN smb_input2 b ON a.key = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@smb_input2 +POSTHOOK: Input: default@smb_input1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-42_089_6843023658996584721/-mr-10000 +NULL NULL NULL 35 +NULL NULL 48 NULL +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input2 a JOIN smb_input2 b ON a.value = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@smb_input2 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-44_445_4116339585517831484/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input2 a JOIN smb_input2 b ON a.value = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@smb_input2 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-44_445_4116339585517831484/-mr-10000 +NULL 35 NULL 35 +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input2 a RIGHT OUTER JOIN smb_input2 b ON a.value = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@smb_input2 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-46_673_3019436376111943495/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input2 a RIGHT OUTER JOIN smb_input2 b ON a.value = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@smb_input2 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-46_673_3019436376111943495/-mr-10000 +NULL 35 NULL 35 +NULL NULL 48 NULL +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input2 a JOIN smb_input2 b ON a.value = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@smb_input2 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-48_917_4799070244576080224/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input2 a JOIN smb_input2 b ON a.value = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@smb_input2 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-48_917_4799070244576080224/-mr-10000 +NULL 35 NULL 35 +100 100 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input2 a LEFT OUTER JOIN smb_input2 b ON a.value = b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@smb_input2 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-51_149_7419582044688340685/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input2 a LEFT OUTER JOIN smb_input2 b ON a.value = b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@smb_input2 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-08-19_23-51-51_149_7419582044688340685/-mr-10000 +NULL 35 NULL 35 +48 NULL NULL NULL +100 100 100 100 +PREHOOK: query: DROP TABLE smb_input2 +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@smb_input2 +PREHOOK: Output: default@smb_input2 +POSTHOOK: query: DROP TABLE smb_input2 +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@smb_input2 +POSTHOOK: Output: default@smb_input2 +PREHOOK: query: DROP TABLE smb_input1 +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@smb_input1 +PREHOOK: Output: default@smb_input1 +POSTHOOK: query: DROP TABLE smb_input1 +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@smb_input1 +POSTHOOK: Output: default@smb_input1 +PREHOOK: query: DROP TABLE myinput1 +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@myinput1 +PREHOOK: Output: default@myinput1 +POSTHOOK: query: DROP TABLE myinput1 +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: default@myinput1 Index: serde/src/java/org/apache/hadoop/hive/serde2/SerDeUtils.java =================================================================== --- serde/src/java/org/apache/hadoop/hive/serde2/SerDeUtils.java (revision 987381) +++ serde/src/java/org/apache/hadoop/hive/serde2/SerDeUtils.java (working copy) @@ -331,6 +331,92 @@ } } + /** + * True if Object passed is representing null object. + * + * @param o The object + * @param oi The ObjectInspector + * + * @return true if the object passed is representing NULL object + * false otherwise + */ + public static boolean isNullObject(Object o, ObjectInspector oi) { + switch (oi.getCategory()) { + case PRIMITIVE: { + if (o == null) { + return true; + } + return false; + } + case LIST: { + ListObjectInspector loi = (ListObjectInspector) oi; + ObjectInspector listElementObjectInspector = loi + .getListElementObjectInspector(); + List olist = loi.getList(o); + if (olist == null) { + return true; + } else { + // there are no elements in the list + if (olist.size() == 0) { + return false; + } + // if all the elements are representing null, then return true + for (int i = 0; i < olist.size(); i++) { + if (!isNullObject(olist.get(i), listElementObjectInspector)) { + return false; + } + } + return false; + } + } + case MAP: { + MapObjectInspector moi = (MapObjectInspector) oi; + ObjectInspector mapKeyObjectInspector = moi.getMapKeyObjectInspector(); + ObjectInspector mapValueObjectInspector = moi + .getMapValueObjectInspector(); + Map omap = moi.getMap(o); + if (omap == null) { + return true; + } else { + // there are no elements in the map + if (omap.entrySet().size() == 0) { + return false; + } + // if all the entries of map are representing null, then return true + for (Map.Entry entry : omap.entrySet()) { + if (!isNullObject(entry.getKey(), mapKeyObjectInspector) + || !isNullObject(entry.getValue(), mapValueObjectInspector)) { + return false; + } + } + return true; + } + } + case STRUCT: { + StructObjectInspector soi = (StructObjectInspector) oi; + List structFields = soi.getAllStructFieldRefs(); + if (o == null) { + return true; + } else { + // there are no fields in the struct + if (structFields.size() == 0) { + return false; + } + // if all the fields of struct are representing null, then return true + for (int i = 0; i < structFields.size(); i++) { + if (!isNullObject(soi.getStructFieldData(o, structFields.get(i)), + structFields.get(i).getFieldObjectInspector())) { + return false; + } + } + return true; + } + } + default: + throw new RuntimeException("Unknown type in ObjectInspector!"); + } + } + private SerDeUtils() { // prevent instantiation }