Merge pull request #40305 from ClickHouse/sort_mode_rename

Sorting mode renaming
This commit is contained in:
Igor Nikonov 2022-09-05 11:59:35 +02:00 committed by GitHub
commit 025c7a1ae0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 36 additions and 36 deletions

View File

@ -108,7 +108,7 @@ void DistinctStep::transformPipeline(QueryPipelineBuilder & pipeline, const Buil
return;
}
/// final distinct for sorted stream (sorting inside and among chunks)
if (input_stream.sort_mode == DataStream::SortMode::Stream)
if (input_stream.sort_scope == DataStream::SortScope::Global)
{
assert(input_stream.has_single_port);

View File

@ -31,18 +31,18 @@ public:
/// QueryPipeline has single port. Totals or extremes ports are not counted.
bool has_single_port = false;
/// How data is sorted.
enum class SortMode
/// Sorting scope
enum class SortScope
{
None,
Chunk, /// Separate chunks are sorted
Port, /// Data from each port is sorted
Stream, /// Data is globally sorted
Stream, /// Each data steam is sorted
Global, /// Data is globally sorted
};
/// It is not guaranteed that header has columns from sort_description.
SortDescription sort_description = {};
SortMode sort_mode = SortMode::None;
SortScope sort_scope = SortScope::None;
/// Things which may be added:
/// * limit
@ -54,7 +54,7 @@ public:
return distinct_columns == other.distinct_columns
&& has_single_port == other.has_single_port
&& sort_description == other.sort_description
&& (sort_description.empty() || sort_mode == other.sort_mode);
&& (sort_description.empty() || sort_scope == other.sort_scope);
}
bool hasEqualHeaderWith(const DataStream & other) const

View File

