Took PREWHERE into account.

This commit is contained in:
Vladimir Chebotarev 2021-07-04 18:06:15 +03:00
parent 6f5a72c963
commit e5cbd82879
3 changed files with 35 additions and 14 deletions

View File

@ -231,6 +231,19 @@ std::vector<size_t> MergeTreeReadPool::fillPerPartInfo(
auto [required_columns, required_pre_columns, should_reorder] = auto [required_columns, required_pre_columns, should_reorder] =
getReadTaskColumns(data, metadata_snapshot, part.data_part, column_names, prewhere_info, check_columns); getReadTaskColumns(data, metadata_snapshot, part.data_part, column_names, prewhere_info, check_columns);
if (predict_block_size_bytes)
{
const auto & required_column_names = required_columns.getNames();
const auto & required_pre_column_names = required_pre_columns.getNames();
NameSet complete_column_names(required_column_names.begin(), required_column_names.end());
complete_column_names.insert(required_pre_column_names.begin(), required_pre_column_names.end());
per_part_size_predictor.emplace_back(std::make_unique<MergeTreeBlockSizePredictor>(
part.data_part, Names(complete_column_names.begin(), complete_column_names.end()), sample_block));
}
else
per_part_size_predictor.emplace_back(nullptr);
/// will be used to distinguish between PREWHERE and WHERE columns when applying filter /// will be used to distinguish between PREWHERE and WHERE columns when applying filter
const auto & required_column_names = required_columns.getNames(); const auto & required_column_names = required_columns.getNames();
per_part_column_name_set.emplace_back(required_column_names.begin(), required_column_names.end()); per_part_column_name_set.emplace_back(required_column_names.begin(), required_column_names.end());
@ -240,14 +253,6 @@ std::vector<size_t> MergeTreeReadPool::fillPerPartInfo(
per_part_should_reorder.push_back(should_reorder); per_part_should_reorder.push_back(should_reorder);
parts_with_idx.push_back({ part.data_part, part.part_index_in_query }); parts_with_idx.push_back({ part.data_part, part.part_index_in_query });
if (predict_block_size_bytes)
{
per_part_size_predictor.emplace_back(std::make_unique<MergeTreeBlockSizePredictor>(
part.data_part, required_column_names, sample_block));
}
else
per_part_size_predictor.emplace_back(nullptr);
} }
return per_part_sum_marks; return per_part_sum_marks;

View File

@ -93,9 +93,17 @@ try
MarkRanges mark_ranges_for_task = { all_mark_ranges.back() }; MarkRanges mark_ranges_for_task = { all_mark_ranges.back() };
all_mark_ranges.pop_back(); all_mark_ranges.pop_back();
auto size_predictor = (preferred_block_size_bytes == 0) std::unique_ptr<MergeTreeBlockSizePredictor> size_predictor;
? nullptr if (preferred_block_size_bytes)
: std::make_unique<MergeTreeBlockSizePredictor>(data_part, task_columns.columns.getNames(), metadata_snapshot->getSampleBlock()); {
const auto & required_column_names = task_columns.columns.getNames();
const auto & required_pre_column_names = task_columns.pre_columns.getNames();
NameSet complete_column_names(required_column_names.begin(), required_column_names.end());
complete_column_names.insert(required_pre_column_names.begin(), required_pre_column_names.end());
size_predictor = std::make_unique<MergeTreeBlockSizePredictor>(
data_part, Names(complete_column_names.begin(), complete_column_names.end()), metadata_snapshot->getSampleBlock());
}
task = std::make_unique<MergeTreeReadTask>( task = std::make_unique<MergeTreeReadTask>(
data_part, mark_ranges_for_task, part_index_in_query, ordered_names, column_name_set, data_part, mark_ranges_for_task, part_index_in_query, ordered_names, column_name_set,

View File

@ -71,9 +71,17 @@ try
storage, metadata_snapshot, data_part, storage, metadata_snapshot, data_part,
required_columns, prewhere_info, check_columns); required_columns, prewhere_info, check_columns);
auto size_predictor = (preferred_block_size_bytes == 0) std::unique_ptr<MergeTreeBlockSizePredictor> size_predictor;
? nullptr if (preferred_block_size_bytes)
: std::make_unique<MergeTreeBlockSizePredictor>(data_part, task_columns.columns.getNames(), metadata_snapshot->getSampleBlock()); {
const auto & required_column_names = task_columns.columns.getNames();
const auto & required_pre_column_names = task_columns.pre_columns.getNames();
NameSet complete_column_names(required_column_names.begin(), required_column_names.end());
complete_column_names.insert(required_pre_column_names.begin(), required_pre_column_names.end());
size_predictor = std::make_unique<MergeTreeBlockSizePredictor>(
data_part, Names(complete_column_names.begin(), complete_column_names.end()), metadata_snapshot->getSampleBlock());
}
/// will be used to distinguish between PREWHERE and WHERE columns when applying filter /// will be used to distinguish between PREWHERE and WHERE columns when applying filter
const auto & column_names = task_columns.columns.getNames(); const auto & column_names = task_columns.columns.getNames();