Vineet Garg created HIVE-24595:
----------------------------------

             Summary: Vectorization causing incorrect results for scalar 
subquery
                 Key: HIVE-24595
                 URL: https://issues.apache.org/jira/browse/HIVE-24595
             Project: Hive
          Issue Type: Bug
          Components: Vectorization
    Affects Versions: 3.0.0
            Reporter: Vineet Garg


*Repro*
{code:sql}
 CREATE EXTERNAL TABLE `alltypessmall`(             
   `id` int,                                        
   `bool_col` boolean,                              
   `tinyint_col` tinyint,                           
   `smallint_col` smallint,                         
   `int_col` int,                                   
   `bigint_col` bigint,                             
   `float_col` float,                               
   `double_col` double,                             
   `date_string_col` string,                        
   `string_col` string,                             
   `timestamp_col` timestamp)                       
 PARTITIONED BY (                                   
   `year` int,                                      
   `month` int)                                     
 ROW FORMAT SERDE                                   
   'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'  
 WITH SERDEPROPERTIES (                             
   'escape.delim'='\\',                             
   'field.delim'=',',                               
   'serialization.format'=',')                      
 STORED AS INPUTFORMAT                              
   'org.apache.hadoop.mapred.TextInputFormat'       
 OUTPUTFORMAT                                       
   'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' 
 TBLPROPERTIES (                                    
   'DO_NOT_UPDATE_STATS'='true',                    
   'OBJCAPABILITIES'='EXTREAD,EXTWRITE',            
   'STATS_GENERATED'='TASK',                        
   'impala.lastComputeStatsTime'='1608312793',      
   'transient_lastDdlTime'='1608310442')            ;

insert into alltypessmall partition(year=2002,month=1) values(1, true, 
3,3,4,3434,5.4,44.3,'str1','str2', '01-01-2001');
insert into alltypessmall partition(year=2002,month=1) values(1, true, 
3,3,4,3434,5.4,44.3,'str1','str2', '01-01-2001');
insert into alltypessmall partition(year=2002,month=1) values(1, true, 
3,3,40,3434,5.4,44.3,'str1','str2', '01-01-2001');
{code}
Following query should fail but it succeeds
{code:sql}
SELECT id FROM alltypessmall
WHERE int_col =
  (SELECT int_col
   FROM alltypessmall)
ORDER BY id;
{code}
*Explain plan*
{code:java}
STAGE DEPENDENCIES:
  Stage-1 is a root stage
  Stage-0 depends on stages: Stage-1

STAGE PLANS:
  Stage: Stage-1
    Tez
      DagId: vgarg_20210106115838_3fe73bf6-66c2-4281-92e8-fd75fd8ad400:17
      Edges:
        Map 1 <- Map 3 (BROADCAST_EDGE), Reducer 4 (BROADCAST_EDGE)
        Reducer 2 <- Map 1 (SIMPLE_EDGE)
        Reducer 4 <- Map 3 (CUSTOM_SIMPLE_EDGE)
      DagName: vgarg_20210106115838_3fe73bf6-66c2-4281-92e8-fd75fd8ad400:17
      Vertices:
        Map 1
            Map Operator Tree:
                TableScan
                  alias: alltypessmall
                  filterExpr: int_col is not null (type: boolean)
                  Statistics: Num rows: 3 Data size: 24 Basic stats: COMPLETE 
Column stats: COMPLETE
                  Filter Operator
                    predicate: int_col is not null (type: boolean)
                    Statistics: Num rows: 3 Data size: 24 Basic stats: COMPLETE 
Column stats: COMPLETE
                    Select Operator
                      expressions: id (type: int), int_col (type: int)
                      outputColumnNames: _col0, _col1
                      Statistics: Num rows: 3 Data size: 24 Basic stats: 
COMPLETE Column stats: COMPLETE
                      Map Join Operator
                        condition map:
                             Inner Join 0 to 1
                        keys:
                          0
                          1
                        outputColumnNames: _col0, _col1
                        input vertices:
                          1 Reducer 4
                        Statistics: Num rows: 3 Data size: 24 Basic stats: 
COMPLETE Column stats: COMPLETE
                        Map Join Operator
                          condition map:
                               Inner Join 0 to 1
                          keys:
                            0 _col1 (type: int)
                            1 _col0 (type: int)
                          outputColumnNames: _col0
                          input vertices:
                            1 Map 3
                          Statistics: Num rows: 9 Data size: 36 Basic stats: 
