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

Joe McDonnell updated IMPALA-15089:
-----------------------------------
    Summary: Multiple aggregation row size is overestimated  (was: Multiple 
aggregation tuple size is overestimated)

> Multiple aggregation row size is overestimated
> ----------------------------------------------
>
>                 Key: IMPALA-15089
>                 URL: https://issues.apache.org/jira/browse/IMPALA-15089
>             Project: IMPALA
>          Issue Type: Improvement
>          Components: Frontend
>    Affects Versions: Impala 5.0.0
>            Reporter: Joe McDonnell
>            Priority: Major
>
> For a query with multiple aggregations (e.g. TPC-DS Q67), the streaming 
> aggregation is returning multiple tuples, but at most one will be set. 
> However, the row size calculations simply add up all the individual tuple 
> sizes and will overestimate the row size. This interacts with the exchange 
> sender to limit the number of rows included in each message.
> For example, on TPC-DS Q67, we have this streaming aggregation node:
> {noformat}
> 07:AGGREGATE [STREAMING]
> |  Class 0
> |    output: sum(coalesce(ss_sales_price * CAST(ss_quantity AS 
> DECIMAL(10,0)), CAST(0 AS DECIMAL(18,2))))
> |    group by: i_category, i_class, i_brand, i_product_name, d_year, d_qoy, 
> d_moy, s_store_id
> |  Class 1
> |    output: sum(coalesce(ss_sales_price * CAST(ss_quantity AS 
> DECIMAL(10,0)), CAST(0 AS DECIMAL(18,2))))
> |    group by: i_category, i_class, i_brand, i_product_name, d_year, d_qoy, 
> d_moy, NULL
> |  Class 2
> |    output: sum(coalesce(ss_sales_price * CAST(ss_quantity AS 
> DECIMAL(10,0)), CAST(0 AS DECIMAL(18,2))))
> |    group by: i_category, i_class, i_brand, i_product_name, d_year, d_qoy, 
> NULL, NULL
> |  Class 3
> |    output: sum(coalesce(ss_sales_price * CAST(ss_quantity AS 
> DECIMAL(10,0)), CAST(0 AS DECIMAL(18,2))))
> |    group by: i_category, i_class, i_brand, i_product_name, d_year, NULL, 
> NULL, NULL
> |  Class 4
> |    output: sum(coalesce(ss_sales_price * CAST(ss_quantity AS 
> DECIMAL(10,0)), CAST(0 AS DECIMAL(18,2))))
> |    group by: i_category, i_class, i_brand, i_product_name, NULL, NULL, 
> NULL, NULL
> |  Class 5
> |    output: sum(coalesce(ss_sales_price * CAST(ss_quantity AS 
> DECIMAL(10,0)), CAST(0 AS DECIMAL(18,2))))
> |    group by: i_category, i_class, i_brand, NULL, NULL, NULL, NULL, NULL
> |  Class 6
> |    output: sum(coalesce(ss_sales_price * CAST(ss_quantity AS 
> DECIMAL(10,0)), CAST(0 AS DECIMAL(18,2))))
> |    group by: i_category, i_class, NULL, NULL, NULL, NULL, NULL, NULL
> |  Class 7
> |    output: sum(coalesce(ss_sales_price * CAST(ss_quantity AS 
> DECIMAL(10,0)), CAST(0 AS DECIMAL(18,2))))
> |    group by: i_category, NULL, NULL, NULL, NULL, NULL, NULL, NULL
> |  Class 8
> |    output: sum(coalesce(ss_sales_price * CAST(ss_quantity AS 
> DECIMAL(10,0)), CAST(0 AS DECIMAL(18,2))))
> |    group by: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
> |  mem-estimate=3.14GB mem-reservation=211.00MB thread-reservation=0
> |  tuple-ids=4N,5N,6N,7N,8N,9N,10N,11N,12N row-size=1.07KB cardinality=11.63M
> |  in pipelines: 00(GETNEXT){noformat}
> The row size of 1.07KB is overestimate what actually gets sent through the 
> subsequent exchange. More accurately estimating the row size for the exchange 
> could help it size the messages appropriately.
> However, AggregationNode also uses the row size to estimate the size of its 
> hash tables. For that, it does need to know about all the tuples, because it 
> will have a hash table for each tuple.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to