Merge pull request #32348 from CurtizJ/fix-materialize-column

Add cast to `MATERIALIZE COLUMN`
This commit is contained in:
Kruglov Pavel 2021-12-08 11:13:17 +03:00 committed by GitHub
commit e0a8c5a4ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 53 additions and 1 deletions

View File

@ -569,7 +569,10 @@ ASTPtr MutationsInterpreter::prepare(bool dry_run)
stages.emplace_back(context);
const auto & column = columns_desc.get(command.column_name);
stages.back().column_to_updated.emplace(column.name, column.default_desc.expression->clone());
auto materialized_column = makeASTFunction(
"_CAST", column.default_desc.expression->clone(), std::make_shared<ASTLiteral>(column.type->getName()));
stages.back().column_to_updated.emplace(column.name, materialized_column);
}
else if (command.type == MutationCommand::MATERIALIZE_INDEX)
{

View File

@ -0,0 +1,14 @@
1_1_1_0_2 i Int32
1_1_1_0_2 s LowCardinality(String)
===========
1_1_1_0_2 i Int32
1_1_1_0_2 s LowCardinality(String)
2_3_3_0 i Int32
2_3_3_0 s LowCardinality(String)
===========
1_1_1_0_4 i Int32
1_1_1_0_4 s LowCardinality(String)
2_3_3_0_4 i Int32
2_3_3_0_4 s LowCardinality(String)
1 1
2 2

View File

@ -0,0 +1,35 @@
DROP TABLE IF EXISTS t_materialize_column;
CREATE TABLE t_materialize_column (i Int32)
ENGINE = MergeTree ORDER BY i PARTITION BY i
SETTINGS min_bytes_for_wide_part = 0;
INSERT INTO t_materialize_column VALUES (1);
ALTER TABLE t_materialize_column ADD COLUMN s LowCardinality(String) DEFAULT toString(i);
ALTER TABLE t_materialize_column MATERIALIZE COLUMN s SETTINGS mutations_sync = 2;
SELECT name, column, type FROM system.parts_columns
WHERE table = 't_materialize_column' AND database = currentDatabase() AND active
ORDER BY name, column;
SELECT '===========';
INSERT INTO t_materialize_column (i) VALUES (2);
SELECT name, column, type FROM system.parts_columns
WHERE table = 't_materialize_column' AND database = currentDatabase() AND active
ORDER BY name, column;
SELECT '===========';
ALTER TABLE t_materialize_column ADD INDEX s_bf (s) TYPE bloom_filter(0.01) GRANULARITY 1;
ALTER TABLE t_materialize_column MATERIALIZE INDEX s_bf SETTINGS mutations_sync = 2;
SELECT name, column, type FROM system.parts_columns
WHERE table = 't_materialize_column' AND database = currentDatabase() AND active
ORDER BY name, column;
SELECT * FROM t_materialize_column ORDER BY i;
DROP TABLE t_materialize_column;