Index: data/files/in5.txt =================================================================== --- data/files/in5.txt (revision 0) +++ data/files/in5.txt (revision 0) @@ -0,0 +1,19 @@ +51000566 +151001566 +201002066 +251002588 +301003066 +351003588 +401004066 +401004088 +501005088 +501005066 +501005088 +601004066 +601004066 +701004066 +701004066 +801004088 +801004088 +1005066 +66 Index: data/files/in6.txt =================================================================== --- data/files/in6.txt (revision 0) +++ data/files/in6.txt (revision 0) @@ -0,0 +1,19 @@ +51000566 +101001066 +201002066 +251002566 +301003088 +351003588 +401004066 +401004088 +501005066 +501005088 +501005066 +601004066 +601004066 +701004088 +701004088 +801004066 +801004066 +1005066 +66 Index: ql/src/test/results/clientpositive/join_1to1.q.out =================================================================== --- ql/src/test/results/clientpositive/join_1to1.q.out (revision 0) +++ ql/src/test/results/clientpositive/join_1to1.q.out (revision 0) @@ -0,0 +1,758 @@ +PREHOOK: query: CREATE TABLE join_1to1_1(key1 int, key2 int, value int) +PREHOOK: type: CREATETABLE +POSTHOOK: query: CREATE TABLE join_1to1_1(key1 int, key2 int, value int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@join_1to1_1 +PREHOOK: query: LOAD DATA LOCAL INPATH '../data/files/in5.txt' INTO TABLE join_1to1_1 +PREHOOK: type: LOAD +POSTHOOK: query: LOAD DATA LOCAL INPATH '../data/files/in5.txt' INTO TABLE join_1to1_1 +POSTHOOK: type: LOAD +POSTHOOK: Output: default@join_1to1_1 +PREHOOK: query: CREATE TABLE join_1to1_2(key1 int, key2 int, value int) +PREHOOK: type: CREATETABLE +POSTHOOK: query: CREATE TABLE join_1to1_2(key1 int, key2 int, value int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@join_1to1_2 +PREHOOK: query: LOAD DATA LOCAL INPATH '../data/files/in6.txt' INTO TABLE join_1to1_2 +PREHOOK: type: LOAD +POSTHOOK: query: LOAD DATA LOCAL INPATH '../data/files/in6.txt' INTO TABLE join_1to1_2 +POSTHOOK: type: LOAD +POSTHOOK: Output: default@join_1to1_2 +PREHOOK: query: SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = b.key1 +PREHOOK: type: QUERY +PREHOOK: Input: default@join_1to1_1 +PREHOOK: Input: default@join_1to1_2 +PREHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-38-45_532_5132194376878491822/-mr-10000 +POSTHOOK: query: SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = b.key1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@join_1to1_1 +POSTHOOK: Input: default@join_1to1_2 +POSTHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-38-45_532_5132194376878491822/-mr-10000 +5 10005 66 5 10005 66 +20 10020 66 20 10020 66 +25 10025 88 25 10025 66 +30 10030 66 30 10030 88 +35 10035 88 35 10035 88 +40 10040 66 40 10040 66 +40 10040 66 40 10040 88 +40 10040 88 40 10040 66 +40 10040 88 40 10040 88 +50 10050 66 50 10050 88 +50 10050 66 50 10050 66 +50 10050 66 50 10050 66 +50 10050 88 50 10050 88 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +50 10050 88 50 10050 88 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 +PREHOOK: type: QUERY +PREHOOK: Input: default@join_1to1_1 +PREHOOK: Input: default@join_1to1_2 +PREHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-38-48_646_1968248520254828338/-mr-10000 +POSTHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@join_1to1_1 +POSTHOOK: Input: default@join_1to1_2 +POSTHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-38-48_646_1968248520254828338/-mr-10000 +NULL NULL 66 NULL NULL NULL +NULL 10050 66 NULL NULL NULL +NULL NULL NULL NULL NULL 66 +NULL NULL NULL NULL 10050 66 +5 10005 66 5 10005 66 +NULL NULL NULL 10 10010 66 +15 10015 66 NULL NULL NULL +20 10020 66 20 10020 66 +25 10025 88 25 10025 66 +30 10030 66 30 10030 88 +35 10035 88 35 10035 88 +40 10040 66 40 10040 66 +40 10040 66 40 10040 88 +40 10040 88 40 10040 66 +40 10040 88 40 10040 88 +50 10050 66 50 10050 88 +50 10050 66 50 10050 66 +50 10050 66 50 10050 66 +50 10050 88 50 10050 88 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +50 10050 88 50 10050 88 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.value = 66 and b.value = 66 +PREHOOK: type: QUERY +PREHOOK: Input: default@join_1to1_1 +PREHOOK: Input: default@join_1to1_2 +PREHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-38-51_433_5181169861545116145/-mr-10000 +POSTHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.value = 66 and b.value = 66 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@join_1to1_1 +POSTHOOK: Input: default@join_1to1_2 +POSTHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-38-51_433_5181169861545116145/-mr-10000 +NULL NULL 66 NULL NULL NULL +NULL 10050 66 NULL NULL NULL +NULL NULL NULL NULL NULL 66 +NULL NULL NULL NULL 10050 66 +5 10005 66 5 10005 66 +NULL NULL NULL 10 10010 66 +15 10015 66 NULL NULL NULL +20 10020 66 20 10020 66 +25 10025 88 NULL NULL NULL +30 10030 66 NULL NULL NULL +NULL NULL NULL 30 10030 88 +35 10035 88 NULL NULL NULL +NULL NULL NULL 35 10035 88 +40 10040 66 40 10040 66 +40 10040 66 NULL NULL NULL +NULL NULL NULL 40 10040 88 +40 10040 88 NULL NULL NULL +40 10040 88 NULL NULL NULL +NULL NULL NULL 40 10040 88 +50 10050 66 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 66 50 10050 66 +50 10050 66 50 10050 66 +50 10050 88 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 88 NULL NULL NULL +50 10050 88 NULL NULL NULL +50 10050 88 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 88 NULL NULL NULL +50 10050 88 NULL NULL NULL +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 +PREHOOK: type: QUERY +PREHOOK: Input: default@join_1to1_1 +PREHOOK: Input: default@join_1to1_2 +PREHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-38-54_220_2288773617514066883/-mr-10000 +POSTHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@join_1to1_1 +POSTHOOK: Input: default@join_1to1_2 +POSTHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-38-54_220_2288773617514066883/-mr-10000 +NULL NULL 66 NULL NULL NULL +NULL NULL NULL NULL NULL 66 +NULL 10050 66 NULL NULL NULL +NULL NULL NULL NULL 10050 66 +5 10005 66 5 10005 66 +NULL NULL NULL 10 10010 66 +15 10015 66 NULL NULL NULL +20 10020 66 20 10020 66 +25 10025 88 25 10025 66 +30 10030 66 30 10030 88 +35 10035 88 35 10035 88 +40 10040 66 40 10040 66 +40 10040 66 40 10040 88 +40 10040 88 40 10040 66 +40 10040 88 40 10040 88 +50 10050 66 50 10050 88 +50 10050 66 50 10050 66 +50 10050 66 50 10050 66 +50 10050 88 50 10050 88 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +50 10050 88 50 10050 88 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 and a.value = 66 and b.value = 66 +PREHOOK: type: QUERY +PREHOOK: Input: default@join_1to1_1 +PREHOOK: Input: default@join_1to1_2 +PREHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-38-56_903_2251597790055452898/-mr-10000 +POSTHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 and a.value = 66 and b.value = 66 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@join_1to1_1 +POSTHOOK: Input: default@join_1to1_2 +POSTHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-38-56_903_2251597790055452898/-mr-10000 +NULL NULL 66 NULL NULL NULL +NULL NULL NULL NULL NULL 66 +NULL 10050 66 NULL NULL NULL +NULL NULL NULL NULL 10050 66 +5 10005 66 5 10005 66 +NULL NULL NULL 10 10010 66 +15 10015 66 NULL NULL NULL +20 10020 66 20 10020 66 +25 10025 88 NULL NULL NULL +30 10030 66 NULL NULL NULL +NULL NULL NULL 30 10030 88 +35 10035 88 NULL NULL NULL +NULL NULL NULL 35 10035 88 +40 10040 66 40 10040 66 +40 10040 66 NULL NULL NULL +NULL NULL NULL 40 10040 88 +40 10040 88 NULL NULL NULL +40 10040 88 NULL NULL NULL +NULL NULL NULL 40 10040 88 +50 10050 66 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 66 50 10050 66 +50 10050 66 50 10050 66 +50 10050 88 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 88 NULL NULL NULL +50 10050 88 NULL NULL NULL +50 10050 88 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 88 NULL NULL NULL +50 10050 88 NULL NULL NULL +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +PREHOOK: query: SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = b.key1 +PREHOOK: type: QUERY +PREHOOK: Input: default@join_1to1_1 +PREHOOK: Input: default@join_1to1_2 +PREHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-38-59_803_144564004904691694/-mr-10000 +POSTHOOK: query: SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = b.key1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@join_1to1_1 +POSTHOOK: Input: default@join_1to1_2 +POSTHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-38-59_803_144564004904691694/-mr-10000 +5 10005 66 5 10005 66 +20 10020 66 20 10020 66 +25 10025 88 25 10025 66 +30 10030 66 30 10030 88 +35 10035 88 35 10035 88 +40 10040 66 40 10040 66 +40 10040 66 40 10040 88 +40 10040 88 40 10040 66 +40 10040 88 40 10040 88 +50 10050 66 50 10050 88 +50 10050 66 50 10050 66 +50 10050 88 50 10050 88 +50 10050 88 50 10050 66 +50 10050 88 50 10050 88 +50 10050 88 50 10050 66 +50 10050 66 50 10050 66 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 +PREHOOK: type: QUERY +PREHOOK: Input: default@join_1to1_1 +PREHOOK: Input: default@join_1to1_2 +PREHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-03_572_6802024090732061373/-mr-10000 +POSTHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@join_1to1_1 +POSTHOOK: Input: default@join_1to1_2 +POSTHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-03_572_6802024090732061373/-mr-10000 +NULL NULL 66 NULL NULL NULL +NULL 10050 66 NULL NULL NULL +NULL NULL NULL NULL NULL 66 +NULL NULL NULL NULL 10050 66 +5 10005 66 5 10005 66 +NULL NULL NULL 10 10010 66 +15 10015 66 NULL NULL NULL +20 10020 66 20 10020 66 +25 10025 88 25 10025 66 +30 10030 66 30 10030 88 +35 10035 88 35 10035 88 +40 10040 66 40 10040 66 +40 10040 66 40 10040 88 +40 10040 88 40 10040 66 +40 10040 88 40 10040 88 +50 10050 66 50 10050 88 +50 10050 66 50 10050 66 +50 10050 88 50 10050 88 +50 10050 88 50 10050 66 +50 10050 88 50 10050 88 +50 10050 88 50 10050 66 +50 10050 66 50 10050 66 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.value = 66 and b.value = 66 +PREHOOK: type: QUERY +PREHOOK: Input: default@join_1to1_1 +PREHOOK: Input: default@join_1to1_2 +PREHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-06_605_2170631069887959783/-mr-10000 +POSTHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.value = 66 and b.value = 66 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@join_1to1_1 +POSTHOOK: Input: default@join_1to1_2 +POSTHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-06_605_2170631069887959783/-mr-10000 +NULL NULL 66 NULL NULL NULL +NULL 10050 66 NULL NULL NULL +NULL NULL NULL NULL NULL 66 +NULL NULL NULL NULL 10050 66 +5 10005 66 5 10005 66 +NULL NULL NULL 10 10010 66 +15 10015 66 NULL NULL NULL +20 10020 66 20 10020 66 +25 10025 88 NULL NULL NULL +30 10030 66 NULL NULL NULL +NULL NULL NULL 30 10030 88 +35 10035 88 NULL NULL NULL +NULL NULL NULL 35 10035 88 +40 10040 66 40 10040 66 +40 10040 66 NULL NULL NULL +NULL NULL NULL 40 10040 88 +40 10040 88 NULL NULL NULL +40 10040 88 NULL NULL NULL +NULL NULL NULL 40 10040 88 +50 10050 66 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 66 50 10050 66 +50 10050 88 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 88 NULL NULL NULL +50 10050 88 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 88 NULL NULL NULL +50 10050 66 50 10050 66 +50 10050 88 NULL NULL NULL +50 10050 88 NULL NULL NULL +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 +PREHOOK: type: QUERY +PREHOOK: Input: default@join_1to1_1 +PREHOOK: Input: default@join_1to1_2 +PREHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-09_348_7177244980529309430/-mr-10000 +POSTHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@join_1to1_1 +POSTHOOK: Input: default@join_1to1_2 +POSTHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-09_348_7177244980529309430/-mr-10000 +NULL NULL 66 NULL NULL NULL +NULL NULL NULL NULL NULL 66 +NULL 10050 66 NULL NULL NULL +NULL NULL NULL NULL 10050 66 +5 10005 66 5 10005 66 +NULL NULL NULL 10 10010 66 +15 10015 66 NULL NULL NULL +20 10020 66 20 10020 66 +25 10025 88 25 10025 66 +30 10030 66 30 10030 88 +35 10035 88 35 10035 88 +40 10040 66 40 10040 66 +40 10040 66 40 10040 88 +40 10040 88 40 10040 66 +40 10040 88 40 10040 88 +50 10050 66 50 10050 88 +50 10050 66 50 10050 66 +50 10050 88 50 10050 88 +50 10050 88 50 10050 66 +50 10050 88 50 10050 88 +50 10050 88 50 10050 66 +50 10050 66 50 10050 66 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 and a.value = 66 and b.value = 66 +PREHOOK: type: QUERY +PREHOOK: Input: default@join_1to1_1 +PREHOOK: Input: default@join_1to1_2 +PREHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-12_006_4057955761506303909/-mr-10000 +POSTHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 and a.value = 66 and b.value = 66 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@join_1to1_1 +POSTHOOK: Input: default@join_1to1_2 +POSTHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-12_006_4057955761506303909/-mr-10000 +NULL NULL 66 NULL NULL NULL +NULL NULL NULL NULL NULL 66 +NULL 10050 66 NULL NULL NULL +NULL NULL NULL NULL 10050 66 +5 10005 66 5 10005 66 +NULL NULL NULL 10 10010 66 +15 10015 66 NULL NULL NULL +20 10020 66 20 10020 66 +25 10025 88 NULL NULL NULL +30 10030 66 NULL NULL NULL +NULL NULL NULL 30 10030 88 +35 10035 88 NULL NULL NULL +NULL NULL NULL 35 10035 88 +40 10040 66 40 10040 66 +40 10040 66 NULL NULL NULL +NULL NULL NULL 40 10040 88 +40 10040 88 NULL NULL NULL +40 10040 88 NULL NULL NULL +NULL NULL NULL 40 10040 88 +50 10050 66 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 66 50 10050 66 +50 10050 88 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 88 NULL NULL NULL +50 10050 88 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 88 NULL NULL NULL +50 10050 66 50 10050 66 +50 10050 88 NULL NULL NULL +50 10050 88 NULL NULL NULL +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +PREHOOK: query: SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = b.key1 +PREHOOK: type: QUERY +PREHOOK: Input: default@join_1to1_1 +PREHOOK: Input: default@join_1to1_2 +PREHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-14_663_6577692217884981548/-mr-10000 +POSTHOOK: query: SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = b.key1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@join_1to1_1 +POSTHOOK: Input: default@join_1to1_2 +POSTHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-14_663_6577692217884981548/-mr-10000 +5 10005 66 5 10005 66 +20 10020 66 20 10020 66 +25 10025 88 25 10025 66 +30 10030 66 30 10030 88 +35 10035 88 35 10035 88 +40 10040 66 40 10040 66 +40 10040 88 40 10040 66 +40 10040 66 40 10040 88 +40 10040 88 40 10040 88 +50 10050 66 50 10050 88 +50 10050 88 50 10050 88 +50 10050 88 50 10050 88 +50 10050 66 50 10050 66 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +50 10050 66 50 10050 66 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 +PREHOOK: type: QUERY +PREHOOK: Input: default@join_1to1_1 +PREHOOK: Input: default@join_1to1_2 +PREHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-17_322_2367108893808157044/-mr-10000 +POSTHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@join_1to1_1 +POSTHOOK: Input: default@join_1to1_2 +POSTHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-17_322_2367108893808157044/-mr-10000 +NULL NULL 66 NULL NULL NULL +NULL 10050 66 NULL NULL NULL +NULL NULL NULL NULL NULL 66 +NULL NULL NULL NULL 10050 66 +5 10005 66 5 10005 66 +NULL NULL NULL 10 10010 66 +15 10015 66 NULL NULL NULL +20 10020 66 20 10020 66 +25 10025 88 25 10025 66 +30 10030 66 30 10030 88 +35 10035 88 35 10035 88 +40 10040 66 40 10040 66 +40 10040 88 40 10040 66 +40 10040 66 40 10040 88 +40 10040 88 40 10040 88 +50 10050 66 50 10050 88 +50 10050 88 50 10050 88 +50 10050 88 50 10050 88 +50 10050 66 50 10050 66 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +50 10050 66 50 10050 66 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.value = 66 and b.value = 66 +PREHOOK: type: QUERY +PREHOOK: Input: default@join_1to1_1 +PREHOOK: Input: default@join_1to1_2 +PREHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-20_037_2983450526029732402/-mr-10000 +POSTHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.value = 66 and b.value = 66 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@join_1to1_1 +POSTHOOK: Input: default@join_1to1_2 +POSTHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-20_037_2983450526029732402/-mr-10000 +NULL NULL 66 NULL NULL NULL +NULL 10050 66 NULL NULL NULL +NULL NULL NULL NULL NULL 66 +NULL NULL NULL NULL 10050 66 +5 10005 66 5 10005 66 +NULL NULL NULL 10 10010 66 +15 10015 66 NULL NULL NULL +20 10020 66 20 10020 66 +25 10025 88 NULL NULL NULL +30 10030 66 NULL NULL NULL +NULL NULL NULL 30 10030 88 +35 10035 88 NULL NULL NULL +NULL NULL NULL 35 10035 88 +40 10040 66 40 10040 66 +40 10040 88 NULL NULL NULL +40 10040 66 NULL NULL NULL +NULL NULL NULL 40 10040 88 +40 10040 88 NULL NULL NULL +NULL NULL NULL 40 10040 88 +50 10050 66 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 88 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 88 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 66 50 10050 66 +50 10050 88 NULL NULL NULL +50 10050 88 NULL NULL NULL +50 10050 66 50 10050 66 +50 10050 88 NULL NULL NULL +50 10050 88 NULL NULL NULL +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 +PREHOOK: type: QUERY +PREHOOK: Input: default@join_1to1_1 +PREHOOK: Input: default@join_1to1_2 +PREHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-22_696_339259897241944612/-mr-10000 +POSTHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@join_1to1_1 +POSTHOOK: Input: default@join_1to1_2 +POSTHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-22_696_339259897241944612/-mr-10000 +NULL NULL 66 NULL NULL NULL +NULL NULL NULL NULL NULL 66 +NULL 10050 66 NULL NULL NULL +NULL NULL NULL NULL 10050 66 +5 10005 66 5 10005 66 +NULL NULL NULL 10 10010 66 +15 10015 66 NULL NULL NULL +20 10020 66 20 10020 66 +25 10025 88 25 10025 66 +30 10030 66 30 10030 88 +35 10035 88 35 10035 88 +40 10040 66 40 10040 66 +40 10040 88 40 10040 66 +40 10040 66 40 10040 88 +40 10040 88 40 10040 88 +50 10050 66 50 10050 88 +50 10050 88 50 10050 88 +50 10050 88 50 10050 88 +50 10050 66 50 10050 66 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +50 10050 66 50 10050 66 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 and a.value = 66 and b.value = 66 +PREHOOK: type: QUERY +PREHOOK: Input: default@join_1to1_1 +PREHOOK: Input: default@join_1to1_2 +PREHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-25_349_7024635432573067551/-mr-10000 +POSTHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 and a.value = 66 and b.value = 66 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@join_1to1_1 +POSTHOOK: Input: default@join_1to1_2 +POSTHOOK: Output: file:/tmp/sdong/hive_2010-11-15_17-39-25_349_7024635432573067551/-mr-10000 +NULL NULL 66 NULL NULL NULL +NULL NULL NULL NULL NULL 66 +NULL 10050 66 NULL NULL NULL +NULL NULL NULL NULL 10050 66 +5 10005 66 5 10005 66 +NULL NULL NULL 10 10010 66 +15 10015 66 NULL NULL NULL +20 10020 66 20 10020 66 +25 10025 88 NULL NULL NULL +30 10030 66 NULL NULL NULL +NULL NULL NULL 30 10030 88 +35 10035 88 NULL NULL NULL +NULL NULL NULL 35 10035 88 +40 10040 66 40 10040 66 +40 10040 88 NULL NULL NULL +40 10040 66 NULL NULL NULL +NULL NULL NULL 40 10040 88 +40 10040 88 NULL NULL NULL +NULL NULL NULL 40 10040 88 +50 10050 66 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 88 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 88 NULL NULL NULL +NULL NULL NULL 50 10050 88 +50 10050 66 50 10050 66 +50 10050 88 NULL NULL NULL +50 10050 88 NULL NULL NULL +50 10050 66 50 10050 66 +50 10050 88 NULL NULL NULL +50 10050 88 NULL NULL NULL +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +70 10040 66 NULL NULL NULL +NULL NULL NULL 70 10040 88 +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL +80 10040 88 NULL NULL NULL Index: ql/src/test/queries/clientpositive/join_1to1.q =================================================================== --- ql/src/test/queries/clientpositive/join_1to1.q (revision 0) +++ ql/src/test/queries/clientpositive/join_1to1.q (revision 0) @@ -0,0 +1,28 @@ +CREATE TABLE join_1to1_1(key1 int, key2 int, value int); +LOAD DATA LOCAL INPATH '../data/files/in5.txt' INTO TABLE join_1to1_1; + +CREATE TABLE join_1to1_2(key1 int, key2 int, value int); +LOAD DATA LOCAL INPATH '../data/files/in6.txt' INTO TABLE join_1to1_2; + +set hive.join.emit.interval=5; + +SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = b.key1; +SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1; +SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.value = 66 and b.value = 66; +SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2; +SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 and a.value = 66 and b.value = 66; + +set hive.join.emit.interval=2; +SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = b.key1; +SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1; +SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.value = 66 and b.value = 66; +SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2; +SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 and a.value = 66 and b.value = 66; + +set hive.join.emit.interval=1; +SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = b.key1; +SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1; +SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.value = 66 and b.value = 66; +SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2; +SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 and a.value = 66 and b.value = 66; + Index: ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java (revision 10307) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java (working copy) @@ -240,8 +240,6 @@ condn = conf.getConds(); noOuterJoin = conf.isNoOuterJoin(); - - totalSz = JoinUtil.populateJoinKeyValue(joinValues, conf.getExprs(), order,NOTSKIPBIGTABLE); @@ -744,6 +742,21 @@ } } + private void genAllOneUniqueJoinObject() + throws HiveException { + int p = 0; + for (int i = 0; i < numAliases; i++) { + int sz = joinValues.get(order[i]).size(); + ArrayList obj = storage.get(order[i]).first(); + for (int j = 0; j < sz; j++) { + forwardCache[p++] = obj.get(j); + } + } + + forward(forwardCache, outputObjInspector); + countAfterReport = 0; + } + protected void checkAndGenObject() throws HiveException { if (condn[0].getType() == JoinDesc.UNIQUE_JOIN) { new IntermediateObject(new ArrayList[numAliases], 0); @@ -754,9 +767,15 @@ boolean preserve = false; // Will be true if there is a non-null entry // in a preserved table boolean hasNulls = false; // Will be true if there are null entries + boolean allOne = true; for (int i = 0; i < numAliases; i++) { Byte alias = order[i]; AbstractRowContainer> alw = storage.get(alias); + + if (alw.size() != 1) { + allOne = false; + } + if (alw.size() == 0) { alw.add((ArrayList) dummyObj[i]); hasNulls = true; @@ -769,29 +788,58 @@ return; } - LOG.trace("calling genUniqueJoinObject"); - genUniqueJoinObject(0, new IntermediateObject(new ArrayList[numAliases], - 0)); - LOG.trace("called genUniqueJoinObject"); + if (allOne) { + LOG.info("calling genAllOneUniqueJoinObject"); + genAllOneUniqueJoinObject(); + LOG.info("called genAllOneUniqueJoinObject"); + } else { + LOG.trace("calling genUniqueJoinObject"); + genUniqueJoinObject(0, new IntermediateObject(new ArrayList[numAliases], + 0)); + LOG.trace("called genUniqueJoinObject"); + } } else { // does any result need to be emitted + boolean hasMoreThanOne = false; + boolean hasEmpty = false; for (int i = 0; i < numAliases; i++) { Byte alias = order[i]; AbstractRowContainer> alw = storage.get(alias); - if (alw.size() == 0) { - if (noOuterJoin) { + + if (noOuterJoin) { + if (alw.size() == 0) { LOG.trace("No data for alias=" + i); return; + } else if (alw.size() > 1) { + hasMoreThanOne = true; + } + } else { + if (alw.size() == 0) { + hasEmpty = true; + alw.add((ArrayList) dummyObj[i]); + } else if (alw.size() == 1) { + ArrayList row = alw.first(); + int numValues = joinValues.get(alias).size(); + if (row == dummyObj[alias] + || (row.size() > numValues && ((BooleanWritable) (row.get(numValues))).get())) { + hasEmpty = true; + } } else { - alw.add((ArrayList) dummyObj[i]); + hasMoreThanOne = true; } } } - LOG.trace("calling genObject"); - genObject(null, 0, new IntermediateObject(new ArrayList[numAliases], 0), - true); - LOG.trace("called genObject"); + if (!hasEmpty && !hasMoreThanOne) { + LOG.trace("calling genAllOneUniqueJoinObject"); + genAllOneUniqueJoinObject(); + LOG.trace("called genAllOneUniqueJoinObject"); + } else { + LOG.trace("calling genObject"); + genObject(null, 0, new IntermediateObject(new ArrayList[numAliases], 0), + true); + LOG.trace("called genObject"); + } } }