COMPLETE Column stats: COMPLETE
                          Reduce Output Operator
                            key expressions: _col0 (type: int)
                            null sort order: z
                            sort order: +
                            Statistics: Num rows: 9 Data size: 36 Basic stats: 
COMPLETE Column stats: COMPLETE
            Execution mode: vectorized
        Map 3
            Map Operator Tree:
                TableScan
                  alias: alltypessmall
                  Statistics: Num rows: 3 Data size: 142 Basic stats: COMPLETE 
Column stats: COMPLETE
                  Select Operator
                    Statistics: Num rows: 3 Data size: 142 Basic stats: 
COMPLETE Column stats: COMPLETE
                    Group By Operator
                      aggregations: count()
                      minReductionHashAggr: 0.6666666
                      mode: hash
                      outputColumnNames: _col0
                      Statistics: Num rows: 1 Data size: 8 Basic stats: 
COMPLETE Column stats: COMPLETE
                      Reduce Output Operator
                        null sort order:
                        sort order:
                        Statistics: Num rows: 1 Data size: 8 Basic stats: 
COMPLETE Column stats: COMPLETE
                        value expressions: _col0 (type: bigint)
                  Filter Operator
                    predicate: int_col is not null (type: boolean)
                    Statistics: Num rows: 3 Data size: 12 Basic stats: COMPLETE 
Column stats: COMPLETE
                    Select Operator
                      expressions: int_col (type: int)
                      outputColumnNames: _col0
                      Statistics: Num rows: 3 Data size: 12 Basic stats: 
COMPLETE Column stats: COMPLETE
                      Reduce Output Operator
                        key expressions: _col0 (type: int)
                        null sort order: z
                        sort order: +
                        Map-reduce partition columns: _col0 (type: int)
                        Statistics: Num rows: 3 Data size: 12 Basic stats: 
COMPLETE Column stats: COMPLETE
            Execution mode: vectorized
        Reducer 2
            Execution mode: vectorized
            Reduce Operator Tree:
              Select Operator
                expressions: KEY.reducesinkkey0 (type: int)
                outputColumnNames: _col0
                Statistics: Num rows: 9 Data size: 36 Basic stats: COMPLETE 
Column stats: COMPLETE
                File Output Operator
                  compressed: false
                  Statistics: Num rows: 9 Data size: 36 Basic stats: COMPLETE 
Column stats: COMPLETE
                  table:
                      input format: 
org.apache.hadoop.mapred.SequenceFileInputFormat
                      output format: 
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
        Reducer 4
            Execution mode: vectorized
            Reduce Operator Tree:
              Group By Operator
                aggregations: count(VALUE._col0)
                mode: mergepartial
                outputColumnNames: _col0
                Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE 
Column stats: COMPLETE
                Filter Operator
                  predicate: (sq_count_check(_col0) <= 1) (type: boolean)
                  Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE 
Column stats: COMPLETE
                  Select Operator
                    Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE 
Column stats: COMPLETE
                    Reduce Output Operator
                      null sort order:
                      sort order:
                      Statistics: Num rows: 1 Data size: 8 Basic stats: 
COMPLETE Column stats: COMPLETE

  Stage: Stage-0
    Fetch Operator
      limit: -1
      Processor Tree:
        ListSink
{code}
Issue is that Map 3/Reducer 4 group by is producing incorrect count. Expected 
output in this case is *3* but actual seems to be *1*.

 

*CBO plan*
{code:sql}
HiveSortLimit(sort0=[$0], dir0=[ASC])
  HiveProject(id=[$0])
    HiveJoin(condition=[=($1, $3)], joinType=[inner], algorithm=[none], 
cost=[{6.0 rows, 0.0 cpu, 0.0 io}])
      HiveJoin(condition=[true], joinType=[inner], algorithm=[none], cost=[{4.0 
rows, 0.0 cpu, 0.0 io}])
        HiveProject(id=[$0], int_col=[$4])
          HiveFilter(condition=[IS NOT NULL($4)])
            HiveTableScan(table=[[cdpd_20765, alltypessmall]], 
table:alias=[alltypessmall])
        HiveProject(cnt=[$0])
          HiveFilter(condition=[<=(sq_count_check($0), 1)])
            HiveProject(cnt=[$0])
              HiveAggregate(group=[{}], cnt=[COUNT()])
                HiveTableScan(table=[[cdpd_20765, alltypessmall]], 
table:alias=[alltypessmall])
      HiveProject(int_col=[$4])
        HiveFilter(condition=[IS NOT NULL($4)])
          HiveTableScan(table=[[cdpd_20765, alltypessmall]], 
table:alias=[alltypessmall])
{code}
 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to