Add special setting to show indexes.

This commit is contained in:
Nikolai Kochetov 2021-04-16 14:11:45 +03:00
parent 6fe3470893
commit 23089a2fec
8 changed files with 21 additions and 37 deletions

View File

@ -129,6 +129,7 @@ struct QueryPlanSettings
{"header", query_plan_options.header},
{"description", query_plan_options.description},
{"actions", query_plan_options.actions},
{"indexes", query_plan_options.indexes},
{"optimize", optimize},
};
};

View File

@ -99,6 +99,9 @@ public:
/// Get detailed description of step actions. This is shown in EXPLAIN query with options `actions = 1`.
virtual void describeActions(FormatSettings & /*settings*/) const {}
/// Get detailed description of read-from-storage step indexes (if any). Shown in with options `indexes = 1`.
virtual void describeIndexes(FormatSettings & /*settings*/) const {}
/// Get description of processors added in current step. Should be called after updatePipeline().
virtual void describePipeline(FormatSettings & /*settings*/) const {}

View File

@ -243,6 +243,9 @@ static void explainStep(
if (options.actions)
step.describeActions(settings);
if (options.indexes)
step.describeIndexes(settings);
}
std::string debugExplainStep(const IQueryPlanStep & step)

View File

@ -66,6 +66,8 @@ public:
bool description = true;
/// Add detailed information about step actions.
bool actions = false;
/// Add information about indexes actions.
bool indexes = false;
};
struct ExplainPipelineOptions

View File

@ -191,6 +191,16 @@ void ReadFromMergeTree::describeActions(FormatSettings & format_settings) const
std::string prefix(format_settings.offset, format_settings.indent_char);
format_settings.out << prefix << "ReadType: " << readTypeToString(read_type) << '\n';
if (index_stats && !index_stats->empty())
{
format_settings.out << prefix << "Parts: " << index_stats->back().num_parts_after << '\n';
format_settings.out << prefix << "Granules: " << index_stats->back().num_granules_after << '\n';
}
}
void ReadFromMergeTree::describeIndexes(FormatSettings & format_settings) const
{
std::string prefix(format_settings.offset, format_settings.indent_char);
if (index_stats && !index_stats->empty())
{
std::string indent(format_settings.indent, format_settings.indent_char);
@ -233,9 +243,6 @@ void ReadFromMergeTree::describeActions(FormatSettings & format_settings) const
format_settings.out << '/' << (*index_stats)[i - 1].num_granules_after;
format_settings.out << '\n';
}
format_settings.out << prefix << "Parts: " << index_stats->back().num_parts_after << '\n';
format_settings.out << prefix << "Granules: " << index_stats->back().num_granules_after << '\n';
}
}

View File

@ -85,6 +85,7 @@ public:
void initializePipeline(QueryPipeline & pipeline, const BuildQueryPipelineSettings &) override;
void describeActions(FormatSettings & format_settings) const override;
void describeIndexes(FormatSettings & format_settings) const override;
private:
const MergeTreeData & storage;

View File

@ -1,5 +1,4 @@
ReadFromMergeTree
ReadType: Default
Indexes:
MinMax
Keys:
@ -31,45 +30,13 @@
Description: set GRANULARITY 2
Parts: 1/1
Granules: 1/2
Parts: 1
Granules: 1
-----------------
ReadFromMergeTree
ReadType: InOrder
Indexes:
MinMax
Description: true
Parts: 5/5
Granules: 12/12
Partition
Description: true
Parts: 5/5
Granules: 12/12
PrimaryKey
Keys:
x
Description: (x in [16, +inf))
Parts: 1/5
Granules: 3/12
Parts: 1
Granules: 3
-----------------
ReadFromMergeTree
ReadType: InReverseOrder
Indexes:
MinMax
Description: true
Parts: 5/5
Granules: 12/12
Partition
Description: true
Parts: 5/5
Granules: 12/12
PrimaryKey
Keys:
x
Description: (x in [16, +inf))
Parts: 1/5
Granules: 3/12
Parts: 1
Granules: 3

View File

@ -8,7 +8,7 @@ $CLICKHOUSE_CLIENT -q "create table test_index (x UInt32, y UInt32, z UInt32, t
$CLICKHOUSE_CLIENT -q "insert into test_index select number, number > 3 ? 3 : number, number = 1 ? 1 : 0, number from numbers(20)"
$CLICKHOUSE_CLIENT -q "
explain actions = 1 select *, _part from test_index where t % 19 = 16 and y > 0 and bitAnd(z, 3) != 1 and x > 10 and t % 20 > 14;
explain indexes = 1 select *, _part from test_index where t % 19 = 16 and y > 0 and bitAnd(z, 3) != 1 and x > 10 and t % 20 > 14;
" | grep -A 100 "ReadFromMergeTree" # | grep -v "Description"
echo "-----------------"