Merge pull request #58638 from amosbird/fix-58620

Fix broken partition key analysis when doing projection optimization
This commit is contained in:
Nikolai Kochetov 2024-01-11 14:17:48 +01:00 committed by GitHub
commit f83cf1a6b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 12 additions and 16 deletions

View File

@ -615,7 +615,6 @@ bool optimizeUseAggregateProjections(QueryPlan::Node & node, QueryPlan::Nodes &
reader,
required_column_names,
parts_with_ranges,
metadata,
query_info,
context,
max_added_blocks,

View File

@ -173,7 +173,6 @@ bool optimizeUseNormalProjections(Stack & stack, QueryPlan::Nodes & nodes)
reader,
required_columns,
parts_with_ranges,
metadata,
query_info,
context,
max_added_blocks,

View File

@ -211,7 +211,6 @@ bool analyzeProjectionCandidate(
const MergeTreeDataSelectExecutor & reader,
const Names & required_column_names,
const RangesInDataParts & parts_with_ranges,
const StorageMetadataPtr & metadata,
const SelectQueryInfo & query_info,
const ContextPtr & context,
const std::shared_ptr<PartitionIdToMaxBlock> & max_added_blocks,
@ -242,7 +241,6 @@ bool analyzeProjectionCandidate(
std::move(projection_parts),
nullptr,
required_column_names,
metadata,
candidate.projection->metadata,
query_info, /// How it is actually used? I hope that for index we need only added_filter_nodes
added_filter_nodes,

View File

@ -57,7 +57,6 @@ bool analyzeProjectionCandidate(
const MergeTreeDataSelectExecutor & reader,
const Names & required_column_names,
const RangesInDataParts & parts_with_ranges,
const StorageMetadataPtr & metadata,
const SelectQueryInfo & query_info,
const ContextPtr & context,
const std::shared_ptr<PartitionIdToMaxBlock> & max_added_blocks,

View File

@ -1263,7 +1263,6 @@ ReadFromMergeTree::AnalysisResultPtr ReadFromMergeTree::selectRangesToRead(
std::move(alter_conversions),
prewhere_info,
filter_nodes,
storage_snapshot->metadata,
metadata_for_reading,
query_info,
context,
@ -1459,7 +1458,6 @@ ReadFromMergeTree::AnalysisResultPtr ReadFromMergeTree::selectRangesToRead(
std::vector<AlterConversionsPtr> alter_conversions,
const PrewhereInfoPtr & prewhere_info,
const ActionDAGNodes & added_filter_nodes,
const StorageMetadataPtr & metadata_snapshot_base,
const StorageMetadataPtr & metadata_snapshot,
const SelectQueryInfo & query_info,
ContextPtr context,
@ -1477,7 +1475,6 @@ ReadFromMergeTree::AnalysisResultPtr ReadFromMergeTree::selectRangesToRead(
return selectRangesToReadImpl(
std::move(parts),
std::move(alter_conversions),
metadata_snapshot_base,
metadata_snapshot,
updated_query_info_with_filter_dag,
context,
@ -1493,7 +1490,6 @@ ReadFromMergeTree::AnalysisResultPtr ReadFromMergeTree::selectRangesToRead(
ReadFromMergeTree::AnalysisResultPtr ReadFromMergeTree::selectRangesToReadImpl(
MergeTreeData::DataPartsVector parts,
std::vector<AlterConversionsPtr> alter_conversions,
const StorageMetadataPtr & metadata_snapshot_base,
const StorageMetadataPtr & metadata_snapshot,
const SelectQueryInfo & query_info,
ContextPtr context,
@ -1554,7 +1550,7 @@ ReadFromMergeTree::AnalysisResultPtr ReadFromMergeTree::selectRangesToReadImpl(
parts,
alter_conversions,
indexes->part_values,
metadata_snapshot_base,
metadata_snapshot,
data,
context,
max_block_numbers_to_read.get(),

View File

@ -160,7 +160,6 @@ public:
std::vector<AlterConversionsPtr> alter_conversions,
const PrewhereInfoPtr & prewhere_info,
const ActionDAGNodes & added_filter_nodes,
const StorageMetadataPtr & metadata_snapshot_base,
const StorageMetadataPtr & metadata_snapshot,
const SelectQueryInfo & query_info,
ContextPtr context,
@ -210,7 +209,6 @@ private:
static AnalysisResultPtr selectRangesToReadImpl(
MergeTreeData::DataPartsVector parts,
std::vector<AlterConversionsPtr> alter_conversions,
const StorageMetadataPtr & metadata_snapshot_base,
const StorageMetadataPtr & metadata_snapshot,
const SelectQueryInfo & query_info,
ContextPtr context,

View File

@ -6924,7 +6924,6 @@ UInt64 MergeTreeData::estimateNumberOfRowsToRead(
query_info.prewhere_info,
storage_snapshot->getMetadataForQuery()->getColumns().getAll().getNames(),
storage_snapshot->metadata,
storage_snapshot->metadata,
query_info,
added_filter_nodes,
query_context,

View File

@ -513,6 +513,7 @@ void MergeTreeDataSelectExecutor::filterPartsByPartition(
if (metadata_snapshot->hasPartitionKey())
{
chassert(minmax_idx_condition && partition_pruner);
const auto & partition_key = metadata_snapshot->getPartitionKey();
minmax_columns_types = data.getMinMaxColumnsTypes(partition_key);
@ -934,7 +935,6 @@ ReadFromMergeTree::AnalysisResultPtr MergeTreeDataSelectExecutor::estimateNumMar
MergeTreeData::DataPartsVector parts,
const PrewhereInfoPtr & prewhere_info,
const Names & column_names_to_return,
const StorageMetadataPtr & metadata_snapshot_base,
const StorageMetadataPtr & metadata_snapshot,
const SelectQueryInfo & query_info,
const ActionDAGNodes & added_filter_nodes,
@ -962,7 +962,6 @@ ReadFromMergeTree::AnalysisResultPtr MergeTreeDataSelectExecutor::estimateNumMar
/*alter_conversions=*/ {},
prewhere_info,
added_filter_nodes,
metadata_snapshot_base,
metadata_snapshot,
query_info,
context,

View File

@ -58,7 +58,6 @@ public:
MergeTreeData::DataPartsVector parts,
const PrewhereInfoPtr & prewhere_info,
const Names & column_names,
const StorageMetadataPtr & metadata_snapshot_base,
const StorageMetadataPtr & metadata_snapshot,
const SelectQueryInfo & query_info,
const ActionDAGNodes & added_filter_nodes,

View File

@ -0,0 +1,9 @@
drop table if exists a;
create table a (i int, j int, projection p (select * order by j)) engine MergeTree partition by i order by tuple() settings index_granularity = 1;
insert into a values (1, 2), (0, 5), (3, 4);
select * from a where i > 0 and j = 4 settings force_index_by_date = 1;
drop table a;