[ 
https://issues.apache.org/jira/browse/HIVE-7990?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Prasanth J updated HIVE-7990:
-----------------------------
    Labels:   (was: performance)

> With fetch column stats disabled number of elements in grouping set is not 
> taken into account
> ---------------------------------------------------------------------------------------------
>
>                 Key: HIVE-7990
>                 URL: https://issues.apache.org/jira/browse/HIVE-7990
>             Project: Hive
>          Issue Type: Sub-task
>          Components: Statistics
>    Affects Versions: 0.13.1
>            Reporter: Mostafa Mokhtar
>            Assignee: Prasanth J
>
> For queries with rollup and cube the number of rows calculation in 
> GroupByStatsRule should be multiplied by number of elements in grouping set.
> A side effect of this defect is that reducers will under estimate data size 
> and end up with small number of tasks which negatively affects query runtime. 
>  
> {code}
>             // since we do not know if hash-aggregation will be enabled or 
> disabled
>             // at runtime we will assume that map-side group by does not do 
> any
>             // reduction.hence no group by rule will be applied
>             // map-side grouping set present. if grouping set is present then
>             // multiply the number of rows by number of elements in grouping 
> set
>             if (gop.getConf().isGroupingSetsPresent()) {
>               int multiplier = gop.getConf().getListGroupingSets().size();
>               // take into account the map-side parallelism as well, default 
> is 1
>               multiplier *= mapSideParallelism;
>               newNumRows = multiplier * stats.getNumRows();
>               long dataSize = multiplier * stats.getDataSize();
>               stats.setNumRows(newNumRows);
>               stats.setDataSize(dataSize);
>               for (ColStatistics cs : colStats) {
>                 if (cs != null) {
>                   long oldNumNulls = cs.getNumNulls();
>                   long newNumNulls = multiplier * oldNumNulls;
>                   cs.setNumNulls(newNumNulls);
>                 }
>               }
>             } else {
>               // map side no grouping set
>               newNumRows = stats.getNumRows() * mapSideParallelism;
>               updateStats(stats, newNumRows, true);
>             }
>           
> {code}
> Query 
> {code}
> select  *
> from (select i_category
>             ,i_class
>             ,i_brand
>             ,i_product_name
>             ,d_year
>             ,d_qoy
>             ,d_moy
>             ,s_store_id
>             ,sumsales
>             ,rank() over (partition by i_category order by sumsales desc) rk
>       from (select i_category
>                   ,i_class
>                   ,i_brand
>                   ,i_product_name
>                   ,d_year
>                   ,d_qoy
>                   ,d_moy
>                   ,s_store_id
>                   ,sum(coalesce(ss_sales_price*ss_quantity,0)) sumsales
>             from store_sales
>                 ,date_dim
>                 ,store
>                 ,item
>        where  store_sales.ss_sold_date_sk=date_dim.d_date_sk
>           and store_sales.ss_item_sk=item.i_item_sk
>           and store_sales.ss_store_sk = store.s_store_sk
>           and d_month_seq between 1193 and 1193+11
>           and ss_sold_date between '1999-06-01' and '2000-05-31'
>        group by i_category, i_class, i_brand, i_product_name, d_year, d_qoy, 
> d_moy,s_store_id with rollup)dw1) dw2
> where rk <= 100
> order by i_category
>         ,i_class
>         ,i_brand
>         ,i_product_name
>         ,d_year
>         ,d_qoy
>         ,d_moy
>         ,s_store_id
>         ,sumsales
>         ,rk
> limit 100
> {code}
> Plan generated , note the data size for Map 1
> {code}
> STAGE DEPENDENCIES:
>   Stage-1 is a root stage
>   Stage-0 depends on stages: Stage-1
> STAGE PLANS:
>   Stage: Stage-1
>     Tez
>       Edges:
>         Map 1 <- Map 5 (BROADCAST_EDGE), Map 6 (BROADCAST_EDGE), Map 7 
> (BROADCAST_EDGE)
>         Reducer 2 <- Map 1 (SIMPLE_EDGE)
>         Reducer 3 <- Reducer 2 (SIMPLE_EDGE)
>         Reducer 4 <- Reducer 3 (SIMPLE_EDGE)
>       DagName: mmokhtar_20140903154848_7cf1519f-e95c-47ab-9f10-6d2130cd5734:1
>       Vertices:
>         Map 1 
>             Map Operator Tree:
>                 TableScan
>                   alias: store_sales
>                   filterExpr: (((ss_sold_date_sk is not null and ss_store_sk 
> is not null) and ss_item_sk is not null) and ss_sold_date BETWEEN 
> '1999-06-01' AND '2000-05-31') (type: boolean)
>                   Statistics: Num rows: 110339135 Data size: 4817453454 Basic 
> stats: COMPLETE Column stats: NONE
>                   Filter Operator
>                     predicate: ((ss_sold_date_sk is not null and ss_store_sk 
> is not null) and ss_item_sk is not null) (type: boolean)
>                     Statistics: Num rows: 13792392 Data size: 602181687 Basic 
> stats: COMPLETE Column stats: NONE
>                     Map Join Operator
>                       condition map:
>                            Inner Join 0 to 1
>                       condition expressions:
>                         0 {ss_sold_date_sk} {ss_item_sk} {ss_store_sk} 
> {ss_quantity} {ss_sales_price} {ss_sold_date}
>                         1 {d_date_sk} {d_month_seq} {d_year} {d_moy} {d_qoy}
>                       keys:
>                         0 ss_sold_date_sk (type: int)
>                         1 d_date_sk (type: int)
>                       outputColumnNames: _col0, _col2, _col7, _col10, _col13, 
> _col23, _col27, _col30, _col33, _col35, _col37
>                       input vertices:
>                         1 Map 6
>                       Statistics: Num rows: 15171632 Data size: 662399872 
> Basic stats: COMPLETE Column stats: NONE
>                       Map Join Operator
>                         condition map:
>                              Inner Join 0 to 1
>                         condition expressions:
>                           0 {_col0} {_col2} {_col7} {_col10} {_col13} 
> {_col23} {_col27} {_col30} {_col33} {_col35} {_col37}
>                           1 {s_store_sk} {s_store_id}
>                         keys:
>                           0 _col7 (type: int)
>                           1 s_store_sk (type: int)
>                         outputColumnNames: _col0, _col2, _col7, _col10, 
> _col13, _col23, _col27, _col30, _col33, _col35, _col37, _col58, _col59
>                         input vertices:
>                           1 Map 5
>                         Statistics: Num rows: 16688796 Data size: 728639872 
> Basic stats: COMPLETE Column stats: NONE
>                         Map Join Operator
>                           condition map:
>                                Inner Join 0 to 1
>                           condition expressions:
>                             0 {_col0} {_col2} {_col7} {_col10} {_col13} 
> {_col23} {_col27} {_col30} {_col33} {_col35} {_col37} {_col58} {_col59}
>                             1 {i_item_sk} {i_brand} {i_class} {i_category} 
> {i_product_name}
>                           keys:
>                             0 _col2 (type: int)
>                             1 i_item_sk (type: int)
>                           outputColumnNames: _col0, _col2, _col7, _col10, 
> _col13, _col23, _col27, _col30, _col33, _col35, _col37, _col58, _col59, 
> _col90, _col98, _col100, _col102, _col111
>                           input vertices:
>                             1 Map 7
>                           Statistics: Num rows: 18357676 Data size: 801503872 
> Basic stats: COMPLETE Column stats: NONE
>                           Filter Operator
>                             predicate: (((((_col0 = _col27) and (_col2 = 
> _col90)) and (_col7 = _col58)) and _col30 BETWEEN 1193 AND 1204) and _col23 
> BETWEEN '1999-06-01' AND '2000-05-31') (type: boolean)
>                             Statistics: Num rows: 573677 Data size: 25046979 
> Basic stats: COMPLETE Column stats: NONE
>                             Select Operator
>                               expressions: _col102 (type: string), _col100 
> (type: string), _col98 (type: string), _col111 (type: string), _col33 (type: 
> int), _col37 (type: int), _col35 (type: int), _col59 (type: string), _col13 
> (type: float), _col10 (type: int)
>                               outputColumnNames: _col102, _col100, _col98, 
> _col111, _col33, _col37, _col35, _col59, _col13, _col10
>                               Statistics: Num rows: 573677 Data size: 
> 25046979 Basic stats: COMPLETE Column stats: NONE
>                               Group By Operator
>                                 aggregations: sum(COALESCE((_col13 * 
> _col10),0))
>                                 keys: _col102 (type: string), _col100 (type: 
> string), _col98 (type: string), _col111 (type: string), _col33 (type: int), 
> _col37 (type: int), _col35 (type: int), _col59 (type: string), '0' (type: 
> string)
>                                 mode: hash
>                                 outputColumnNames: _col0, _col1, _col2, 
> _col3, _col4, _col5, _col6, _col7, _col8, _col9
>                                 Statistics: Num rows: 573677 Data size: 
> 25046979 Basic stats: COMPLETE Column stats: NONE
>                                 Reduce Output Operator
>                                   key expressions: _col0 (type: string), 
> _col1 (type: string), _col2 (type: string), _col3 (type: string), _col4 
> (type: int), _col5 (type: int), _col6 (type: int), _col7 (type: string), 
> _col8 (type: string)
>                                   sort order: +++++++++
>                                   Map-reduce partition columns: _col0 (type: 
> string), _col1 (type: string), _col2 (type: string), _col3 (type: string), 
> _col4 (type: int), _col5 (type: int), _col6 (type: int), _col7 (type: 
> string), _col8 (type: string)
>                                   Statistics: Num rows: 573677 Data size: 
> 25046979 Basic stats: COMPLETE Column stats: NONE
>                                   value expressions: _col9 (type: double)
>         Map 5 
>             Map Operator Tree:
>                 TableScan
>                   alias: store
>                   filterExpr: s_store_sk is not null (type: boolean)
>                   Statistics: Num rows: 212 Data size: 405680 Basic stats: 
> COMPLETE Column stats: COMPLETE
>                   Filter Operator
>                     predicate: s_store_sk is not null (type: boolean)
>                     Statistics: Num rows: 212 Data size: 22048 Basic stats: 
> COMPLETE Column stats: COMPLETE
>                     Reduce Output Operator
>                       key expressions: s_store_sk (type: int)
>                       sort order: +
>                       Map-reduce partition columns: s_store_sk (type: int)
>                       Statistics: Num rows: 212 Data size: 22048 Basic stats: 
> COMPLETE Column stats: COMPLETE
>                       value expressions: s_store_id (type: string)
>             Execution mode: vectorized
>         Map 6 
>             Map Operator Tree:
>                 TableScan
>                   alias: date_dim
>                   filterExpr: (d_date_sk is not null and d_month_seq BETWEEN 
> 1193 AND 1204) (type: boolean)
>                   Statistics: Num rows: 73049 Data size: 81741831 Basic 
> stats: COMPLETE Column stats: COMPLETE
>                   Filter Operator
>                     predicate: (d_date_sk is not null and d_month_seq BETWEEN 
> 1193 AND 1204) (type: boolean)
>                     Statistics: Num rows: 36524 Data size: 730480 Basic 
> stats: COMPLETE Column stats: COMPLETE
>                     Reduce Output Operator
>                       key expressions: d_date_sk (type: int)
>                       sort order: +
>                       Map-reduce partition columns: d_date_sk (type: int)
>                       Statistics: Num rows: 36524 Data size: 730480 Basic 
> stats: COMPLETE Column stats: COMPLETE
>                       value expressions: d_month_seq (type: int), d_year 
> (type: int), d_moy (type: int), d_qoy (type: int)
>             Execution mode: vectorized
>         Map 7 
>             Map Operator Tree:
>                 TableScan
>                   alias: item
>                   filterExpr: i_item_sk is not null (type: boolean)
>                   Statistics: Num rows: 48000 Data size: 68732712 Basic 
> stats: COMPLETE Column stats: COMPLETE
>                   Filter Operator
>                     predicate: i_item_sk is not null (type: boolean)
>                     Statistics: Num rows: 48000 Data size: 18672000 Basic 
> stats: COMPLETE Column stats: COMPLETE
>                     Reduce Output Operator
>                       key expressions: i_item_sk (type: int)
>                       sort order: +
>                       Map-reduce partition columns: i_item_sk (type: int)
>                       Statistics: Num rows: 48000 Data size: 18672000 Basic 
> stats: COMPLETE Column stats: COMPLETE
>                       value expressions: i_brand (type: string), i_class 
> (type: string), i_category (type: string), i_product_name (type: string)
>             Execution mode: vectorized
>         Reducer 2 
>             Reduce Operator Tree:
>               Group By Operator
>                 aggregations: sum(VALUE._col0)
>                 keys: KEY._col0 (type: string), KEY._col1 (type: string), 
> KEY._col2 (type: string), KEY._col3 (type: string), KEY._col4 (type: int), 
> KEY._col5 (type: int), KEY._col6 (type: int), KEY._col7 (type: string), 
> KEY._col8 (type: string)
>                 mode: mergepartial
>                 outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, 
> _col6, _col7, _col8, _col9
>                 Statistics: Num rows: 286838 Data size: 12523467 Basic stats: 
> COMPLETE Column stats: NONE
>                 Select Operator
>                   expressions: _col0 (type: string), _col1 (type: string), 
> _col2 (type: string), _col3 (type: string), _col4 (type: int), _col5 (type: 
> int), _col6 (type: int), _col7 (type: string), _col9 (type: double)
>                   outputColumnNames: _col0, _col1, _col2, _col3, _col4, 
> _col5, _col6, _col7, _col8
>                   Statistics: Num rows: 286838 Data size: 12523467 Basic 
> stats: COMPLETE Column stats: NONE
>                   Reduce Output Operator
>                     key expressions: _col0 (type: string), _col8 (type: 
> double)
>                     sort order: +-
>                     Map-reduce partition columns: _col0 (type: string)
>                     Statistics: Num rows: 286838 Data size: 12523467 Basic 
> stats: COMPLETE Column stats: NONE
>                     TopN Hash Memory Usage: 0.04
>                     value expressions: _col0 (type: string), _col1 (type: 
> string), _col2 (type: string), _col3 (type: string), _col4 (type: int), _col5 
> (type: int), _col6 (type: int), _col7 (type: string), _col8 (type: double)
>         Reducer 3 
>             Reduce Operator Tree:
>               Extract
>                 Statistics: Num rows: 286838 Data size: 12523467 Basic stats: 
> COMPLETE Column stats: NONE
>                 PTF Operator
>                   Statistics: Num rows: 286838 Data size: 12523467 Basic 
> stats: COMPLETE Column stats: NONE
>                   Filter Operator
>                     predicate: (_wcol0 <= 100) (type: boolean)
>                     Statistics: Num rows: 95612 Data size: 4174459 Basic 
> stats: COMPLETE Column stats: NONE
>                     Select Operator
>                       expressions: _col0 (type: string), _col1 (type: 
> string), _col2 (type: string), _col3 (type: string), _col4 (type: int), _col5 
> (type: int), _col6 (type: int), _col7 (type: string), _col8 (type: double), 
> _wcol0 (type: int)
>                       outputColumnNames: _col0, _col1, _col2, _col3, _col4, 
> _col5, _col6, _col7, _col8, _col9
>                       Statistics: Num rows: 95612 Data size: 4174459 Basic 
> stats: COMPLETE Column stats: NONE
>                       Reduce Output Operator
>                         key expressions: _col0 (type: string), _col1 (type: 
> string), _col2 (type: string), _col3 (type: string), _col4 (type: int), _col5 
> (type: int), _col6 (type: int), _col7 (type: string), _col8 (type: double), 
> _col9 (type: int)
>                         sort order: ++++++++++
>                         Statistics: Num rows: 95612 Data size: 4174459 Basic 
> stats: COMPLETE Column stats: NONE
>                         TopN Hash Memory Usage: 0.04
>         Reducer 4 
>             Reduce Operator Tree:
>               Select Operator
>                 expressions: KEY.reducesinkkey0 (type: string), 
> KEY.reducesinkkey1 (type: string), KEY.reducesinkkey2 (type: string), 
> KEY.reducesinkkey3 (type: string), KEY.reducesinkkey4 (type: int), 
> KEY.reducesinkkey5 (type: int), KEY.reducesinkkey6 (type: int), 
> KEY.reducesinkkey7 (type: string), KEY.reducesinkkey8 (type: double), 
> KEY.reducesinkkey9 (type: int)
>                 outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, 
> _col6, _col7, _col8, _col9
>                 Statistics: Num rows: 95612 Data size: 4174459 Basic stats: 
> COMPLETE Column stats: NONE
>                 Limit
>                   Number of rows: 100
>                   Statistics: Num rows: 100 Data size: 4300 Basic stats: 
> COMPLETE Column stats: NONE
>                   File Output Operator
>                     compressed: false
>                     Statistics: Num rows: 100 Data size: 4300 Basic stats: 
> COMPLETE Column stats: NONE
>                     table:
>                         input format: org.apache.hadoop.mapred.TextInputFormat
>                         output format: 
> org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
>                         serde: 
> org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
>             Execution mode: vectorized
>   Stage: Stage-0
>     Fetch Operator
>       limit: 100
>       Processor Tree:
>         ListSink
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to