mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 08:32:02 +00:00
Merge pull request #23047 from ClickHouse/fix_attach_mv
Fix attach MV in Atomic database
This commit is contained in:
commit
7614a18ff2
@ -723,7 +723,7 @@ static void generateUUIDForTable(ASTCreateQuery & create)
|
||||
/// If destination table (to_table_id) is not specified for materialized view,
|
||||
/// then MV will create inner table. We should generate UUID of inner table here,
|
||||
/// so it will be the same on all hosts if query in ON CLUSTER or database engine is Replicated.
|
||||
bool need_uuid_for_inner_table = create.is_materialized_view && !create.to_table_id;
|
||||
bool need_uuid_for_inner_table = !create.attach && create.is_materialized_view && !create.to_table_id;
|
||||
if (need_uuid_for_inner_table && create.to_inner_uuid == UUIDHelpers::Nil)
|
||||
create.to_inner_uuid = UUIDHelpers::generateV4();
|
||||
}
|
||||
|
@ -76,10 +76,15 @@ StorageMaterializedView::StorageMaterializedView(
|
||||
storage_metadata.setSelectQuery(select);
|
||||
setInMemoryMetadata(storage_metadata);
|
||||
|
||||
bool point_to_itself_by_uuid = has_inner_table && query.to_inner_uuid != UUIDHelpers::Nil
|
||||
&& query.to_inner_uuid == table_id_.uuid;
|
||||
bool point_to_itself_by_name = !has_inner_table && query.to_table_id.database_name == table_id_.database_name
|
||||
&& query.to_table_id.table_name == table_id_.table_name;
|
||||
if (point_to_itself_by_uuid || point_to_itself_by_name)
|
||||
throw Exception(ErrorCodes::BAD_ARGUMENTS, "Materialized view {} cannot point to itself", table_id_.getFullTableName());
|
||||
|
||||
if (!has_inner_table)
|
||||
{
|
||||
if (query.to_table_id.database_name == table_id_.database_name && query.to_table_id.table_name == table_id_.table_name)
|
||||
throw Exception(ErrorCodes::BAD_ARGUMENTS, "Materialized view {} cannot point to itself", table_id_.getFullTableName());
|
||||
target_table_id = query.to_table_id;
|
||||
}
|
||||
else if (attach_)
|
||||
|
22
tests/queries/0_stateless/01153_attach_mv_uuid.reference
Normal file
22
tests/queries/0_stateless/01153_attach_mv_uuid.reference
Normal file
@ -0,0 +1,22 @@
|
||||
1 1
|
||||
2 4
|
||||
1 1
|
||||
2 4
|
||||
3 9
|
||||
4 16
|
||||
CREATE MATERIALIZED VIEW default.mv UUID \'e15f3ab5-6cae-4df3-b879-f40deafd82c2\'\n(\n `n` Int32,\n `n2` Int64\n)\nENGINE = MergeTree\nPARTITION BY n % 10\nORDER BY n AS\nSELECT\n n,\n n * n AS n2\nFROM default.src
|
||||
1 1
|
||||
2 4
|
||||
CREATE MATERIALIZED VIEW default.mv UUID \'e15f3ab5-6cae-4df3-b879-f40deafd82c2\'\n(\n `n` Int32,\n `n2` Int64\n)\nENGINE = MergeTree\nPARTITION BY n % 10\nORDER BY n AS\nSELECT\n n,\n n * n AS n2\nFROM default.src
|
||||
1 1
|
||||
2 4
|
||||
3 9
|
||||
4 16
|
||||
CREATE MATERIALIZED VIEW default.mv UUID \'e15f3ab5-6cae-4df3-b879-f40deafd82c2\' TO INNER UUID \'3bd68e3c-2693-4352-ad66-a66eba9e345e\'\n(\n `n` Int32,\n `n2` Int64\n)\nENGINE = MergeTree\nPARTITION BY n % 10\nORDER BY n AS\nSELECT\n n,\n n * n AS n2\nFROM default.src
|
||||
1 1
|
||||
2 4
|
||||
CREATE MATERIALIZED VIEW default.mv UUID \'e15f3ab5-6cae-4df3-b879-f40deafd82c2\' TO INNER UUID \'3bd68e3c-2693-4352-ad66-a66eba9e345e\'\n(\n `n` Int32,\n `n2` Int64\n)\nENGINE = MergeTree\nPARTITION BY n % 10\nORDER BY n AS\nSELECT\n n,\n n * n AS n2\nFROM default.src
|
||||
1 1
|
||||
2 4
|
||||
3 9
|
||||
4 16
|
42
tests/queries/0_stateless/01153_attach_mv_uuid.sql
Normal file
42
tests/queries/0_stateless/01153_attach_mv_uuid.sql
Normal file
@ -0,0 +1,42 @@
|
||||
DROP TABLE IF EXISTS src;
|
||||
DROP TABLE IF EXISTS mv;
|
||||
DROP TABLE IF EXISTS ".inner_id.e15f3ab5-6cae-4df3-b879-f40deafd82c2";
|
||||
|
||||
CREATE TABLE src (n UInt64) ENGINE=MergeTree ORDER BY n;
|
||||
CREATE MATERIALIZED VIEW mv (n Int32, n2 Int64) ENGINE = MergeTree PARTITION BY n % 10 ORDER BY n AS SELECT n, n * n AS n2 FROM src;
|
||||
INSERT INTO src VALUES (1), (2);
|
||||
SELECT * FROM mv ORDER BY n;
|
||||
DETACH TABLE mv;
|
||||
ATTACH TABLE mv;
|
||||
INSERT INTO src VALUES (3), (4);
|
||||
SELECT * FROM mv ORDER BY n;
|
||||
DROP TABLE mv SYNC;
|
||||
|
||||
SET show_table_uuid_in_table_create_query_if_not_nil=1;
|
||||
CREATE TABLE ".inner_id.e15f3ab5-6cae-4df3-b879-f40deafd82c2" (n Int32, n2 Int64) ENGINE = MergeTree PARTITION BY n % 10 ORDER BY n;
|
||||
ATTACH MATERIALIZED VIEW mv UUID 'e15f3ab5-6cae-4df3-b879-f40deafd82c2' (n Int32, n2 Int64) ENGINE = MergeTree PARTITION BY n % 10 ORDER BY n AS SELECT n, n * n AS n2 FROM src;
|
||||
SHOW CREATE TABLE mv;
|
||||
INSERT INTO src VALUES (1), (2);
|
||||
SELECT * FROM mv ORDER BY n;
|
||||
DETACH TABLE mv;
|
||||
ATTACH TABLE mv;
|
||||
SHOW CREATE TABLE mv;
|
||||
INSERT INTO src VALUES (3), (4);
|
||||
SELECT * FROM mv ORDER BY n;
|
||||
DROP TABLE mv SYNC;
|
||||
|
||||
CREATE TABLE ".inner_id.e15f3ab5-6cae-4df3-b879-f40deafd82c2" UUID '3bd68e3c-2693-4352-ad66-a66eba9e345e' (n Int32, n2 Int64) ENGINE = MergeTree PARTITION BY n % 10 ORDER BY n;
|
||||
ATTACH MATERIALIZED VIEW mv UUID 'e15f3ab5-6cae-4df3-b879-f40deafd82c2' TO INNER UUID '3bd68e3c-2693-4352-ad66-a66eba9e345e' (n Int32, n2 Int64) ENGINE = MergeTree PARTITION BY n % 10 ORDER BY n AS SELECT n, n * n AS n2 FROM src;
|
||||
SHOW CREATE TABLE mv;
|
||||
INSERT INTO src VALUES (1), (2);
|
||||
SELECT * FROM mv ORDER BY n;
|
||||
DETACH TABLE mv;
|
||||
ATTACH TABLE mv;
|
||||
SHOW CREATE TABLE mv;
|
||||
INSERT INTO src VALUES (3), (4);
|
||||
SELECT * FROM mv ORDER BY n;
|
||||
DROP TABLE mv SYNC;
|
||||
|
||||
ATTACH MATERIALIZED VIEW mv UUID '3bd68e3c-2693-4352-ad66-a66eba9e345e' TO INNER UUID '3bd68e3c-2693-4352-ad66-a66eba9e345e' (n Int32, n2 Int64) ENGINE = MergeTree PARTITION BY n % 10 ORDER BY n AS SELECT n, n * n AS n2 FROM src; -- { serverError 36 }
|
||||
|
||||
DROP TABLE src;
|
@ -91,6 +91,7 @@
|
||||
01125_dict_ddl_cannot_add_column
|
||||
01129_dict_get_join_lose_constness
|
||||
01138_join_on_distributed_and_tmp
|
||||
01153_attach_mv_uuid
|
||||
01191_rename_dictionary
|
||||
01200_mutations_memory_consumption
|
||||
01211_optimize_skip_unused_shards_type_mismatch
|
||||
|
@ -105,7 +105,8 @@
|
||||
"00604_show_create_database",
|
||||
"00609_mv_index_in_in",
|
||||
"00510_materizlized_view_and_deduplication_zookeeper",
|
||||
"00738_lock_for_inner_table"
|
||||
"00738_lock_for_inner_table",
|
||||
"01153_attach_mv_uuid"
|
||||
],
|
||||
"database-replicated": [
|
||||
"memory_tracking",
|
||||
@ -557,6 +558,7 @@
|
||||
"01135_default_and_alter_zookeeper",
|
||||
"01148_zookeeper_path_macros_unfolding",
|
||||
"01150_ddl_guard_rwr",
|
||||
"01153_attach_mv_uuid",
|
||||
"01152_cross_replication",
|
||||
"01185_create_or_replace_table",
|
||||
"01190_full_attach_syntax",
|
||||
|
Loading…
Reference in New Issue
Block a user