blob: fceb2b237be867db1e0249ae3bf486acaebbbc03 [file] [log] [blame]
--! qt:dataset:src
drop table table_desc1_n2;
drop table table_desc2_n2;
drop table table_desc3;
drop table table_desc4;
create table table_desc1_n2(key string, value string) clustered by (key)
sorted by (key DESC) into 1 BUCKETS;
create table table_desc2_n2(key string, value string) clustered by (key)
sorted by (key DESC, value DESC) into 1 BUCKETS;
create table table_desc3(key string, value1 string, value2 string) clustered by (key)
sorted by (key DESC, value1 DESC,value2 DESC) into 1 BUCKETS;
create table table_desc4(key string, value2 string) clustered by (key)
sorted by (key DESC, value2 DESC) into 1 BUCKETS;
insert overwrite table table_desc1_n2 select key, value from src sort by key DESC;
insert overwrite table table_desc2_n2 select key, value from src sort by key DESC;
insert overwrite table table_desc3 select key, value, concat(value,"_2") as value2 from src sort by key, value, value2 DESC;
insert overwrite table table_desc4 select key, concat(value,"_2") as value2 from src sort by key, value2 DESC;
set hive.optimize.bucketmapjoin = true;
set hive.optimize.bucketmapjoin.sortedmerge = true;
set hive.input.format = org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat;
set hive.cbo.enable=false;
-- columns are sorted by one key in first table, two keys in second table but in same sort order for key. Hence SMB join should pass
explain
select /*+ mapjoin(b) */ count(*) from table_desc1_n2 a join table_desc2_n2 b
on a.key=b.key where a.key < 10;
select /*+ mapjoin(b) */ count(*) from table_desc1_n2 a join table_desc2_n2 b
on a.key=b.key where a.key < 10;
-- columns are sorted by 3 keys(a, b, c) in first table, two keys(a, c) in second table with same sort order. Hence SMB join should not pass
explain
select /*+ mapjoin(b) */ count(*) from table_desc3 a join table_desc4 b
on a.key=b.key and a.value2=b.value2 where a.key < 10;
select /*+ mapjoin(b) */ count(*) from table_desc3 a join table_desc4 b
on a.key=b.key and a.value2=b.value2 where a.key < 10;