mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 08:40:50 +00:00
Rebuild minmax_count_projection when partition key gets modified
This commit is contained in:
parent
165b0f0afe
commit
81804ce9ba
@ -11,6 +11,7 @@
|
||||
#include <Interpreters/ExpressionActions.h>
|
||||
#include <Interpreters/addTypeConversionToAST.h>
|
||||
#include <Interpreters/ExpressionAnalyzer.h>
|
||||
#include <Interpreters/FunctionNameNormalizer.h>
|
||||
#include <Interpreters/TreeRewriter.h>
|
||||
#include <Interpreters/RenameColumnVisitor.h>
|
||||
#include <Interpreters/GinFilter.h>
|
||||
@ -937,8 +938,21 @@ void AlterCommands::apply(StorageInMemoryMetadata & metadata, ContextPtr context
|
||||
|
||||
/// And in partition key expression
|
||||
if (metadata_copy.partition_key.definition_ast != nullptr)
|
||||
{
|
||||
metadata_copy.partition_key.recalculateWithNewAST(metadata_copy.partition_key.definition_ast, metadata_copy.columns, context);
|
||||
|
||||
/// If partition key expression is changed, we also need to rebuild minmax_count_projection
|
||||
if (!blocksHaveEqualStructure(metadata_copy.partition_key.sample_block, metadata.partition_key.sample_block))
|
||||
{
|
||||
auto minmax_columns = metadata_copy.getColumnsRequiredForPartitionKey();
|
||||
auto partition_key = metadata_copy.partition_key.expression_list_ast->clone();
|
||||
FunctionNameNormalizer().visit(partition_key.get());
|
||||
auto primary_key_asts = metadata_copy.primary_key.expression_list_ast->children;
|
||||
metadata_copy.minmax_count_projection.emplace(ProjectionDescription::getMinMaxCountProjection(
|
||||
metadata_copy.columns, partition_key, minmax_columns, primary_key_asts, context));
|
||||
}
|
||||
}
|
||||
|
||||
// /// And in sample key expression
|
||||
if (metadata_copy.sampling_key.definition_ast != nullptr)
|
||||
metadata_copy.sampling_key.recalculateWithNewAST(metadata_copy.sampling_key.definition_ast, metadata_copy.columns, context);
|
||||
|
@ -0,0 +1,3 @@
|
||||
x 1
|
||||
x 1
|
||||
y 1
|
@ -0,0 +1,13 @@
|
||||
DROP TABLE IF EXISTS test;
|
||||
|
||||
CREATE TABLE test (type Enum('x'), s String) ENGINE = MergeTree ORDER BY s PARTITION BY type;
|
||||
INSERT INTO test VALUES ('x', 'Hello');
|
||||
|
||||
SELECT type, count() FROM test GROUP BY type ORDER BY type;
|
||||
|
||||
ALTER TABLE test MODIFY COLUMN type Enum('x', 'y');
|
||||
INSERT INTO test VALUES ('y', 'World');
|
||||
|
||||
SELECT type, count() FROM test GROUP BY type ORDER BY type;
|
||||
|
||||
DROP TABLE test;
|
Loading…
Reference in New Issue
Block a user