| ==== |
| ---- QUERY |
| set buffer_pool_limit=10m; |
| select l_orderkey, count(*) |
| from lineitem |
| group by 1 |
| order by 1 limit 10 |
| ---- RESULTS |
| 1,6 |
| 2,1 |
| 3,6 |
| 4,1 |
| 5,3 |
| 6,1 |
| 7,7 |
| 32,6 |
| 33,4 |
| 34,3 |
| ---- TYPES |
| BIGINT, BIGINT |
| ---- RUNTIME_PROFILE |
| # Verify that spilling and passthrough were activated. |
| row_regex: .*SpilledPartitions: .* \([1-9][0-9]*\) |
| row_regex: .*RowsPassedThrough: .* \([1-9][0-9]*\) |
| ==== |
| ---- QUERY |
| # Test query with string grouping column and string agg columns |
| set buffer_pool_limit=10m; |
| set num_nodes=1; |
| select l_returnflag, l_orderkey, avg(l_tax), min(l_shipmode) |
| from lineitem |
| group by 1,2 |
| order by 1,2 limit 3 |
| ---- RESULTS |
| 'A',3,0.05,'RAIL' |
| 'A',5,0.03,'AIR' |
| 'A',6,0.03,'TRUCK' |
| ---- TYPES |
| STRING, BIGINT, DECIMAL, STRING |
| ---- RUNTIME_PROFILE |
| row_regex: .*SpilledPartitions: .* \([1-9][0-9]*\) |
| row_regex: .*NumRepartitions: .* \([1-9][0-9]*\) |
| ==== |
| ---- QUERY |
| set buffer_pool_limit=10m; |
| select l_orderkey, count(*) |
| from lineitem |
| group by 1 |
| order by 1 limit 10; |
| ---- RESULTS |
| 1,6 |
| 2,1 |
| 3,6 |
| 4,1 |
| 5,3 |
| 6,1 |
| 7,7 |
| 32,6 |
| 33,4 |
| 34,3 |
| ---- TYPES |
| BIGINT, BIGINT |
| ---- RUNTIME_PROFILE |
| row_regex: .*SpilledPartitions: .* \([1-9][0-9]*\) |
| row_regex: .*RowsPassedThrough: .* \([1-9][0-9]*\) |
| ==== |
| ---- QUERY |
| # Test query with string grouping column |
| set buffer_pool_limit=10m; |
| set num_nodes=1; |
| select l_comment, count(*) |
| from lineitem |
| group by 1 |
| order by count(*) desc limit 5 |
| ---- RESULTS |
| ' furiously',943 |
| ' carefully',893 |
| ' carefully ',875 |
| 'carefully ',854 |
| ' furiously ',845 |
| ---- TYPES |
| STRING, BIGINT |
| ---- RUNTIME_PROFILE |
| row_regex: .*SpilledPartitions: .* \([1-9][0-9]*\) |
| row_regex: .*NumRepartitions: .* \([1-9][0-9]*\) |
| ==== |
| ---- QUERY |
| # Test query with string grouping column and string agg columns |
| set buffer_pool_limit=10m; |
| set num_nodes=1; |
| select l_returnflag, l_orderkey, round(avg(l_tax),2), min(l_shipmode) |
| from lineitem |
| group by 1,2 |
| order by 1,2 limit 3; |
| ---- RESULTS |
| 'A',3,0.05,'RAIL' |
| 'A',5,0.03,'AIR' |
| 'A',6,0.03,'TRUCK' |
| ---- TYPES |
| STRING, BIGINT, DECIMAL, STRING |
| ---- RUNTIME_PROFILE |
| # Verify that spilling happened in the agg. |
| row_regex: .*SpilledPartitions: .* \([1-9][0-9]*\) |
| row_regex: .*NumRepartitions: .* \([1-9][0-9]*\) |
| ==== |
| ---- QUERY |
| # Test with non-scalar intermediate state (avg() uses fixed intermediate value). |
| set buffer_pool_limit=10m; |
| select l_orderkey, avg(l_orderkey) |
| from lineitem |
| group by 1 |
| order by 1 limit 5 |
| ---- RESULTS |
| 1,1 |
| 2,2 |
| 3,3 |
| 4,4 |
| 5,5 |
| ---- TYPES |
| BIGINT, DOUBLE |
| ---- RUNTIME_PROFILE |
| # Verify that passthrough and spilling happened in the pre and merge agg. |
| row_regex: .*SpilledPartitions: .* \([1-9][0-9]*\) |
| row_regex: .*RowsPassedThrough: .* \([1-9][0-9]*\) |
| ==== |
| ---- QUERY |
| # Test aggregation spill with group_concat distinct |
| set buffer_pool_limit=30m; |
| select l_orderkey, count(*), group_concat(distinct l_linestatus, '|') |
| from lineitem |
| group by 1 |
| order by 1 limit 10 |
| ---- RESULTS |
| 1,6,'O' |
| 2,1,'O' |
| 3,6,'F' |
| 4,1,'O' |
| 5,3,'F' |
| 6,1,'F' |
| 7,7,'O' |
| 32,6,'O' |
| 33,4,'F' |
| 34,3,'O' |
| ---- TYPES |
| BIGINT, BIGINT, STRING |
| ---- RUNTIME_PROFILE |
| # Verify that at least one of the aggs spilled. |
| row_regex: .*SpilledPartitions: .* \([1-9][0-9]*\) |
| ==== |
| ---- QUERY |
| # Regression test for IMPALA-2612. The following query will cause CastToChar |
| # to be invoked when building the hash tables in partitioned aggregation |
| # nodes. CastToChar will do "local" memory allocation. Without the fix of |
| # IMPALA-2612, the peak memory consumption will be higher. |
| set mem_limit=800m; |
| set num_scanner_threads=1; |
| select count(distinct concat(cast(l_comment as char(120)), cast(l_comment as char(120)), |
| cast(l_comment as char(120)), cast(l_comment as char(120)), |
| cast(l_comment as char(120)), cast(l_comment as char(120)))) |
| from lineitem |
| ---- RESULTS |
| 4502054 |
| ---- TYPES |
| BIGINT |
| ---- RUNTIME_PROFILE |
| # Verify that the agg spilled. |
| row_regex: .*SpilledPartitions: .* \([1-9][0-9]*\) |
| ==== |
| ---- QUERY |
| # Test aggregation with minimum required reservation to exercise IMPALA-2708. |
| # Merge aggregation requires 17 buffers and preaggregation requires 16 buffers |
| # plus 1mb of hash tables. The buffer size is 256k for this test. |
| set max_row_size=256k; |
| set buffer_pool_limit=9472k; |
| select count(*) |
| from (select distinct * from orders) t |
| ---- TYPES |
| BIGINT |
| ---- RESULTS |
| 1500000 |
| ---- RUNTIME_PROFILE |
| row_regex: .*SpilledPartitions: .* \([1-9][0-9]*\) |
| ==== |
| ---- QUERY |
| # IMPALA-3304: test that avg() can spill with a query mem limit. |
| # This test only covers that use FIXED_UDA_INTERMEDIATE, not functions that allocate |
| # strings for intermediate values. |
| set mem_limit=150m; |
| select l_orderkey, avg(l_tax), avg(l_quantity), avg(l_discount), avg(l_extendedprice) |
| from tpch_parquet.lineitem |
| group by 1 |
| order by avg(l_extendedprice) desc, avg(l_discount) |
| limit 5 |
| ---- TYPES |
| BIGINT,DECIMAL,DECIMAL,DECIMAL,DECIMAL |
| ---- RESULTS |
| 3811460,0.05,50.00,0.05,104899.50 |
| 1744195,0.04,50.00,0.09,104649.50 |
| 5151266,0.07,50.00,0.00,104449.50 |
| 4571042,0.03,50.00,0.09,104399.50 |
| 1198304,0.01,50.00,0.02,104299.50 |
| ---- RUNTIME_PROFILE |
| row_regex: .*SpilledPartitions: .* \([1-9][0-9]*\) |
| ==== |