Merge pull request #27424 from azat/WithMergeableStateAfterAggregationAndLimit-tests-fixes

Fix tests for WithMergeableStateAfterAggregationAndLimit
This commit is contained in:
alexey-milovidov 2021-08-08 18:14:04 +03:00 committed by GitHub
commit 560e71dcfa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 28 additions and 17 deletions

View File

@ -1378,7 +1378,7 @@ void InterpreterSelectQuery::executeImpl(QueryPlan & query_plan, const BlockInpu
/// Limit is no longer needed if there is prelimit.
///
/// NOTE: that LIMIT cannot be applied of OFFSET should not be applied,
/// NOTE: that LIMIT cannot be applied if OFFSET should not be applied,
/// since LIMIT will apply OFFSET too.
/// This is the case for various optimizations for distributed queries,
/// and when LIMIT cannot be applied it will be applied on the initiator anyway.

View File

@ -553,7 +553,6 @@ std::optional<QueryProcessingStage::Enum> StorageDistributed::getOptimizedQueryP
if (const ASTPtr order_by = select.orderBy())
return default_stage;
// LIMIT BY
// LIMIT
// OFFSET
if (select.limitLength() || select.limitOffset())

View File

@ -1,7 +1,7 @@
-- { echo }
explain select * from remote('127.{1,2}', view(select * from numbers(1e6))) order by number limit 10 settings distributed_push_down_limit=0;
Expression (Projection)
Limit (preliminary LIMIT)
Limit (preliminary LIMIT (without OFFSET))
MergingSorted (Merge sorted streams after aggregation stage for ORDER BY)
SettingQuotaAndLimits (Set limits and quota after reading from storage)
Union
@ -16,11 +16,11 @@ Expression (Projection)
ReadFromRemote (Read from remote replica)
explain select * from remote('127.{1,2}', view(select * from numbers(1e6))) order by number limit 10 settings distributed_push_down_limit=1;
Expression (Projection)
Limit (preliminary LIMIT)
Limit (preliminary LIMIT (without OFFSET))
MergingSorted (Merge sorted streams after aggregation stage for ORDER BY)
SettingQuotaAndLimits (Set limits and quota after reading from storage)
Union
Limit (preliminary LIMIT)
Limit (preliminary LIMIT (with OFFSET))
MergingSorted (Merge sorted streams for ORDER BY)
MergeSorting (Merge sorted blocks for ORDER BY)
PartialSorting (Sort each block for ORDER BY)

View File

@ -1,8 +1,9 @@
-- { echo }
SELECT *
FROM remote('127.{1,2}', view(
SELECT *
FROM numbers(10)
SELECT number%20 number
FROM numbers(40)
WHERE (number % 2) = (shardNum() - 1)
), number)
GROUP BY number
ORDER BY number ASC
@ -19,8 +20,9 @@ SETTINGS
9
SELECT *
FROM remote('127.{1,2}', view(
SELECT *
FROM numbers(10)
SELECT number%20 number
FROM numbers(40)
WHERE (number % 2) = (shardNum() - 1)
), number)
GROUP BY number
ORDER BY number ASC

View File

@ -1,8 +1,17 @@
-- Here we use a trick with shardNum() to generate unique data on each shard.
-- Since distributed_group_by_no_merge=2 will use WithMergeableStateAfterAggregationAndLimit,
-- which assume that the data on shards is unique
-- (LIMIT BY will be applied only on shards, not on the initiator).
-- To distinguish echoing from the comments above we use SELECT FORMAT Null.
SELECT '' FORMAT Null;
-- { echo }
SELECT *
FROM remote('127.{1,2}', view(
SELECT *
FROM numbers(10)
SELECT number%20 number
FROM numbers(40)
WHERE (number % 2) = (shardNum() - 1)
), number)
GROUP BY number
ORDER BY number ASC
@ -14,8 +23,9 @@ SETTINGS
distributed_push_down_limit=1;
SELECT *
FROM remote('127.{1,2}', view(
SELECT *
FROM numbers(10)
SELECT number%20 number
FROM numbers(40)
WHERE (number % 2) = (shardNum() - 1)
), number)
GROUP BY number
ORDER BY number ASC