mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-30 05:30:51 +00:00
Remove redundant parts from MergeTree
This commit is contained in:
parent
b49be4c7f2
commit
e0e77194f4
@ -422,9 +422,6 @@ void MergeTreeData::setProperties(const StorageInMemoryMetadata & metadata, bool
|
||||
new_sorting_key_data_types.push_back(new_sorting_key_sample.getByPosition(i).type);
|
||||
}
|
||||
|
||||
ASTPtr skip_indices_with_primary_key_expr_list = new_primary_key_expr_list->clone();
|
||||
ASTPtr skip_indices_with_sorting_key_expr_list = new_sorting_key_expr_list->clone();
|
||||
|
||||
if (!metadata.secondary_indices.empty())
|
||||
{
|
||||
std::set<String> indices_names;
|
||||
@ -439,24 +436,9 @@ void MergeTreeData::setProperties(const StorageInMemoryMetadata & metadata, bool
|
||||
"Index with name " + backQuote(index.name) + " already exsists",
|
||||
ErrorCodes::LOGICAL_ERROR);
|
||||
|
||||
for (const auto & expr : index.expression_list_ast->children)
|
||||
{
|
||||
skip_indices_with_primary_key_expr_list->children.push_back(expr->clone());
|
||||
skip_indices_with_sorting_key_expr_list->children.push_back(expr->clone());
|
||||
}
|
||||
|
||||
indices_names.insert(index.name);
|
||||
}
|
||||
}
|
||||
auto syntax_primary = SyntaxAnalyzer(global_context).analyze(
|
||||
skip_indices_with_primary_key_expr_list, all_columns);
|
||||
auto new_indices_with_primary_key_expr = ExpressionAnalyzer(
|
||||
skip_indices_with_primary_key_expr_list, syntax_primary, global_context).getActions(false);
|
||||
|
||||
auto syntax_sorting = SyntaxAnalyzer(global_context).analyze(
|
||||
skip_indices_with_sorting_key_expr_list, all_columns);
|
||||
auto new_indices_with_sorting_key_expr = ExpressionAnalyzer(
|
||||
skip_indices_with_sorting_key_expr_list, syntax_sorting, global_context).getActions(false);
|
||||
|
||||
if (!only_check)
|
||||
{
|
||||
@ -483,12 +465,39 @@ void MergeTreeData::setProperties(const StorageInMemoryMetadata & metadata, bool
|
||||
setSecondaryIndices(metadata.secondary_indices);
|
||||
|
||||
setConstraints(metadata.constraints);
|
||||
|
||||
primary_key_and_skip_indices_expr = new_indices_with_primary_key_expr;
|
||||
sorting_key_and_skip_indices_expr = new_indices_with_sorting_key_expr;
|
||||
}
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
ExpressionActionsPtr getCombinedIndicesExpression(
|
||||
const StorageMetadataKeyField & key,
|
||||
const IndicesDescription & indices,
|
||||
const ColumnsDescription & columns,
|
||||
const Context & context)
|
||||
{
|
||||
ASTPtr combined_expr_list = key.expression_list_ast->clone();
|
||||
|
||||
for (const auto & index : indices)
|
||||
for (const auto & index_expr : index.expression_list_ast->children)
|
||||
combined_expr_list->children.push_back(index_expr->clone());
|
||||
|
||||
auto syntax_result = SyntaxAnalyzer(context).analyze(combined_expr_list, columns.getAllPhysical());
|
||||
return ExpressionAnalyzer(combined_expr_list, syntax_result, context).getActions(false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ExpressionActionsPtr MergeTreeData::getPrimaryKeyAndSkipIndicesExpression() const
|
||||
{
|
||||
return getCombinedIndicesExpression(getPrimaryKey(), getSecondaryIndices(), getColumns(), global_context);
|
||||
}
|
||||
|
||||
ExpressionActionsPtr MergeTreeData::getSortingKeyAndSkipIndicesExpression() const
|
||||
{
|
||||
return getCombinedIndicesExpression(getSortingKey(), getSecondaryIndices(), getColumns(), global_context);
|
||||
}
|
||||
|
||||
ASTPtr MergeTreeData::extractKeyExpressionList(const ASTPtr & node)
|
||||
{
|
||||
|
@ -641,9 +641,8 @@ public:
|
||||
Int64 minmax_idx_date_column_pos = -1; /// In a common case minmax index includes a date column.
|
||||
Int64 minmax_idx_time_column_pos = -1; /// In other cases, minmax index often includes a dateTime column.
|
||||
|
||||
/// TODO (alesap) generate this expressions on fly
|
||||
ExpressionActionsPtr primary_key_and_skip_indices_expr;
|
||||
ExpressionActionsPtr sorting_key_and_skip_indices_expr;
|
||||
ExpressionActionsPtr getPrimaryKeyAndSkipIndicesExpression() const;
|
||||
ExpressionActionsPtr getSortingKeyAndSkipIndicesExpression() const;
|
||||
|
||||
std::optional<TTLDescription> selectTTLEntryForTTLInfos(const IMergeTreeDataPart::TTLInfos & ttl_infos, time_t time_of_move) const;
|
||||
|
||||
|
@ -795,7 +795,7 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mergePartsToTempor
|
||||
const auto & index_factory = MergeTreeIndexFactory::instance();
|
||||
if (data.hasSecondaryIndices())
|
||||
{
|
||||
merged_stream = std::make_shared<ExpressionBlockInputStream>(merged_stream, data.primary_key_and_skip_indices_expr);
|
||||
merged_stream = std::make_shared<ExpressionBlockInputStream>(merged_stream, data.getPrimaryKeyAndSkipIndicesExpression());
|
||||
merged_stream = std::make_shared<MaterializingBlockInputStream>(merged_stream);
|
||||
}
|
||||
|
||||
@ -1586,7 +1586,7 @@ void MergeTreeDataMergerMutator::mutateAllPartColumns(
|
||||
|
||||
if (data.hasPrimaryKey() || data.hasSecondaryIndices())
|
||||
mutating_stream = std::make_shared<MaterializingBlockInputStream>(
|
||||
std::make_shared<ExpressionBlockInputStream>(mutating_stream, data.primary_key_and_skip_indices_expr));
|
||||
std::make_shared<ExpressionBlockInputStream>(mutating_stream, data.getPrimaryKeyAndSkipIndicesExpression()));
|
||||
|
||||
if (need_remove_expired_values)
|
||||
mutating_stream = std::make_shared<TTLBlockInputStream>(mutating_stream, data, new_data_part, time_of_mutation, true);
|
||||
|
@ -264,7 +264,7 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataWriter::writeTempPart(BlockWithPa
|
||||
|
||||
/// If we need to calculate some columns to sort.
|
||||
if (data.hasSortingKey() || data.hasSecondaryIndices())
|
||||
data.sorting_key_and_skip_indices_expr->execute(block);
|
||||
data.getSortingKeyAndSkipIndicesExpression()->execute(block);
|
||||
|
||||
Names sort_columns = data.getSortingKeyColumns();
|
||||
SortDescription sort_description;
|
||||
|
Loading…
Reference in New Issue
Block a user