From 9a08139b1fd49122e17dcdecc5255a124f552925 Mon Sep 17 00:00:00 2001 From: Jan Teske Date: Mon, 1 Dec 2025 16:52:47 +0100 Subject: [PATCH] catalog: add mz_replacements system relation This commit adds a new `mz_replacements` builtin table, exposing the replacement MV relationship. It also adds a `replacing` column to the `SHOW MATERIALIZED VIEWS` output, fueled by the new `mz_replacements` table. --- .../content/sql/system-catalog/mz_internal.md | 1 + .../src/catalog/builtin_table_updates.rs | 15 +- src/catalog/src/builtin.rs | 46 +- src/environmentd/tests/testdata/http/ws | 4 +- src/pgrepr-consts/src/oid.rs | 3 +- src/sql/src/plan/statement/show.rs | 20 +- test/mysql-cdc-old-syntax/alter-source.td | 4 +- test/mysql-cdc/alter-source.td | 4 +- test/pg-cdc-old-syntax/alter-source.td | 4 +- test/pg-cdc/alter-source.td | 4 +- .../sql-server-cdc-old-syntax/alter-source.td | 4 +- .../autogenerated/mz_internal.slt | 1 + .../information_schema_tables.slt | 4 + test/sqllogictest/materialized_views.slt | 22 +- .../mz_catalog_server_index_accounting.slt | 95 ++-- test/sqllogictest/oid.slt | 1 + .../replacement-materialized-views.slt | 56 +- test/sqllogictest/system-cluster.slt | 4 +- .../materializations.td | 506 ------------------ test/testdrive/catalog.td | 3 +- test/testdrive/materializations.td | 6 +- test/testdrive/system-cluster.td | 4 +- 22 files changed, 180 insertions(+), 631 deletions(-) delete mode 100644 test/testdrive-old-kafka-src-syntax/materializations.td diff --git a/doc/user/content/sql/system-catalog/mz_internal.md b/doc/user/content/sql/system-catalog/mz_internal.md index be42805ec9a3f..d4b5dcc43450d 100644 --- a/doc/user/content/sql/system-catalog/mz_internal.md +++ b/doc/user/content/sql/system-catalog/mz_internal.md @@ -1344,6 +1344,7 @@ The `mz_webhook_sources` table contains a row for each webhook source in the sys + diff --git a/src/adapter/src/catalog/builtin_table_updates.rs b/src/adapter/src/catalog/builtin_table_updates.rs index b0f8571b9c783..4f92f60daddda 100644 --- a/src/adapter/src/catalog/builtin_table_updates.rs +++ b/src/adapter/src/catalog/builtin_table_updates.rs @@ -26,8 +26,8 @@ use mz_catalog::builtin::{ MZ_MATERIALIZED_VIEW_REFRESH_STRATEGIES, MZ_MATERIALIZED_VIEWS, MZ_MYSQL_SOURCE_TABLES, MZ_NETWORK_POLICIES, MZ_NETWORK_POLICY_RULES, MZ_OBJECT_DEPENDENCIES, MZ_OBJECT_GLOBAL_IDS, MZ_OPERATORS, MZ_PENDING_CLUSTER_REPLICAS, MZ_POSTGRES_SOURCE_TABLES, MZ_POSTGRES_SOURCES, - MZ_PSEUDO_TYPES, MZ_ROLE_AUTH, MZ_ROLE_MEMBERS, MZ_ROLE_PARAMETERS, MZ_ROLES, MZ_SCHEMAS, - MZ_SECRETS, MZ_SESSIONS, MZ_SINKS, MZ_SOURCE_REFERENCES, MZ_SOURCES, + MZ_PSEUDO_TYPES, MZ_REPLACEMENTS, MZ_ROLE_AUTH, MZ_ROLE_MEMBERS, MZ_ROLE_PARAMETERS, MZ_ROLES, + MZ_SCHEMAS, MZ_SECRETS, MZ_SESSIONS, MZ_SINKS, MZ_SOURCE_REFERENCES, MZ_SOURCES, MZ_SQL_SERVER_SOURCE_TABLES, MZ_SSH_TUNNEL_CONNECTIONS, MZ_STORAGE_USAGE_BY_SHARD, MZ_SUBSCRIPTIONS, MZ_SYSTEM_PRIVILEGES, MZ_TABLES, MZ_TYPE_PG_METADATA, MZ_TYPES, MZ_VIEWS, MZ_WEBHOOKS_SOURCES, @@ -1538,6 +1538,17 @@ impl CatalogState { )); } + if let Some(target_id) = mview.replacement_target { + updates.push(BuiltinTableUpdate::row( + &*MZ_REPLACEMENTS, + Row::pack_slice(&[ + Datum::String(&id.to_string()), + Datum::String(&target_id.to_string()), + ]), + diff, + )); + } + updates } diff --git a/src/catalog/src/builtin.rs b/src/catalog/src/builtin.rs index b5ffa6ffbda9e..1e15bc866ce75 100644 --- a/src/catalog/src/builtin.rs +++ b/src/catalog/src/builtin.rs @@ -5545,6 +5545,28 @@ pub static MZ_LICENSE_KEYS: LazyLock = LazyLock::new(|| BuiltinTab access: vec![PUBLIC_SELECT], }); +pub static MZ_REPLACEMENTS: LazyLock = LazyLock::new(|| BuiltinTable { + name: "mz_replacements", + schema: MZ_INTERNAL_SCHEMA, + oid: oid::TABLE_MZ_REPLACEMENTS_OID, + desc: RelationDesc::builder() + .with_column("id", SqlScalarType::String.nullable(false)) + .with_column("target_id", SqlScalarType::String.nullable(false)) + .finish(), + column_comments: BTreeMap::from_iter([ + ( + "id", + "The ID of the replacement object. Corresponds to `mz_objects.id`.", + ), + ( + "target_id", + "The ID of the replacement target. Corresponds to `mz_objects.id`.", + ), + ]), + is_retained_metrics_object: false, + access: vec![PUBLIC_SELECT], +}); + // These will be replaced with per-replica tables once source/sink multiplexing on // a single cluster is supported. pub static MZ_SOURCE_STATISTICS_RAW: LazyLock = LazyLock::new(|| BuiltinSource { @@ -11105,25 +11127,34 @@ pub static MZ_SHOW_MATERIALIZED_VIEWS: LazyLock = LazyLock::new(|| .with_column("schema_id", SqlScalarType::String.nullable(false)) .with_column("cluster_id", SqlScalarType::String.nullable(false)) .with_column("comment", SqlScalarType::String.nullable(false)) + .with_column("replacing", SqlScalarType::String.nullable(true)) .finish(), column_comments: BTreeMap::new(), sql: " -WITH comments AS ( - SELECT id, comment - FROM mz_internal.mz_comments - WHERE object_type = 'materialized-view' AND object_sub_id IS NULL -) +WITH + comments AS ( + SELECT id, comment + FROM mz_internal.mz_comments + WHERE object_type = 'materialized-view' AND object_sub_id IS NULL + ), + replacements AS ( + SELECT r.id, mv.name AS target_name + FROM mz_internal.mz_replacements r + JOIN mz_materialized_views mv ON r.target_id = mv.id + ) SELECT mviews.id as id, mviews.name, clusters.name AS cluster, schema_id, cluster_id, - COALESCE(comments.comment, '') as comment + COALESCE(comments.comment, '') as comment, + replacements.target_name as replacing FROM mz_catalog.mz_materialized_views AS mviews JOIN mz_catalog.mz_clusters AS clusters ON clusters.id = mviews.cluster_id - LEFT JOIN comments ON mviews.id = comments.id", + LEFT JOIN comments ON mviews.id = comments.id + LEFT JOIN replacements ON mviews.id = replacements.id", access: vec![PUBLIC_SELECT], }); @@ -13839,6 +13870,7 @@ pub static BUILTINS_STATIC: LazyLock>> = LazyLock::ne Builtin::Table(&MZ_NETWORK_POLICIES), Builtin::Table(&MZ_NETWORK_POLICY_RULES), Builtin::Table(&MZ_LICENSE_KEYS), + Builtin::Table(&MZ_REPLACEMENTS), Builtin::View(&MZ_RELATIONS), Builtin::View(&MZ_OBJECT_OID_ALIAS), Builtin::View(&MZ_OBJECTS), diff --git a/src/environmentd/tests/testdata/http/ws b/src/environmentd/tests/testdata/http/ws index 94623d6b8dd80..31e3f21ea8d22 100644 --- a/src/environmentd/tests/testdata/http/ws +++ b/src/environmentd/tests/testdata/http/ws @@ -410,7 +410,7 @@ ws-text ws-text {"query": "SELECT 1 FROM mz_sources LIMIT 1"} ---- -{"type":"Notice","payload":{"message":"{\n \"plans\": {\n \"raw\": {\n \"text\": \"Finish limit=1 output=[#0]\\n Project (#15)\\n Map (1)\\n Get mz_catalog.mz_sources\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"Project\": {\n \"input\": {\n \"Map\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"System\": 469\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"Oid\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": {\n \"Array\": \"MzAclItem\"\n },\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n }\n ],\n \"keys\": [\n [\n 0\n ],\n [\n 1\n ]\n ]\n }\n }\n },\n \"scalars\": [\n {\n \"Literal\": [\n {\n \"data\": [\n 45,\n 1\n ]\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n },\n null\n ]\n }\n ]\n }\n },\n \"outputs\": [\n 15\n ]\n }\n }\n },\n \"optimized\": {\n \"global\": {\n \"text\": \"t62:\\n Finish limit=1 output=[#0]\\n ArrangeBy keys=[[#0]]\\n ReadGlobalFromSameDataflow t61\\n\\nt61:\\n Project (#15)\\n Map (1)\\n ReadIndex on=mz_sources mz_sources_ind=[*** full scan ***]\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"plans\": [\n {\n \"id\": \"t62\",\n \"plan\": {\n \"ArrangeBy\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"Transient\": 61\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ],\n \"keys\": []\n },\n \"access_strategy\": \"SameDataflow\"\n }\n },\n \"keys\": [\n [\n {\n \"Column\": [\n 0,\n null\n ]\n }\n ]\n ]\n }\n }\n },\n {\n \"id\": \"t61\",\n \"plan\": {\n \"Project\": {\n \"input\": {\n \"Map\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"System\": 469\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"Oid\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": {\n \"Array\": \"MzAclItem\"\n },\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n }\n ],\n \"keys\": [\n [\n 0\n ],\n [\n 1\n ]\n ]\n },\n \"access_strategy\": {\n \"Index\": [\n [\n {\n \"System\": 752\n },\n \"FullScan\"\n ]\n ]\n }\n }\n },\n \"scalars\": [\n {\n \"Literal\": [\n {\n \"Ok\": {\n \"data\": [\n 45,\n 1\n ]\n }\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ]\n }\n },\n \"outputs\": [\n 15\n ]\n }\n }\n }\n ],\n \"sources\": []\n }\n },\n \"fast_path\": {\n \"text\": \"Explained Query (fast path):\\n Finish limit=1 output=[#0]\\n →Map/Filter/Project\\n Project: #15\\n Map: 1\\n →Indexed mz_catalog.mz_sources (using mz_catalog.mz_sources_ind)\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"plans\": [\n {\n \"id\": \"Explained Query (fast path)\",\n \"plan\": {\n \"PeekExisting\": [\n {\n \"System\": 469\n },\n {\n \"System\": 752\n },\n null,\n {\n \"mfp\": {\n \"expressions\": [\n {\n \"Literal\": [\n {\n \"Ok\": {\n \"data\": [\n 45,\n 1\n ]\n }\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ],\n \"predicates\": [],\n \"projection\": [\n 15\n ],\n \"input_arity\": 15\n }\n }\n ]\n }\n }\n ],\n \"sources\": []\n }\n }\n }\n },\n \"insights\": {\n \"imports\": {\n \"s752\": {\n \"name\": {\n \"schema\": \"mz_catalog\",\n \"item\": \"mz_sources_ind\"\n },\n \"type\": \"compute\"\n }\n },\n \"fast_path_clusters\": {},\n \"fast_path_limit\": null,\n \"persist_count\": []\n },\n \"cluster\": {\n \"name\": \"mz_catalog_server\",\n \"id\": {\n \"System\": 2\n }\n },\n \"redacted_sql\": \"SELECT '' FROM [s469 AS mz_catalog.mz_sources] LIMIT ''\"\n}","code":"MZ001","severity":"notice"}} +{"type":"Notice","payload":{"message":"{\n \"plans\": {\n \"raw\": {\n \"text\": \"Finish limit=1 output=[#0]\\n Project (#15)\\n Map (1)\\n Get mz_catalog.mz_sources\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"Project\": {\n \"input\": {\n \"Map\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"System\": 469\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"Oid\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": {\n \"Array\": \"MzAclItem\"\n },\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n }\n ],\n \"keys\": [\n [\n 0\n ],\n [\n 1\n ]\n ]\n }\n }\n },\n \"scalars\": [\n {\n \"Literal\": [\n {\n \"data\": [\n 45,\n 1\n ]\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n },\n null\n ]\n }\n ]\n }\n },\n \"outputs\": [\n 15\n ]\n }\n }\n },\n \"optimized\": {\n \"global\": {\n \"text\": \"t62:\\n Finish limit=1 output=[#0]\\n ArrangeBy keys=[[#0]]\\n ReadGlobalFromSameDataflow t61\\n\\nt61:\\n Project (#15)\\n Map (1)\\n ReadIndex on=mz_sources mz_sources_ind=[*** full scan ***]\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"plans\": [\n {\n \"id\": \"t62\",\n \"plan\": {\n \"ArrangeBy\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"Transient\": 61\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ],\n \"keys\": []\n },\n \"access_strategy\": \"SameDataflow\"\n }\n },\n \"keys\": [\n [\n {\n \"Column\": [\n 0,\n null\n ]\n }\n ]\n ]\n }\n }\n },\n {\n \"id\": \"t61\",\n \"plan\": {\n \"Project\": {\n \"input\": {\n \"Map\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"System\": 469\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"Oid\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": {\n \"Array\": \"MzAclItem\"\n },\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n }\n ],\n \"keys\": [\n [\n 0\n ],\n [\n 1\n ]\n ]\n },\n \"access_strategy\": {\n \"Index\": [\n [\n {\n \"System\": 753\n },\n \"FullScan\"\n ]\n ]\n }\n }\n },\n \"scalars\": [\n {\n \"Literal\": [\n {\n \"Ok\": {\n \"data\": [\n 45,\n 1\n ]\n }\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ]\n }\n },\n \"outputs\": [\n 15\n ]\n }\n }\n }\n ],\n \"sources\": []\n }\n },\n \"fast_path\": {\n \"text\": \"Explained Query (fast path):\\n Finish limit=1 output=[#0]\\n →Map/Filter/Project\\n Project: #15\\n Map: 1\\n →Indexed mz_catalog.mz_sources (using mz_catalog.mz_sources_ind)\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"plans\": [\n {\n \"id\": \"Explained Query (fast path)\",\n \"plan\": {\n \"PeekExisting\": [\n {\n \"System\": 469\n },\n {\n \"System\": 753\n },\n null,\n {\n \"mfp\": {\n \"expressions\": [\n {\n \"Literal\": [\n {\n \"Ok\": {\n \"data\": [\n 45,\n 1\n ]\n }\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ],\n \"predicates\": [],\n \"projection\": [\n 15\n ],\n \"input_arity\": 15\n }\n }\n ]\n }\n }\n ],\n \"sources\": []\n }\n }\n }\n },\n \"insights\": {\n \"imports\": {\n \"s753\": {\n \"name\": {\n \"schema\": \"mz_catalog\",\n \"item\": \"mz_sources_ind\"\n },\n \"type\": \"compute\"\n }\n },\n \"fast_path_clusters\": {},\n \"fast_path_limit\": null,\n \"persist_count\": []\n },\n \"cluster\": {\n \"name\": \"mz_catalog_server\",\n \"id\": {\n \"System\": 2\n }\n },\n \"redacted_sql\": \"SELECT '' FROM [s469 AS mz_catalog.mz_sources] LIMIT ''\"\n}","code":"MZ001","severity":"notice"}} {"type":"CommandStarting","payload":{"has_rows":true,"is_streaming":false}} {"type":"Rows","payload":{"columns":[{"name":"?column?","type_oid":23,"type_len":4,"type_mod":-1}]}} {"type":"Row","payload":["1"]} @@ -420,7 +420,7 @@ ws-text ws-text {"query": "SELECT 1 / 0 FROM mz_sources LIMIT 1"} ---- -{"type":"Notice","payload":{"message":"{\n \"plans\": {\n \"raw\": {\n \"text\": \"Finish limit=1 output=[#0]\\n Project (#15)\\n Map ((1 / 0))\\n Get mz_catalog.mz_sources\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"Project\": {\n \"input\": {\n \"Map\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"System\": 469\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"Oid\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": {\n \"Array\": \"MzAclItem\"\n },\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n }\n ],\n \"keys\": [\n [\n 0\n ],\n [\n 1\n ]\n ]\n }\n }\n },\n \"scalars\": [\n {\n \"CallBinary\": {\n \"func\": {\n \"DivInt32\": null\n },\n \"expr1\": {\n \"Literal\": [\n {\n \"data\": [\n 45,\n 1\n ]\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n },\n null\n ]\n },\n \"expr2\": {\n \"Literal\": [\n {\n \"data\": [\n 44\n ]\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n },\n null\n ]\n },\n \"name\": null\n }\n }\n ]\n }\n },\n \"outputs\": [\n 15\n ]\n }\n }\n },\n \"optimized\": {\n \"global\": {\n \"text\": \"t64:\\n Finish limit=1 output=[#0]\\n ArrangeBy keys=[[#0]]\\n ReadGlobalFromSameDataflow t63\\n\\nt63:\\n Project (#15)\\n Map (error(\\\"division by zero\\\"))\\n ReadIndex on=mz_sources mz_sources_ind=[*** full scan ***]\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"plans\": [\n {\n \"id\": \"t64\",\n \"plan\": {\n \"ArrangeBy\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"Transient\": 63\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ],\n \"keys\": []\n },\n \"access_strategy\": \"SameDataflow\"\n }\n },\n \"keys\": [\n [\n {\n \"Column\": [\n 0,\n null\n ]\n }\n ]\n ]\n }\n }\n },\n {\n \"id\": \"t63\",\n \"plan\": {\n \"Project\": {\n \"input\": {\n \"Map\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"System\": 469\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"Oid\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": {\n \"Array\": \"MzAclItem\"\n },\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n }\n ],\n \"keys\": [\n [\n 0\n ],\n [\n 1\n ]\n ]\n },\n \"access_strategy\": {\n \"Index\": [\n [\n {\n \"System\": 752\n },\n \"FullScan\"\n ]\n ]\n }\n }\n },\n \"scalars\": [\n {\n \"Literal\": [\n {\n \"Err\": \"DivisionByZero\"\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ]\n }\n },\n \"outputs\": [\n 15\n ]\n }\n }\n }\n ],\n \"sources\": []\n }\n },\n \"fast_path\": {\n \"text\": \"Explained Query (fast path):\\n Finish limit=1 output=[#0]\\n →Map/Filter/Project\\n Project: #15\\n Map: error(\\\"division by zero\\\")\\n →Indexed mz_catalog.mz_sources (using mz_catalog.mz_sources_ind)\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"plans\": [\n {\n \"id\": \"Explained Query (fast path)\",\n \"plan\": {\n \"PeekExisting\": [\n {\n \"System\": 469\n },\n {\n \"System\": 752\n },\n null,\n {\n \"mfp\": {\n \"expressions\": [\n {\n \"Literal\": [\n {\n \"Err\": \"DivisionByZero\"\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ],\n \"predicates\": [],\n \"projection\": [\n 15\n ],\n \"input_arity\": 15\n }\n }\n ]\n }\n }\n ],\n \"sources\": []\n }\n }\n }\n },\n \"insights\": {\n \"imports\": {\n \"s752\": {\n \"name\": {\n \"schema\": \"mz_catalog\",\n \"item\": \"mz_sources_ind\"\n },\n \"type\": \"compute\"\n }\n },\n \"fast_path_clusters\": {},\n \"fast_path_limit\": null,\n \"persist_count\": []\n },\n \"cluster\": {\n \"name\": \"mz_catalog_server\",\n \"id\": {\n \"System\": 2\n }\n },\n \"redacted_sql\": \"SELECT '' / '' FROM [s469 AS mz_catalog.mz_sources] LIMIT ''\"\n}","code":"MZ001","severity":"notice"}} +{"type":"Notice","payload":{"message":"{\n \"plans\": {\n \"raw\": {\n \"text\": \"Finish limit=1 output=[#0]\\n Project (#15)\\n Map ((1 / 0))\\n Get mz_catalog.mz_sources\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"Project\": {\n \"input\": {\n \"Map\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"System\": 469\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"Oid\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": {\n \"Array\": \"MzAclItem\"\n },\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n }\n ],\n \"keys\": [\n [\n 0\n ],\n [\n 1\n ]\n ]\n }\n }\n },\n \"scalars\": [\n {\n \"CallBinary\": {\n \"func\": {\n \"DivInt32\": null\n },\n \"expr1\": {\n \"Literal\": [\n {\n \"data\": [\n 45,\n 1\n ]\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n },\n null\n ]\n },\n \"expr2\": {\n \"Literal\": [\n {\n \"data\": [\n 44\n ]\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n },\n null\n ]\n },\n \"name\": null\n }\n }\n ]\n }\n },\n \"outputs\": [\n 15\n ]\n }\n }\n },\n \"optimized\": {\n \"global\": {\n \"text\": \"t64:\\n Finish limit=1 output=[#0]\\n ArrangeBy keys=[[#0]]\\n ReadGlobalFromSameDataflow t63\\n\\nt63:\\n Project (#15)\\n Map (error(\\\"division by zero\\\"))\\n ReadIndex on=mz_sources mz_sources_ind=[*** full scan ***]\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"plans\": [\n {\n \"id\": \"t64\",\n \"plan\": {\n \"ArrangeBy\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"Transient\": 63\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ],\n \"keys\": []\n },\n \"access_strategy\": \"SameDataflow\"\n }\n },\n \"keys\": [\n [\n {\n \"Column\": [\n 0,\n null\n ]\n }\n ]\n ]\n }\n }\n },\n {\n \"id\": \"t63\",\n \"plan\": {\n \"Project\": {\n \"input\": {\n \"Map\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"System\": 469\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"Oid\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": {\n \"Array\": \"MzAclItem\"\n },\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n }\n ],\n \"keys\": [\n [\n 0\n ],\n [\n 1\n ]\n ]\n },\n \"access_strategy\": {\n \"Index\": [\n [\n {\n \"System\": 753\n },\n \"FullScan\"\n ]\n ]\n }\n }\n },\n \"scalars\": [\n {\n \"Literal\": [\n {\n \"Err\": \"DivisionByZero\"\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ]\n }\n },\n \"outputs\": [\n 15\n ]\n }\n }\n }\n ],\n \"sources\": []\n }\n },\n \"fast_path\": {\n \"text\": \"Explained Query (fast path):\\n Finish limit=1 output=[#0]\\n →Map/Filter/Project\\n Project: #15\\n Map: error(\\\"division by zero\\\")\\n →Indexed mz_catalog.mz_sources (using mz_catalog.mz_sources_ind)\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"plans\": [\n {\n \"id\": \"Explained Query (fast path)\",\n \"plan\": {\n \"PeekExisting\": [\n {\n \"System\": 469\n },\n {\n \"System\": 753\n },\n null,\n {\n \"mfp\": {\n \"expressions\": [\n {\n \"Literal\": [\n {\n \"Err\": \"DivisionByZero\"\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ],\n \"predicates\": [],\n \"projection\": [\n 15\n ],\n \"input_arity\": 15\n }\n }\n ]\n }\n }\n ],\n \"sources\": []\n }\n }\n }\n },\n \"insights\": {\n \"imports\": {\n \"s753\": {\n \"name\": {\n \"schema\": \"mz_catalog\",\n \"item\": \"mz_sources_ind\"\n },\n \"type\": \"compute\"\n }\n },\n \"fast_path_clusters\": {},\n \"fast_path_limit\": null,\n \"persist_count\": []\n },\n \"cluster\": {\n \"name\": \"mz_catalog_server\",\n \"id\": {\n \"System\": 2\n }\n },\n \"redacted_sql\": \"SELECT '' / '' FROM [s469 AS mz_catalog.mz_sources] LIMIT ''\"\n}","code":"MZ001","severity":"notice"}} {"type":"CommandStarting","payload":{"has_rows":false,"is_streaming":false}} {"type":"Error","payload":{"message":"division by zero","code":"XX000"}} {"type":"ReadyForQuery","payload":"I"} diff --git a/src/pgrepr-consts/src/oid.rs b/src/pgrepr-consts/src/oid.rs index bd4c3f6189001..a071ccfafe314 100644 --- a/src/pgrepr-consts/src/oid.rs +++ b/src/pgrepr-consts/src/oid.rs @@ -497,7 +497,6 @@ pub const VIEW_MZ_STORAGE_USAGE_OID: u32 = 16771; pub const VIEW_MZ_RELATIONS_OID: u32 = 16772; pub const VIEW_MZ_OBJECT_OID_ALIAS_OID: u32 = 16773; pub const VIEW_MZ_OBJECTS_OID: u32 = 16774; -pub const VIEW_MZ_OBJECT_GLOBAL_IDS_OID: u32 = 17061; pub const VIEW_MZ_OBJECT_FULLY_QUALIFIED_NAMES_OID: u32 = 16775; pub const VIEW_MZ_OBJECT_LIFETIMES_OID: u32 = 16776; pub const VIEW_MZ_DATAFLOWS_PER_WORKER_OID: u32 = 16777; @@ -782,3 +781,5 @@ pub const TABLE_MZ_SQL_SERVER_SOURCE_TABLES_OID: u32 = 17057; pub const TABLE_MZ_LICENSE_KEYS_OID: u32 = 17058; pub const TABLE_MZ_ROLE_AUTH_OID: u32 = 17059; pub const TABLE_MZ_ICEBERG_SINKS_OID: u32 = 17060; +pub const VIEW_MZ_OBJECT_GLOBAL_IDS_OID: u32 = 17061; +pub const TABLE_MZ_REPLACEMENTS_OID: u32 = 17062; diff --git a/src/sql/src/plan/statement/show.rs b/src/sql/src/plan/statement/show.rs index 405d56fc1bd91..397dd3a45455e 100644 --- a/src/sql/src/plan/statement/show.rs +++ b/src/sql/src/plan/statement/show.rs @@ -47,6 +47,7 @@ use crate::plan::statement::{StatementContext, StatementDesc, dml}; use crate::plan::{ HirRelationExpr, Params, Plan, PlanError, ShowColumnsPlan, ShowCreatePlan, query, transform_ast, }; +use crate::session::vars::ENABLE_REPLACEMENT_MATERIALIZED_VIEWS; pub fn describe_show_create_view( _: &StatementContext, @@ -576,18 +577,17 @@ fn show_materialized_views<'a>( } let query = format!( - "SELECT name, cluster, comment - FROM mz_internal.mz_show_materialized_views - WHERE {where_clause}" + "SELECT name, cluster, comment, replacing + FROM mz_internal.mz_show_materialized_views + WHERE {where_clause}" ); - ShowSelect::new( - scx, - query, - filter, - None, - Some(&["name", "cluster", "comment"]), - ) + let mut projection = vec!["name", "cluster", "comment"]; + if scx.is_feature_flag_enabled(&ENABLE_REPLACEMENT_MATERIALIZED_VIEWS) { + projection.push("replacing"); + } + + ShowSelect::new(scx, query, filter, None, Some(&projection)) } fn show_sinks<'a>( diff --git a/test/mysql-cdc-old-syntax/alter-source.td b/test/mysql-cdc-old-syntax/alter-source.td index 560af832463c3..522981fe9926e 100644 --- a/test/mysql-cdc-old-syntax/alter-source.td +++ b/test/mysql-cdc-old-syntax/alter-source.td @@ -180,8 +180,8 @@ INSERT INTO table_e VALUES (3, 'three'); 4 > SHOW MATERIALIZED VIEWS -mv_e quickstart "" -mv_f quickstart "" +mv_e quickstart "" +mv_f quickstart "" # RESTRICT works ! DROP SOURCE table_e RESTRICT; diff --git a/test/mysql-cdc/alter-source.td b/test/mysql-cdc/alter-source.td index b1b34ab89cfda..f83d5f8d736cd 100644 --- a/test/mysql-cdc/alter-source.td +++ b/test/mysql-cdc/alter-source.td @@ -190,8 +190,8 @@ INSERT INTO table_e VALUES (3, 'three'); 4 > SHOW MATERIALIZED VIEWS -mv_e quickstart "" -mv_f quickstart "" +mv_e quickstart "" +mv_f quickstart "" # RESTRICT works ! DROP TABLE table_e RESTRICT; diff --git a/test/pg-cdc-old-syntax/alter-source.td b/test/pg-cdc-old-syntax/alter-source.td index 232534fe31366..21390cb9e5cf4 100644 --- a/test/pg-cdc-old-syntax/alter-source.td +++ b/test/pg-cdc-old-syntax/alter-source.td @@ -195,8 +195,8 @@ INSERT INTO table_e VALUES (3, 'three'); 4 > SHOW MATERIALIZED VIEWS -mv_e quickstart "" -mv_f quickstart "" +mv_e quickstart "" +mv_f quickstart "" # RESTRICT works ! DROP SOURCE table_e RESTRICT; diff --git a/test/pg-cdc/alter-source.td b/test/pg-cdc/alter-source.td index bd46021097b40..369e3bfe5e811 100644 --- a/test/pg-cdc/alter-source.td +++ b/test/pg-cdc/alter-source.td @@ -204,8 +204,8 @@ INSERT INTO table_e VALUES (3, 'three'); 4 > SHOW MATERIALIZED VIEWS -mv_e quickstart "" -mv_f quickstart "" +mv_e quickstart "" +mv_f quickstart "" # RESTRICT works ! DROP TABLE table_e RESTRICT; diff --git a/test/sql-server-cdc-old-syntax/alter-source.td b/test/sql-server-cdc-old-syntax/alter-source.td index c93f119df9ec8..3b795ba18d5d9 100644 --- a/test/sql-server-cdc-old-syntax/alter-source.td +++ b/test/sql-server-cdc-old-syntax/alter-source.td @@ -179,8 +179,8 @@ INSERT INTO table_e VALUES (3, 'three'); 4 > SHOW MATERIALIZED VIEWS -mv_e quickstart "" -mv_f quickstart "" +mv_e quickstart "" +mv_f quickstart "" # RESTRICT works ! DROP SOURCE table_e RESTRICT; diff --git a/test/sqllogictest/autogenerated/mz_internal.slt b/test/sqllogictest/autogenerated/mz_internal.slt index 09678bbdf8f62..aefdacd7fafaf 100644 --- a/test/sqllogictest/autogenerated/mz_internal.slt +++ b/test/sqllogictest/autogenerated/mz_internal.slt @@ -759,6 +759,7 @@ mz_recent_activity_log_redacted mz_recent_activity_log_thinned mz_recent_sql_text mz_recent_sql_text_redacted +mz_replacements mz_session_history mz_sessions mz_show_all_my_privileges diff --git a/test/sqllogictest/information_schema_tables.slt b/test/sqllogictest/information_schema_tables.slt index 944ebfc2cf47d..f6f746b77cc50 100644 --- a/test/sqllogictest/information_schema_tables.slt +++ b/test/sqllogictest/information_schema_tables.slt @@ -505,6 +505,10 @@ mz_recent_sql_text_redacted VIEW materialize mz_internal +mz_replacements +BASE TABLE +materialize +mz_internal mz_session_history SOURCE materialize diff --git a/test/sqllogictest/materialized_views.slt b/test/sqllogictest/materialized_views.slt index 84341be0cc2c0..5b51d4591a598 100644 --- a/test/sqllogictest/materialized_views.slt +++ b/test/sqllogictest/materialized_views.slt @@ -75,12 +75,12 @@ CREATE MATERIALIZED VIEW error (name, age) AS SELECT 'jon' statement ok CREATE MATERIALIZED VIEW other_mv IN CLUSTER other AS SELECT 1 -query TTT colnames,rowsort +query TTTT colnames,rowsort SHOW MATERIALIZED VIEWS ---- -name cluster comment -mv quickstart (empty) -other_mv other (empty) +name cluster comment replacing +mv quickstart (empty) NULL +other_mv other (empty) NULL statement ok DROP MATERIALIZED VIEW other_mv @@ -389,18 +389,18 @@ COMPLETE 1 statement ok CREATE MATERIALIZED VIEW other_mv IN CLUSTER other AS SELECT 1 -query TTT colnames,rowsort +query TTTT colnames,rowsort SHOW MATERIALIZED VIEWS ---- -name cluster comment -mv quickstart (empty) -other_mv other (empty) +name cluster comment replacing +mv quickstart (empty) NULL +other_mv other (empty) NULL -query TTT colnames,rowsort +query TTTT colnames,rowsort SHOW MATERIALIZED VIEWS IN CLUSTER other ---- -name cluster comment -other_mv other (empty) +name cluster comment replacing +other_mv other (empty) NULL statement ok DROP MATERIALIZED VIEW other_mv diff --git a/test/sqllogictest/mz_catalog_server_index_accounting.slt b/test/sqllogictest/mz_catalog_server_index_accounting.slt index 2fbc7a067aadf..a0b233860b2de 100644 --- a/test/sqllogictest/mz_catalog_server_index_accounting.slt +++ b/test/sqllogictest/mz_catalog_server_index_accounting.slt @@ -37,12 +37,12 @@ mz_arrangement_heap_capacity_raw_s2_primary_idx CREATE␠INDEX␠"mz_arrangemen mz_arrangement_heap_size_raw_s2_primary_idx CREATE␠INDEX␠"mz_arrangement_heap_size_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_arrangement_heap_size_raw"␠("operator_id",␠"worker_id") mz_arrangement_records_raw_s2_primary_idx CREATE␠INDEX␠"mz_arrangement_records_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_arrangement_records_raw"␠("operator_id",␠"worker_id") mz_arrangement_sharing_raw_s2_primary_idx CREATE␠INDEX␠"mz_arrangement_sharing_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_arrangement_sharing_raw"␠("operator_id",␠"worker_id") -mz_cluster_deployment_lineage_ind CREATE␠INDEX␠"mz_cluster_deployment_lineage_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s732␠AS␠"mz_internal"."mz_cluster_deployment_lineage"]␠("cluster_id") -mz_cluster_replica_frontiers_ind CREATE␠INDEX␠"mz_cluster_replica_frontiers_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s727␠AS␠"mz_catalog"."mz_cluster_replica_frontiers"]␠("object_id") -mz_cluster_replica_history_ind CREATE␠INDEX␠"mz_cluster_replica_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s592␠AS␠"mz_internal"."mz_cluster_replica_history"]␠("dropped_at") +mz_cluster_deployment_lineage_ind CREATE␠INDEX␠"mz_cluster_deployment_lineage_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s733␠AS␠"mz_internal"."mz_cluster_deployment_lineage"]␠("cluster_id") +mz_cluster_replica_frontiers_ind CREATE␠INDEX␠"mz_cluster_replica_frontiers_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s728␠AS␠"mz_catalog"."mz_cluster_replica_frontiers"]␠("object_id") +mz_cluster_replica_history_ind CREATE␠INDEX␠"mz_cluster_replica_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s593␠AS␠"mz_internal"."mz_cluster_replica_history"]␠("dropped_at") mz_cluster_replica_metrics_history_ind CREATE␠INDEX␠"mz_cluster_replica_metrics_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s501␠AS␠"mz_internal"."mz_cluster_replica_metrics_history"]␠("replica_id") mz_cluster_replica_metrics_ind CREATE␠INDEX␠"mz_cluster_replica_metrics_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s502␠AS␠"mz_internal"."mz_cluster_replica_metrics"]␠("replica_id") -mz_cluster_replica_name_history_ind CREATE␠INDEX␠"mz_cluster_replica_name_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s593␠AS␠"mz_internal"."mz_cluster_replica_name_history"]␠("id") +mz_cluster_replica_name_history_ind CREATE␠INDEX␠"mz_cluster_replica_name_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s594␠AS␠"mz_internal"."mz_cluster_replica_name_history"]␠("id") mz_cluster_replica_sizes_ind CREATE␠INDEX␠"mz_cluster_replica_sizes_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s503␠AS␠"mz_catalog"."mz_cluster_replica_sizes"]␠("size") mz_cluster_replica_status_history_ind CREATE␠INDEX␠"mz_cluster_replica_status_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s504␠AS␠"mz_internal"."mz_cluster_replica_status_history"]␠("replica_id") mz_cluster_replica_statuses_ind CREATE␠INDEX␠"mz_cluster_replica_statuses_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s505␠AS␠"mz_internal"."mz_cluster_replica_statuses"]␠("replica_id") @@ -51,18 +51,18 @@ mz_clusters_ind CREATE␠INDEX␠"mz_clusters_ind"␠IN␠CLUSTER␠[s2]␠ON mz_columns_ind CREATE␠INDEX␠"mz_columns_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s465␠AS␠"mz_catalog"."mz_columns"]␠("name") mz_comments_ind CREATE␠INDEX␠"mz_comments_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s517␠AS␠"mz_internal"."mz_comments"]␠("id") mz_compute_dataflow_global_ids_per_worker_s2_primary_idx CREATE␠INDEX␠"mz_compute_dataflow_global_ids_per_worker_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_compute_dataflow_global_ids_per_worker"␠("id",␠"worker_id") -mz_compute_dependencies_ind CREATE␠INDEX␠"mz_compute_dependencies_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s716␠AS␠"mz_internal"."mz_compute_dependencies"]␠("dependency_id") +mz_compute_dependencies_ind CREATE␠INDEX␠"mz_compute_dependencies_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s717␠AS␠"mz_internal"."mz_compute_dependencies"]␠("dependency_id") mz_compute_error_counts_raw_s2_primary_idx CREATE␠INDEX␠"mz_compute_error_counts_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_compute_error_counts_raw"␠("export_id",␠"worker_id") mz_compute_exports_per_worker_s2_primary_idx CREATE␠INDEX␠"mz_compute_exports_per_worker_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_compute_exports_per_worker"␠("export_id",␠"worker_id") mz_compute_frontiers_per_worker_s2_primary_idx CREATE␠INDEX␠"mz_compute_frontiers_per_worker_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_compute_frontiers_per_worker"␠("export_id",␠"worker_id") -mz_compute_hydration_times_ind CREATE␠INDEX␠"mz_compute_hydration_times_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s723␠AS␠"mz_internal"."mz_compute_hydration_times"]␠("replica_id") +mz_compute_hydration_times_ind CREATE␠INDEX␠"mz_compute_hydration_times_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s724␠AS␠"mz_internal"."mz_compute_hydration_times"]␠("replica_id") mz_compute_hydration_times_per_worker_s2_primary_idx CREATE␠INDEX␠"mz_compute_hydration_times_per_worker_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_compute_hydration_times_per_worker"␠("export_id",␠"worker_id") mz_compute_import_frontiers_per_worker_s2_primary_idx CREATE␠INDEX␠"mz_compute_import_frontiers_per_worker_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_compute_import_frontiers_per_worker"␠("export_id",␠"import_id",␠"worker_id") mz_compute_lir_mapping_per_worker_s2_primary_idx CREATE␠INDEX␠"mz_compute_lir_mapping_per_worker_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_compute_lir_mapping_per_worker"␠("global_id",␠"lir_id",␠"worker_id") mz_compute_operator_durations_histogram_raw_s2_primary_idx CREATE␠INDEX␠"mz_compute_operator_durations_histogram_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_compute_operator_durations_histogram_raw"␠("id",␠"worker_id",␠"duration_ns") mz_compute_operator_hydration_statuses_per_worker_s2_primary_idx CREATE␠INDEX␠"mz_compute_operator_hydration_statuses_per_worker_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_compute_operator_hydration_statuses_per_worker"␠("export_id",␠"lir_id") mz_connections_ind CREATE␠INDEX␠"mz_connections_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s498␠AS␠"mz_catalog"."mz_connections"]␠("schema_id") -mz_console_cluster_utilization_overview_ind CREATE␠INDEX␠"mz_console_cluster_utilization_overview_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s719␠AS␠"mz_internal"."mz_console_cluster_utilization_overview"]␠("cluster_id") +mz_console_cluster_utilization_overview_ind CREATE␠INDEX␠"mz_console_cluster_utilization_overview_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s720␠AS␠"mz_internal"."mz_console_cluster_utilization_overview"]␠("cluster_id") mz_continual_tasks_ind CREATE␠INDEX␠"mz_continual_tasks_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s520␠AS␠"mz_internal"."mz_continual_tasks"]␠("id") mz_databases_ind CREATE␠INDEX␠"mz_databases_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s463␠AS␠"mz_catalog"."mz_databases"]␠("name") mz_dataflow_addresses_per_worker_s2_primary_idx CREATE␠INDEX␠"mz_dataflow_addresses_per_worker_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_dataflow_addresses_per_worker"␠("id",␠"worker_id") @@ -70,7 +70,7 @@ mz_dataflow_channels_per_worker_s2_primary_idx CREATE␠INDEX␠"mz_dataflow_ch mz_dataflow_operator_reachability_raw_s2_primary_idx CREATE␠INDEX␠"mz_dataflow_operator_reachability_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_dataflow_operator_reachability_raw"␠("id",␠"worker_id",␠"source",␠"port",␠"update_type",␠"time") mz_dataflow_operators_per_worker_s2_primary_idx CREATE␠INDEX␠"mz_dataflow_operators_per_worker_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_dataflow_operators_per_worker"␠("id",␠"worker_id") mz_dataflow_shutdown_durations_histogram_raw_s2_primary_idx CREATE␠INDEX␠"mz_dataflow_shutdown_durations_histogram_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_dataflow_shutdown_durations_histogram_raw"␠("worker_id",␠"duration_ns") -mz_frontiers_ind CREATE␠INDEX␠"mz_frontiers_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s707␠AS␠"mz_internal"."mz_frontiers"]␠("object_id") +mz_frontiers_ind CREATE␠INDEX␠"mz_frontiers_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s708␠AS␠"mz_internal"."mz_frontiers"]␠("object_id") mz_indexes_ind CREATE␠INDEX␠"mz_indexes_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s466␠AS␠"mz_catalog"."mz_indexes"]␠("id") mz_kafka_sources_ind CREATE␠INDEX␠"mz_kafka_sources_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s460␠AS␠"mz_catalog"."mz_kafka_sources"]␠("id") mz_materialized_views_ind CREATE␠INDEX␠"mz_materialized_views_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s478␠AS␠"mz_catalog"."mz_materialized_views"]␠("id") @@ -78,57 +78,57 @@ mz_message_batch_counts_received_raw_s2_primary_idx CREATE␠INDEX␠"mz_messag mz_message_batch_counts_sent_raw_s2_primary_idx CREATE␠INDEX␠"mz_message_batch_counts_sent_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_message_batch_counts_sent_raw"␠("channel_id",␠"from_worker_id",␠"to_worker_id") mz_message_counts_received_raw_s2_primary_idx CREATE␠INDEX␠"mz_message_counts_received_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_message_counts_received_raw"␠("channel_id",␠"from_worker_id",␠"to_worker_id") mz_message_counts_sent_raw_s2_primary_idx CREATE␠INDEX␠"mz_message_counts_sent_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_message_counts_sent_raw"␠("channel_id",␠"from_worker_id",␠"to_worker_id") -mz_notices_ind CREATE␠INDEX␠"mz_notices_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s796␠AS␠"mz_internal"."mz_notices"]␠("id") +mz_notices_ind CREATE␠INDEX␠"mz_notices_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s797␠AS␠"mz_internal"."mz_notices"]␠("id") mz_object_dependencies_ind CREATE␠INDEX␠"mz_object_dependencies_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s461␠AS␠"mz_internal"."mz_object_dependencies"]␠("object_id") -mz_object_history_ind CREATE␠INDEX␠"mz_object_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s529␠AS␠"mz_internal"."mz_object_history"]␠("id") -mz_object_lifetimes_ind CREATE␠INDEX␠"mz_object_lifetimes_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s530␠AS␠"mz_internal"."mz_object_lifetimes"]␠("id") -mz_object_transitive_dependencies_ind CREATE␠INDEX␠"mz_object_transitive_dependencies_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s545␠AS␠"mz_internal"."mz_object_transitive_dependencies"]␠("object_id") -mz_objects_ind CREATE␠INDEX␠"mz_objects_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s526␠AS␠"mz_catalog"."mz_objects"]␠("schema_id") +mz_object_history_ind CREATE␠INDEX␠"mz_object_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s530␠AS␠"mz_internal"."mz_object_history"]␠("id") +mz_object_lifetimes_ind CREATE␠INDEX␠"mz_object_lifetimes_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s531␠AS␠"mz_internal"."mz_object_lifetimes"]␠("id") +mz_object_transitive_dependencies_ind CREATE␠INDEX␠"mz_object_transitive_dependencies_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s546␠AS␠"mz_internal"."mz_object_transitive_dependencies"]␠("object_id") +mz_objects_ind CREATE␠INDEX␠"mz_objects_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s527␠AS␠"mz_catalog"."mz_objects"]␠("schema_id") mz_peek_durations_histogram_raw_s2_primary_idx CREATE␠INDEX␠"mz_peek_durations_histogram_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_peek_durations_histogram_raw"␠("worker_id",␠"type",␠"duration_ns") -mz_recent_activity_log_thinned_ind CREATE␠INDEX␠"mz_recent_activity_log_thinned_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s691␠AS␠"mz_internal"."mz_recent_activity_log_thinned"]␠("sql_hash") -mz_recent_sql_text_ind CREATE␠INDEX␠"mz_recent_sql_text_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s687␠AS␠"mz_internal"."mz_recent_sql_text"]␠("sql_hash") -mz_recent_storage_usage_ind CREATE␠INDEX␠"mz_recent_storage_usage_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s791␠AS␠"mz_catalog"."mz_recent_storage_usage"]␠("object_id") +mz_recent_activity_log_thinned_ind CREATE␠INDEX␠"mz_recent_activity_log_thinned_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s692␠AS␠"mz_internal"."mz_recent_activity_log_thinned"]␠("sql_hash") +mz_recent_sql_text_ind CREATE␠INDEX␠"mz_recent_sql_text_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s688␠AS␠"mz_internal"."mz_recent_sql_text"]␠("sql_hash") +mz_recent_storage_usage_ind CREATE␠INDEX␠"mz_recent_storage_usage_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s792␠AS␠"mz_catalog"."mz_recent_storage_usage"]␠("object_id") mz_roles_ind CREATE␠INDEX␠"mz_roles_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s486␠AS␠"mz_catalog"."mz_roles"]␠("id") mz_scheduling_elapsed_raw_s2_primary_idx CREATE␠INDEX␠"mz_scheduling_elapsed_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_scheduling_elapsed_raw"␠("id",␠"worker_id") mz_scheduling_parks_histogram_raw_s2_primary_idx CREATE␠INDEX␠"mz_scheduling_parks_histogram_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_scheduling_parks_histogram_raw"␠("worker_id",␠"slept_for_ns",␠"requested_ns") mz_schemas_ind CREATE␠INDEX␠"mz_schemas_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s464␠AS␠"mz_catalog"."mz_schemas"]␠("database_id") mz_secrets_ind CREATE␠INDEX␠"mz_secrets_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s497␠AS␠"mz_catalog"."mz_secrets"]␠("name") -mz_show_all_objects_ind CREATE␠INDEX␠"mz_show_all_objects_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s576␠AS␠"mz_internal"."mz_show_all_objects"]␠("schema_id") -mz_show_cluster_replicas_ind CREATE␠INDEX␠"mz_show_cluster_replicas_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s730␠AS␠"mz_internal"."mz_show_cluster_replicas"]␠("cluster") -mz_show_clusters_ind CREATE␠INDEX␠"mz_show_clusters_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s578␠AS␠"mz_internal"."mz_show_clusters"]␠("name") -mz_show_columns_ind CREATE␠INDEX␠"mz_show_columns_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s577␠AS␠"mz_internal"."mz_show_columns"]␠("id") -mz_show_connections_ind CREATE␠INDEX␠"mz_show_connections_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s586␠AS␠"mz_internal"."mz_show_connections"]␠("schema_id") -mz_show_databases_ind CREATE␠INDEX␠"mz_show_databases_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s580␠AS␠"mz_internal"."mz_show_databases"]␠("name") -mz_show_indexes_ind CREATE␠INDEX␠"mz_show_indexes_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s590␠AS␠"mz_internal"."mz_show_indexes"]␠("schema_id") -mz_show_materialized_views_ind CREATE␠INDEX␠"mz_show_materialized_views_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s589␠AS␠"mz_internal"."mz_show_materialized_views"]␠("schema_id") -mz_show_roles_ind CREATE␠INDEX␠"mz_show_roles_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s585␠AS␠"mz_internal"."mz_show_roles"]␠("name") -mz_show_schemas_ind CREATE␠INDEX␠"mz_show_schemas_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s581␠AS␠"mz_internal"."mz_show_schemas"]␠("database_id") -mz_show_secrets_ind CREATE␠INDEX␠"mz_show_secrets_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s579␠AS␠"mz_internal"."mz_show_secrets"]␠("schema_id") -mz_show_sinks_ind CREATE␠INDEX␠"mz_show_sinks_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s588␠AS␠"mz_internal"."mz_show_sinks"]␠("schema_id") -mz_show_sources_ind CREATE␠INDEX␠"mz_show_sources_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s587␠AS␠"mz_internal"."mz_show_sources"]␠("schema_id") -mz_show_tables_ind CREATE␠INDEX␠"mz_show_tables_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s582␠AS␠"mz_internal"."mz_show_tables"]␠("schema_id") -mz_show_types_ind CREATE␠INDEX␠"mz_show_types_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s584␠AS␠"mz_internal"."mz_show_types"]␠("schema_id") -mz_show_views_ind CREATE␠INDEX␠"mz_show_views_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s583␠AS␠"mz_internal"."mz_show_views"]␠("schema_id") -mz_sink_statistics_ind CREATE␠INDEX␠"mz_sink_statistics_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s704␠AS␠"mz_internal"."mz_sink_statistics"]␠("id",␠"replica_id") -mz_sink_status_history_ind CREATE␠INDEX␠"mz_sink_status_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s676␠AS␠"mz_internal"."mz_sink_status_history"]␠("sink_id") -mz_sink_statuses_ind CREATE␠INDEX␠"mz_sink_statuses_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s677␠AS␠"mz_internal"."mz_sink_statuses"]␠("id") +mz_show_all_objects_ind CREATE␠INDEX␠"mz_show_all_objects_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s577␠AS␠"mz_internal"."mz_show_all_objects"]␠("schema_id") +mz_show_cluster_replicas_ind CREATE␠INDEX␠"mz_show_cluster_replicas_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s731␠AS␠"mz_internal"."mz_show_cluster_replicas"]␠("cluster") +mz_show_clusters_ind CREATE␠INDEX␠"mz_show_clusters_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s579␠AS␠"mz_internal"."mz_show_clusters"]␠("name") +mz_show_columns_ind CREATE␠INDEX␠"mz_show_columns_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s578␠AS␠"mz_internal"."mz_show_columns"]␠("id") +mz_show_connections_ind CREATE␠INDEX␠"mz_show_connections_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s587␠AS␠"mz_internal"."mz_show_connections"]␠("schema_id") +mz_show_databases_ind CREATE␠INDEX␠"mz_show_databases_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s581␠AS␠"mz_internal"."mz_show_databases"]␠("name") +mz_show_indexes_ind CREATE␠INDEX␠"mz_show_indexes_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s591␠AS␠"mz_internal"."mz_show_indexes"]␠("schema_id") +mz_show_materialized_views_ind CREATE␠INDEX␠"mz_show_materialized_views_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s590␠AS␠"mz_internal"."mz_show_materialized_views"]␠("schema_id") +mz_show_roles_ind CREATE␠INDEX␠"mz_show_roles_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s586␠AS␠"mz_internal"."mz_show_roles"]␠("name") +mz_show_schemas_ind CREATE␠INDEX␠"mz_show_schemas_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s582␠AS␠"mz_internal"."mz_show_schemas"]␠("database_id") +mz_show_secrets_ind CREATE␠INDEX␠"mz_show_secrets_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s580␠AS␠"mz_internal"."mz_show_secrets"]␠("schema_id") +mz_show_sinks_ind CREATE␠INDEX␠"mz_show_sinks_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s589␠AS␠"mz_internal"."mz_show_sinks"]␠("schema_id") +mz_show_sources_ind CREATE␠INDEX␠"mz_show_sources_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s588␠AS␠"mz_internal"."mz_show_sources"]␠("schema_id") +mz_show_tables_ind CREATE␠INDEX␠"mz_show_tables_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s583␠AS␠"mz_internal"."mz_show_tables"]␠("schema_id") +mz_show_types_ind CREATE␠INDEX␠"mz_show_types_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s585␠AS␠"mz_internal"."mz_show_types"]␠("schema_id") +mz_show_views_ind CREATE␠INDEX␠"mz_show_views_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s584␠AS␠"mz_internal"."mz_show_views"]␠("schema_id") +mz_sink_statistics_ind CREATE␠INDEX␠"mz_sink_statistics_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s705␠AS␠"mz_internal"."mz_sink_statistics"]␠("id",␠"replica_id") +mz_sink_status_history_ind CREATE␠INDEX␠"mz_sink_status_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s677␠AS␠"mz_internal"."mz_sink_status_history"]␠("sink_id") +mz_sink_statuses_ind CREATE␠INDEX␠"mz_sink_statuses_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s678␠AS␠"mz_internal"."mz_sink_statuses"]␠("id") mz_sinks_ind CREATE␠INDEX␠"mz_sinks_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s476␠AS␠"mz_catalog"."mz_sinks"]␠("id") -mz_source_statistics_ind CREATE␠INDEX␠"mz_source_statistics_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s702␠AS␠"mz_internal"."mz_source_statistics"]␠("id",␠"replica_id") -mz_source_statistics_with_history_ind CREATE␠INDEX␠"mz_source_statistics_with_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s700␠AS␠"mz_internal"."mz_source_statistics_with_history"]␠("id",␠"replica_id") -mz_source_status_history_ind CREATE␠INDEX␠"mz_source_status_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s678␠AS␠"mz_internal"."mz_source_status_history"]␠("source_id") -mz_source_statuses_ind CREATE␠INDEX␠"mz_source_statuses_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s695␠AS␠"mz_internal"."mz_source_statuses"]␠("id") +mz_source_statistics_ind CREATE␠INDEX␠"mz_source_statistics_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s703␠AS␠"mz_internal"."mz_source_statistics"]␠("id",␠"replica_id") +mz_source_statistics_with_history_ind CREATE␠INDEX␠"mz_source_statistics_with_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s701␠AS␠"mz_internal"."mz_source_statistics_with_history"]␠("id",␠"replica_id") +mz_source_status_history_ind CREATE␠INDEX␠"mz_source_status_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s679␠AS␠"mz_internal"."mz_source_status_history"]␠("source_id") +mz_source_statuses_ind CREATE␠INDEX␠"mz_source_statuses_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s696␠AS␠"mz_internal"."mz_source_statuses"]␠("id") mz_sources_ind CREATE␠INDEX␠"mz_sources_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s469␠AS␠"mz_catalog"."mz_sources"]␠("id") mz_tables_ind CREATE␠INDEX␠"mz_tables_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s468␠AS␠"mz_catalog"."mz_tables"]␠("schema_id") mz_types_ind CREATE␠INDEX␠"mz_types_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s480␠AS␠"mz_catalog"."mz_types"]␠("schema_id") mz_views_ind CREATE␠INDEX␠"mz_views_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s477␠AS␠"mz_catalog"."mz_views"]␠("schema_id") -mz_wallclock_global_lag_recent_history_ind CREATE␠INDEX␠"mz_wallclock_global_lag_recent_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s711␠AS␠"mz_internal"."mz_wallclock_global_lag_recent_history"]␠("object_id") +mz_wallclock_global_lag_recent_history_ind CREATE␠INDEX␠"mz_wallclock_global_lag_recent_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s712␠AS␠"mz_internal"."mz_wallclock_global_lag_recent_history"]␠("object_id") mz_webhook_sources_ind CREATE␠INDEX␠"mz_webhook_sources_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s518␠AS␠"mz_internal"."mz_webhook_sources"]␠("id") -pg_attrdef_all_databases_ind CREATE␠INDEX␠"pg_attrdef_all_databases_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s618␠AS␠"mz_internal"."pg_attrdef_all_databases"]␠("oid",␠"adrelid",␠"adnum",␠"adbin",␠"adsrc") -pg_attribute_all_databases_ind CREATE␠INDEX␠"pg_attribute_all_databases_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s611␠AS␠"mz_internal"."pg_attribute_all_databases"]␠("attrelid",␠"attname",␠"atttypid",␠"attlen",␠"attnum",␠"atttypmod",␠"attnotnull",␠"atthasdef",␠"attidentity",␠"attgenerated",␠"attisdropped",␠"attcollation",␠"database_name",␠"pg_type_database_name") -pg_class_all_databases_ind CREATE␠INDEX␠"pg_class_all_databases_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s599␠AS␠"mz_internal"."pg_class_all_databases"]␠("relname") -pg_description_all_databases_ind CREATE␠INDEX␠"pg_description_all_databases_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s608␠AS␠"mz_internal"."pg_description_all_databases"]␠("objoid",␠"classoid",␠"objsubid",␠"description",␠"oid_database_name",␠"class_database_name") -pg_namespace_all_databases_ind CREATE␠INDEX␠"pg_namespace_all_databases_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s596␠AS␠"mz_internal"."pg_namespace_all_databases"]␠("nspname") -pg_type_all_databases_ind CREATE␠INDEX␠"pg_type_all_databases_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s605␠AS␠"mz_internal"."pg_type_all_databases"]␠("oid") +pg_attrdef_all_databases_ind CREATE␠INDEX␠"pg_attrdef_all_databases_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s619␠AS␠"mz_internal"."pg_attrdef_all_databases"]␠("oid",␠"adrelid",␠"adnum",␠"adbin",␠"adsrc") +pg_attribute_all_databases_ind CREATE␠INDEX␠"pg_attribute_all_databases_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s612␠AS␠"mz_internal"."pg_attribute_all_databases"]␠("attrelid",␠"attname",␠"atttypid",␠"attlen",␠"attnum",␠"atttypmod",␠"attnotnull",␠"atthasdef",␠"attidentity",␠"attgenerated",␠"attisdropped",␠"attcollation",␠"database_name",␠"pg_type_database_name") +pg_class_all_databases_ind CREATE␠INDEX␠"pg_class_all_databases_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s600␠AS␠"mz_internal"."pg_class_all_databases"]␠("relname") +pg_description_all_databases_ind CREATE␠INDEX␠"pg_description_all_databases_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s609␠AS␠"mz_internal"."pg_description_all_databases"]␠("objoid",␠"classoid",␠"objsubid",␠"description",␠"oid_database_name",␠"class_database_name") +pg_namespace_all_databases_ind CREATE␠INDEX␠"pg_namespace_all_databases_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s597␠AS␠"mz_internal"."pg_namespace_all_databases"]␠("nspname") +pg_type_all_databases_ind CREATE␠INDEX␠"pg_type_all_databases_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s606␠AS␠"mz_internal"."pg_type_all_databases"]␠("oid") # Record all transitive dependencies (tables, sources, views, mvs) of indexes on # the mz_catalog_server cluster. @@ -556,6 +556,8 @@ mz_relations owner_id mz_relations privileges mz_relations schema_id mz_relations type +mz_replacements id +mz_replacements target_id mz_roles id mz_roles inherit mz_roles name @@ -622,6 +624,7 @@ mz_show_materialized_views cluster_id mz_show_materialized_views comment mz_show_materialized_views id mz_show_materialized_views name +mz_show_materialized_views replacing mz_show_materialized_views schema_id mz_show_roles comment mz_show_roles name diff --git a/test/sqllogictest/oid.slt b/test/sqllogictest/oid.slt index 4b390792a97d2..937a14bbdd061 100644 --- a/test/sqllogictest/oid.slt +++ b/test/sqllogictest/oid.slt @@ -1171,3 +1171,4 @@ SELECT oid, name FROM mz_objects WHERE id LIKE 's%' AND oid < 20000 ORDER BY oid 17059 mz_role_auth 17060 mz_iceberg_sinks 17061 mz_object_global_ids +17062 mz_replacements diff --git a/test/sqllogictest/replacement-materialized-views.slt b/test/sqllogictest/replacement-materialized-views.slt index 00689b65501b6..dc8d43a060211 100644 --- a/test/sqllogictest/replacement-materialized-views.slt +++ b/test/sqllogictest/replacement-materialized-views.slt @@ -43,21 +43,21 @@ SELECT * FROM mv 3 4 5 6 -query TTT colnames,rowsort +query TTTT colnames,rowsort SHOW MATERIALIZED VIEWS ---- -name cluster comment -mv quickstart (empty) -rp quickstart (empty) +name cluster comment replacing +mv quickstart (empty) NULL +rp quickstart (empty) mv statement ok ALTER MATERIALIZED VIEW mv APPLY REPLACEMENT rp -query TTT colnames,rowsort +query TTTT colnames,rowsort SHOW MATERIALIZED VIEWS ---- -name cluster comment -mv quickstart (empty) +name cluster comment replacing +mv quickstart (empty) NULL query II SELECT * FROM mv @@ -79,21 +79,21 @@ SELECT * FROM mv 7 4 11 6 -query TTT colnames,rowsort +query TTTT colnames,rowsort SHOW MATERIALIZED VIEWS ---- -name cluster comment -mv quickstart (empty) -rp quickstart (empty) +name cluster comment replacing +mv quickstart (empty) NULL +rp quickstart (empty) mv statement ok DROP MATERIALIZED VIEW rp -query TTT colnames,rowsort +query TTTT colnames,rowsort SHOW MATERIALIZED VIEWS ---- -name cluster comment -mv quickstart (empty) +name cluster comment replacing +mv quickstart (empty) NULL query II SELECT * FROM mv @@ -108,21 +108,21 @@ SELECT * FROM mv statement ok CREATE MATERIALIZED VIEW rp REPLACING mv IN CLUSTER other AS SELECT a, b FROM t; -query TTT colnames,rowsort +query TTTT colnames,rowsort SHOW MATERIALIZED VIEWS ---- -name cluster comment -mv quickstart (empty) -rp other (empty) +name cluster comment replacing +mv quickstart (empty) NULL +rp other (empty) mv statement ok ALTER MATERIALIZED VIEW mv APPLY REPLACEMENT rp -query TTT colnames,rowsort +query TTTT colnames,rowsort SHOW MATERIALIZED VIEWS ---- -name cluster comment -mv other (empty) +name cluster comment replacing +mv other (empty) NULL # Test: replacement can have the same query @@ -130,21 +130,21 @@ mv other (empty) statement ok CREATE MATERIALIZED VIEW rp REPLACING mv IN CLUSTER other AS SELECT a, b FROM t; -query TTT colnames,rowsort +query TTTT colnames,rowsort SHOW MATERIALIZED VIEWS ---- -name cluster comment -mv other (empty) -rp other (empty) +name cluster comment replacing +mv other (empty) NULL +rp other (empty) mv statement ok ALTER MATERIALIZED VIEW mv APPLY REPLACEMENT rp -query TTT colnames,rowsort +query TTTT colnames,rowsort SHOW MATERIALIZED VIEWS ---- -name cluster comment -mv other (empty) +name cluster comment replacing +mv other (empty) NULL # Test: usage errors diff --git a/test/sqllogictest/system-cluster.slt b/test/sqllogictest/system-cluster.slt index 9f7154ecaddf7..567163dd4784f 100644 --- a/test/sqllogictest/system-cluster.slt +++ b/test/sqllogictest/system-cluster.slt @@ -103,7 +103,7 @@ query T multiline EXPLAIN OPTIMIZED PLAN WITH (humanized expressions) AS VERBOSE TEXT FOR SHOW MATERIALIZED VIEWS ---- Explained Query (fast path): - Project (#2{name}, #3{cluster}, #5{comment}) + Project (#2{name}, #3{cluster}, #5{comment}, #6{replacing}) ReadIndex on=mz_internal.mz_show_materialized_views mz_show_materialized_views_ind=[lookup value=("u3")] Used Indexes: @@ -117,7 +117,7 @@ query T multiline EXPLAIN OPTIMIZED PLAN WITH (humanized expressions) AS VERBOSE TEXT FOR SHOW MATERIALIZED VIEWS IN CLUSTER quickstart ---- Explained Query (fast path): - Project (#2{name}, #3{cluster}, #5{comment}) + Project (#2{name}, #3{cluster}, #5{comment}, #6{replacing}) Filter (#4{cluster_id} = "u1") ReadIndex on=mz_internal.mz_show_materialized_views mz_show_materialized_views_ind=[lookup value=("u3")] diff --git a/test/testdrive-old-kafka-src-syntax/materializations.td b/test/testdrive-old-kafka-src-syntax/materializations.td deleted file mode 100644 index 1944e6fbb621c..0000000000000 --- a/test/testdrive-old-kafka-src-syntax/materializations.td +++ /dev/null @@ -1,506 +0,0 @@ -# Copyright Materialize, Inc. and contributors. All rights reserved. -# -# Use of this software is governed by the Business Source License -# included in the LICENSE file at the root of this repository. -# -# As of the Change Date specified in that file, in accordance with -# the Business Source License, use of this software will be governed -# by the Apache License, Version 2.0. - -$ set-arg-default default-replica-size=scale=1,workers=1 -$ set-arg-default single-replica-cluster=quickstart - -# Test creating and dropping various views and sources that depend upon -# on another, and indices on those views and sources. - -$ set schema={ - "type": "record", - "name": "row", - "fields": [ - {"name": "a", "type": "long"}, - {"name": "b", "type": "long"} - ] - } - -$ kafka-create-topic topic=data - -> CREATE CONNECTION kafka_conn - TO KAFKA (BROKER '${testdrive.kafka-addr}', SECURITY PROTOCOL PLAINTEXT); - -> CREATE CONNECTION IF NOT EXISTS csr_conn TO CONFLUENT SCHEMA REGISTRY ( - URL '${testdrive.schema-registry-url}' - ); - -> CREATE SOURCE data - IN CLUSTER ${arg.single-replica-cluster} - FROM KAFKA CONNECTION kafka_conn (TOPIC 'testdrive-data-${testdrive.seed}') - FORMAT AVRO USING SCHEMA '${schema}' - -> SELECT * FROM data - -> CREATE VIEW data_view as SELECT * from data - -> SELECT * FROM data_view - -> CREATE MATERIALIZED VIEW test1 AS - SELECT b, sum(a) FROM data GROUP BY b - -> SHOW VIEWS -name comment ------------------- -data_view "" - -> SHOW MATERIALIZED VIEWS -name cluster comment ---------------------------- -test1 quickstart "" - -> SELECT * FROM test1 -b sum ------- - -$ kafka-ingest format=avro topic=data schema=${schema} timestamp=1 -{"a": 1, "b": 1} -{"a": 2, "b": 1} -{"a": 3, "b": 1} -{"a": 1, "b": 2} - -> SELECT * FROM test1 -b sum ------- -1 6 -2 1 - -> SHOW COLUMNS FROM test1 -name nullable type comment ------------------------------- -b false bigint "" -sum false numeric "" - -> SHOW VIEWS LIKE '%data%' -data_view "" - -# Materialized view can be built on a not-materialized view. -> CREATE MATERIALIZED VIEW test2 AS - SELECT b, 1 + sum(a + 1) FROM data_view GROUP BY b - -> SELECT * FROM test2 -b ?column? ------------ -1 10 -2 3 - -# Materialize data_view. -> CREATE DEFAULT INDEX ON data_view - -> SELECT * FROM data_view -a b ----- -1 1 -2 1 -3 1 -1 2 - -> CREATE VIEW test3 AS - SELECT b, min(a) FROM data_view GROUP BY b - -> SELECT * FROM test3 -b min ------- -1 1 -2 1 - -> CREATE MATERIALIZED VIEW test4 AS - SELECT b, max(a) FROM data_view GROUP BY b - -> SELECT * FROM test4 -b max ------- -1 3 -2 1 - -# Unmaterialize data view. -> DROP INDEX data_view_primary_idx - -# Can continue to select from view that depends on the unmaterialized view. -> SELECT * FROM test4 -b max ------- -1 3 -2 1 - -> SELECT * FROM test4 where b = 2 -b max ------- -2 1 - -> SELECT * from data_view -a b ----- -1 1 -2 1 -3 1 -1 2 - -# Cannot create sink from unmaterialized view. -! CREATE SINK not_mat_sink2 - IN CLUSTER ${arg.single-replica-cluster} - FROM data_view - INTO KAFKA CONNECTION kafka_conn (TOPIC 'testdrive-data-view2-sink-${testdrive.seed}') - FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_conn - ENVELOPE DEBEZIUM -contains:data_view is a view, which cannot be exported as a sink - -# Can create indexed view from unmaterialized view. -> CREATE VIEW test5 AS - SELECT b, max(a) AS c FROM data_view GROUP BY b -> CREATE DEFAULT INDEX ON test5 - -# or from an indexed unmaterialized view -! CREATE SINK not_mat_sink2 - IN CLUSTER ${arg.single-replica-cluster} - FROM test5 - INTO KAFKA CONNECTION kafka_conn (TOPIC 'testdrive-data-view2-sink-${testdrive.seed}') - FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_conn - ENVELOPE DEBEZIUM -contains:test5 is a view, which cannot be exported as a sink - -$ set-regex match=(\s\(u\d+\)) replacement= - -?[version>=13500] EXPLAIN OPTIMIZED PLAN AS VERBOSE TEXT FOR SELECT * FROM test5; -Explained Query (fast path): - ReadIndex on=materialize.public.test5 test5_primary_idx=[*** full scan ***] - -Used Indexes: - - materialize.public.test5_primary_idx (*** full scan ***) - -Target cluster: quickstart - -?[version<13500] EXPLAIN OPTIMIZED PLAN FOR SELECT * FROM test5; -Explained Query (fast path): - ReadIndex on=materialize.public.test5 test5_primary_idx=[*** full scan ***] - -Used Indexes: - - materialize.public.test5_primary_idx (*** full scan ***) - -Target cluster: quickstart - -> SELECT * FROM test5 -b c ------- -1 3 -2 1 - -> SELECT c+b from test5 -4 -3 - -> CREATE INDEX idx1 ON test5(c) - -! SELECT * FROM idx1 -contains:catalog item 'materialize.public.idx1' is an index and so cannot be depended upon - -# If there exists a second primary index, dropping one primary index will not -# unmaterialize the view. -> DROP INDEX test5_primary_idx - -?[version>=13500] EXPLAIN OPTIMIZED PLAN AS VERBOSE TEXT FOR SELECT * FROM test5 -Explained Query (fast path): - Project (#1, #0) - ReadIndex on=materialize.public.test5 idx1=[*** full scan ***] - -Used Indexes: - - materialize.public.idx1 (*** full scan ***) - -Target cluster: quickstart - -?[version<13500] EXPLAIN OPTIMIZED PLAN FOR SELECT * FROM test5 -Explained Query (fast path): - Project (#1, #0) - ReadIndex on=materialize.public.test5 idx1=[*** full scan ***] - -Used Indexes: - - materialize.public.idx1 (*** full scan ***) - -Target cluster: quickstart - -> SELECT * from test5 -b c ------- -1 3 -2 1 - -> SELECT c-b from test5 -2 --1 - -# Unmaterialize test5. -> DROP INDEX idx1 - -# Still works. -> SELECT * from test5 -b c ------- -1 3 -2 1 - -# Test that materialized views can be even if it requires multiple layers of -# recursing through the AST to find a source. -> CREATE MATERIALIZED VIEW test6 AS SELECT (-c + 2*b) AS d FROM test5 - -> SELECT * from test6 -d ----- --1 -3 - -# Dependencies are still queryable after creating a dependent -# materialized view. -> SELECT * from test5 -b c ------- -1 3 -2 1 - -> SELECT * from data_view -a b ----- -1 1 -2 1 -3 1 -1 2 - -# Rematerialize data_view creating an index on it. -> CREATE INDEX data_view_idx on data_view(a) - -> SELECT * from data_view -a b ---- -1 1 -2 1 -3 1 -1 2 - -# Existing materialized dependencies can be selected from as normal. -> SELECT * from test6 -d ----- --1 -3 - -# Dependencies can be selected from again if they do not depend on any other raw -# source. -> SELECT * from test5 -b c ------- -1 3 -2 1 - -# Create a suboptimal second index on the same column in data_view. -> CREATE INDEX data_view_idx2 on data_view(a) - -> SELECT * from data_view -a b ---- -1 1 -2 1 -3 1 -1 2 - -> SELECT * from test6 -d ----- --1 -3 - -> SELECT * from test5 -b c ------- -1 3 -2 1 - -# Delete the first copy of the same index and ensure everything selects as -# normal. -> DROP INDEX data_view_idx - -> SELECT * from data_view -a b ---- -1 1 -2 1 -3 1 -1 2 - -> SELECT * from test6 -d ----- --1 -3 - -> SELECT * from test5 -b c ------- -1 3 -2 1 - -# Materialized sources tests - -$ kafka-create-topic topic=mat - -> CREATE SOURCE mat_data - IN CLUSTER ${arg.single-replica-cluster} - FROM KAFKA CONNECTION kafka_conn (TOPIC 'testdrive-mat-${testdrive.seed}') - FORMAT AVRO USING SCHEMA '${schema}' - -> CREATE DEFAULT INDEX ON mat_data - -> SELECT * from mat_data - -$ kafka-ingest format=avro topic=mat schema=${schema} timestamp=1 -{"a": -1, "b": 0} -{"a": -1, "b": 1} -{"a": 3, "b": 4} -{"a": 1, "b": 2} - -> SELECT * from mat_data -a b ----- --1 0 --1 1 -3 4 -1 2 - -> SHOW SOURCES -name type cluster comment -------------------------------------------------------------------- -data kafka ${arg.single-replica-cluster} "" -data_progress progress "" -mat_data kafka ${arg.single-replica-cluster} "" -mat_data_progress progress "" - -# If there exists another index, dropping the primary index will not # -# unmaterialize the source. This also tests creating a default index when the -# default index name is already taken. - -> CREATE DEFAULT INDEX ON mat_data - -> DROP INDEX mat_data_primary_idx - -> SELECT a+b from mat_data --1 -0 -7 -3 - -# Can create both materialized and unmaterialized views from materialized -# source. -> CREATE MATERIALIZED VIEW test7 as SELECT count(*) from mat_data - -> SELECT * from test7 -count ------ -4 - -> CREATE VIEW test8 as SELECT -b as c, -a as d from mat_data - -> SELECT * from test8 -c d ------ -0 1 --1 1 --4 -3 --2 -1 - -# Unmaterialize source. -> DROP INDEX mat_data_primary_idx1 - -# Still works. -> SELECT * from mat_data -a b ----- --1 0 --1 1 -3 4 -1 2 - -> SELECT * from test7 -count ------ -4 - -> SELECT * from test8 -c d ------ -0 1 --1 1 --4 -3 --2 -1 - -$ kafka-ingest format=avro topic=mat schema=${schema} timestamp=2 -{"a": -3, "b": 0} -{"a": -1, "b": 0} -{"a": 0, "b": 4} -{"a": 1, "b": 2} - -# Rematerialize source. -> CREATE INDEX mat_data_idx3 on mat_data(b) - -> SELECT * from mat_data -a b ----- --1 0 --1 1 -3 4 -1 2 --3 0 --1 0 -0 4 -1 2 - -> SELECT * from test7 -count ------ -8 - -> SELECT * from test8 -c d ------- -0 1 --1 1 --4 -3 --2 -1 -0 3 -0 1 --4 0 --2 -1 - -# Check arrangements, seeing new arrangements can mean a significant increase -# in memory consumptions and should be understood before adapting the values. -> SET cluster_replica = r1 - ->[version>=15000] SELECT mdod.dataflow_name, mdod.name - FROM mz_introspection.mz_arrangement_sharing mash - JOIN mz_introspection.mz_dataflow_operator_dataflows mdod ON mash.operator_id = mdod.id - JOIN mz_introspection.mz_compute_exports USING (dataflow_id) - WHERE export_id LIKE 'u%' -"Dataflow: materialize.public.data_view_idx" "ArrangeBy[[Column(0, \"a\")]]" -"Dataflow: materialize.public.data_view_idx" "ArrangeBy[[Column(0, \"a\")]]-errors" -"Dataflow: materialize.public.data_view_primary_idx" "ArrangeBy[[Column(0, \"a\"), Column(1, \"b\")]]" -"Dataflow: materialize.public.data_view_primary_idx" "ArrangeBy[[Column(0, \"a\"), Column(1, \"b\")]]-errors" -"Dataflow: materialize.public.mat_data_idx3" "ArrangeBy[[Column(1, \"b\")]]" -"Dataflow: materialize.public.mat_data_idx3" "ArrangeBy[[Column(1, \"b\")]]-errors" -"Dataflow: materialize.public.mat_data_primary_idx" "ArrangeBy[[Column(0, \"a\"), Column(1, \"b\")]]" -"Dataflow: materialize.public.mat_data_primary_idx" "ArrangeBy[[Column(0, \"a\"), Column(1, \"b\")]]-errors" -"Dataflow: materialize.public.test1" AccumulableErrorCheck -"Dataflow: materialize.public.test1" "ArrangeAccumulable [val: empty]" -"Dataflow: materialize.public.test1" ReduceAccumulable -"Dataflow: materialize.public.test2" AccumulableErrorCheck -"Dataflow: materialize.public.test2" "ArrangeAccumulable [val: empty]" -"Dataflow: materialize.public.test2" ReduceAccumulable -"Dataflow: materialize.public.test4" "ArrangeMonotonic [val: empty]" -"Dataflow: materialize.public.test4" ReduceMonotonic -"Dataflow: materialize.public.test6" "ArrangeMonotonic [val: empty]" -"Dataflow: materialize.public.test6" ReduceMonotonic -"Dataflow: materialize.public.test7" AccumulableErrorCheck -"Dataflow: materialize.public.test7" "ArrangeAccumulable [val: empty]" -"Dataflow: materialize.public.test7" ReduceAccumulable diff --git a/test/testdrive/catalog.td b/test/testdrive/catalog.td index db5476e31d2d3..948234a328749 100644 --- a/test/testdrive/catalog.td +++ b/test/testdrive/catalog.td @@ -616,6 +616,7 @@ mz_object_global_ids "" mz_optimizer_notices "" mz_postgres_sources "" mz_postgres_source_tables "" +mz_replacements "" mz_sessions "" mz_source_references "" mz_sql_server_source_tables "" @@ -805,7 +806,7 @@ test_table "" # `SHOW TABLES` and `mz_tables` should agree. > SELECT COUNT(*) FROM mz_tables WHERE id LIKE 's%' -64 +65 # There is one entry in mz_indexes for each field_number/expression of the index. > SELECT COUNT(id) FROM mz_indexes WHERE id LIKE 's%' diff --git a/test/testdrive/materializations.td b/test/testdrive/materializations.td index 65ad7d8c98fee..14bb8eac9d9b0 100644 --- a/test/testdrive/materializations.td +++ b/test/testdrive/materializations.td @@ -55,9 +55,9 @@ name comment data_view "" > SHOW MATERIALIZED VIEWS -name cluster comment ---------------------------- -test1 quickstart "" +name cluster comment replacing +-------------------------------------- +test1 quickstart "" > SELECT * FROM test1 b sum diff --git a/test/testdrive/system-cluster.td b/test/testdrive/system-cluster.td index c4496fb04e21d..35d550d20eae3 100644 --- a/test/testdrive/system-cluster.td +++ b/test/testdrive/system-cluster.td @@ -71,7 +71,7 @@ ALTER SYSTEM SET enable_rbac_checks TO true > SET CLUSTER TO mz_catalog_server > SHOW MATERIALIZED VIEWS -mv quickstart "" +mv quickstart "" #! CREATE MATERIALIZED VIEW mv1 AS SELECT MIN(1) #contains:system cluster 'mz_catalog_server' cannot be modified @@ -80,7 +80,7 @@ mv quickstart "" # Query gets automatically run on mz_catalog_server, despite mz_system being set > SHOW MATERIALIZED VIEWS -mv quickstart "" +mv quickstart "" #! CREATE MATERIALIZED VIEW mv1 AS SELECT MIN(1) #contains:must be owner of CLUSTER mz_system