@ -29,7 +29,7 @@ DataStream ITransformingStep::createOutputStream(
if (stream_traits.preserves_sorting)
{
output_stream.sort_description = input_stream.sort_description;
output_stream.sort_mode = input_stream.sort_mode;
output_stream.sort_scope = input_stream.sort_scope;
}
return output_stream;

View File

@ -333,8 +333,8 @@ static void explainStep(
{
if (step.hasOutputStream())
{
settings.out << prefix << "Sorting (" << step.getOutputStream().sort_mode << ")";
if (step.getOutputStream().sort_mode != DataStream::SortMode::None)
settings.out << prefix << "Sorting (" << step.getOutputStream().sort_scope << ")";
if (step.getOutputStream().sort_scope != DataStream::SortScope::None)
{
settings.out << ": ";
dumpSortDescription(step.getOutputStream().sort_description, settings.out);

View File

@ -143,9 +143,9 @@ ReadFromMergeTree::ReadFromMergeTree(
{
auto const & settings = context->getSettingsRef();
if ((settings.optimize_read_in_order || settings.optimize_aggregation_in_order) && query_info.getInputOrderInfo())
output_stream->sort_mode = DataStream::SortMode::Port;
output_stream->sort_scope = DataStream::SortScope::Stream;
else
output_stream->sort_mode = DataStream::SortMode::Chunk;
output_stream->sort_scope = DataStream::SortScope::Chunk;
}
output_stream->sort_description = std::move(sort_description);

View File

@ -55,7 +55,7 @@ SortingStep::SortingStep(
{
/// TODO: check input_stream is partially sorted by the same description.
output_stream->sort_description = result_description;
output_stream->sort_mode = DataStream::SortMode::Stream;
output_stream->sort_scope = DataStream::SortScope::Global;
}
SortingStep::SortingStep(
@ -73,7 +73,7 @@ SortingStep::SortingStep(
{
/// TODO: check input_stream is sorted by prefix_description.
output_stream->sort_description = result_description;
output_stream->sort_mode = DataStream::SortMode::Stream;
output_stream->sort_scope = DataStream::SortScope::Global;
}
SortingStep::SortingStep(
@ -89,14 +89,14 @@ SortingStep::SortingStep(
{
/// TODO: check input_stream is partially sorted (each port) by the same description.
output_stream->sort_description = result_description;
output_stream->sort_mode = DataStream::SortMode::Stream;
output_stream->sort_scope = DataStream::SortScope::Global;
}
void SortingStep::updateOutputStream()
{
output_stream = createOutputStream(input_streams.front(), input_streams.front().header, getDataStreamTraits());
output_stream->sort_description = result_description;
output_stream->sort_mode = DataStream::SortMode::Stream;
output_stream->sort_scope = DataStream::SortScope::Global;
}
void SortingStep::updateLimit(size_t limit_)
@ -256,23 +256,23 @@ void SortingStep::transformPipeline(QueryPipelineBuilder & pipeline, const Build
return;
}
const auto input_sort_mode = input_streams.front().sort_mode;
const auto input_sort_mode = input_streams.front().sort_scope;
const SortDescription & input_sort_desc = input_streams.front().sort_description;
if (optimize_sorting_by_input_stream_properties)
{
/// skip sorting if stream is already sorted
if (input_sort_mode == DataStream::SortMode::Stream && input_sort_desc.hasPrefix(result_description))
if (input_sort_mode == DataStream::SortScope::Global && input_sort_desc.hasPrefix(result_description))
return;
/// merge sorted
if (input_sort_mode == DataStream::SortMode::Port && input_sort_desc.hasPrefix(result_description))
if (input_sort_mode == DataStream::SortScope::Stream && input_sort_desc.hasPrefix(result_description))
{
mergingSorted(pipeline, result_description, limit);
return;
}
/// if chunks already sorted according to result_sort_desc, then we can skip chunk sorting
if (input_sort_mode == DataStream::SortMode::Chunk && input_sort_desc.hasPrefix(result_description))
if (input_sort_mode == DataStream::SortScope::Chunk && input_sort_desc.hasPrefix(result_description))
{
const bool skip_partial_sort = true;
fullSort(pipeline, result_description, limit, skip_partial_sort);

View File

@ -1,8 +1,8 @@
-- EXPLAIN PLAN sorting for MergeTree w/o sorting key
-- QUERY: set optimize_read_in_order=1;EXPLAIN PLAN actions=1, header=1, sorting=1 SELECT a FROM optimize_sorting ORDER BY a
Sorting (Stream): a ASC
Sorting (Global): a ASC
Sorting (Sorting for ORDER BY)
Sorting (Stream): a ASC
Sorting (Global): a ASC
Sorting (None)
Sorting (None)
-- disable optimization -> sorting order is NOT propagated from subquery -> full sort
@ -20,22 +20,22 @@ LimitsCheckingTransform
PartialSortingTransform
-- ExpressionStep preserves sort mode
-- QUERY: set optimize_read_in_order=1;EXPLAIN PLAN actions=1, header=1, sorting=1 SELECT a FROM optimize_sorting ORDER BY a
Sorting (Stream): a ASC
Sorting (Global): a ASC
Sorting
Sorting (Global): a ASC
Sorting (Stream): a ASC
Sorting (Stream): a ASC
Sorting (Port): a ASC
Sorting (Port): a ASC
-- QUERY: set optimize_read_in_order=1;EXPLAIN PLAN actions=1, header=1, sorting=1 SELECT a FROM optimize_sorting ORDER BY a+1
Sorting (None)
Sorting (Sorting for ORDER BY)
Sorting (Stream): plus(a, 1) ASC
Sorting (Global): plus(a, 1) ASC
Sorting (Chunk): a ASC
Sorting (Chunk): a ASC
-- ExpressionStep breaks sort mode
-- QUERY: set optimize_read_in_order=1;EXPLAIN PLAN actions=1, header=1, sorting=1 SELECT a+1 FROM optimize_sorting ORDER BY a+1
Sorting (Stream): plus(a, 1) ASC
Sorting (Global): plus(a, 1) ASC
Sorting (Sorting for ORDER BY)
Sorting (Stream): plus(a, 1) ASC
Sorting (Global): plus(a, 1) ASC
Sorting (None)
Sorting (Chunk): a ASC
-- FilterStep preserves sort mode
@ -62,28 +62,28 @@ Sorting (None)
Sorting (Chunk): a ASC
-- aliases break sorting order
-- QUERY: set optimize_read_in_order=1;EXPLAIN PLAN actions=1, header=1, sorting=1 SELECT a FROM (SELECT sipHash64(a) AS a FROM (SELECT a FROM optimize_sorting ORDER BY a)) ORDER BY a
Sorting (Stream): a ASC
Sorting (Global): a ASC
Sorting (Sorting for ORDER BY)
Sorting (Stream): a ASC
Sorting (Global): a ASC
Sorting (None)
Sorting
Sorting (Global): a ASC
Sorting (Stream): a ASC
Sorting (Stream): a ASC
Sorting (Port): a ASC
Sorting (Port): a ASC
-- aliases DONT break sorting order
-- QUERY: set optimize_read_in_order=1;EXPLAIN PLAN actions=1, header=1, sorting=1 SELECT a, b FROM (SELECT x AS a, y AS b FROM (SELECT a AS x, b AS y FROM optimize_sorting) ORDER BY x, y)
Sorting (Stream): x ASC, y ASC
Sorting (Global): x ASC, y ASC
Sorting (Sorting for ORDER BY)
Sorting (Stream): x ASC, y ASC
Sorting (Global): x ASC, y ASC
Sorting (Chunk): a ASC, b ASC
Sorting (Chunk): a ASC, b ASC
-- actions chain breaks sorting order: input(column a)->sipHash64(column a)->alias(sipHash64(column a), a)->plus(alias a, 1)
-- QUERY: set optimize_read_in_order=1;EXPLAIN PLAN actions=1, header=1, sorting=1 SELECT a, z FROM (SELECT sipHash64(a) AS a, a + 1 AS z FROM (SELECT a FROM optimize_sorting ORDER BY a + 1)) ORDER BY a + 1
Sorting (None)
Sorting (Sorting for ORDER BY)
Sorting (Stream): plus(a, 1) ASC
Sorting (Global): plus(a, 1) ASC
Sorting (None)
Sorting (Sorting for ORDER BY)
Sorting (Stream): plus(a, 1) ASC
Sorting (Global): plus(a, 1) ASC
Sorting (Chunk): a ASC
Sorting (Chunk): a ASC