You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2025/02/21 15:54:56 UTC

(ignite-3) 01/02: Fix system views columns names.

This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a commit to branch ignite-24551
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit dce57aa73cd5fa03609cf3331a81b083546765ab
Author: amashenkov <am...@apache.org>
AuthorDate: Fri Feb 21 17:25:05 2025 +0300

    Fix system views columns names.
---
 .../systemviews/SystemViewViewProvider.java        | 13 +++-
 .../systemviews/TablesSystemViewProvider.java      | 24 ++++++--
 .../systemviews/ZonesSystemViewProvider.java       |  6 +-
 .../systemviews/ItIndexesSystemViewTest.java       | 56 +++++++++++++++++
 .../systemviews/ItSqlQueriesSystemViewTest.java    | 13 ++--
 .../sql/engine/systemviews/ItSystemViewsTest.java  | 36 +++++++++--
 .../engine/systemviews/ItTablesSystemViewTest.java | 62 +++++++++++++++++--
 .../engine/systemviews/ItZonesSystemViewTest.java  | 72 +++++++++++++++++++++-
 8 files changed, 255 insertions(+), 27 deletions(-)

diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/systemviews/SystemViewViewProvider.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/systemviews/SystemViewViewProvider.java
index 9390d0c4ef6..a00e36920d7 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/systemviews/SystemViewViewProvider.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/systemviews/SystemViewViewProvider.java
@@ -69,10 +69,16 @@ public class SystemViewViewProvider implements CatalogSystemViewProvider {
 
         return SystemViews.<ViewWithSchema>clusterViewBuilder()
                 .name("SYSTEM_VIEWS")
+                .addColumn("VIEW_ID", INT32, entry -> entry.descriptor.id())
+                .addColumn("SCHEMA_NAME", stringOf(SYSTEM_VIEW_STRING_COLUMN_LENGTH), entry -> entry.schema)
+                .addColumn("VIEW_NAME", stringOf(SYSTEM_VIEW_STRING_COLUMN_LENGTH), entry -> entry.descriptor.name())
+                .addColumn("TYPE", stringOf(SYSTEM_VIEW_STRING_COLUMN_LENGTH), entry -> entry.descriptor.systemViewType().name())
+                // TODO https://issues.apache.org/jira/browse/IGNITE-24589: Next columns are deprecated and should be removed.
+                //  They are kept for compatibility with 3.0 version, to allow columns being found by their old names.
                 .addColumn("ID", INT32, entry -> entry.descriptor.id())
                 .addColumn("SCHEMA", stringOf(SYSTEM_VIEW_STRING_COLUMN_LENGTH), entry -> entry.schema)
                 .addColumn("NAME", stringOf(SYSTEM_VIEW_STRING_COLUMN_LENGTH), entry -> entry.descriptor.name())
-                .addColumn("TYPE", stringOf(SYSTEM_VIEW_STRING_COLUMN_LENGTH), entry -> entry.descriptor.systemViewType().name())
+                // End of legacy columns list. New columns must be added below this line.
                 .dataProvider(viewDataPublisher)
                 .build();
     }
@@ -94,12 +100,15 @@ public class SystemViewViewProvider implements CatalogSystemViewProvider {
         return SystemViews.<ColumnWithTableId>clusterViewBuilder()
                 .name("SYSTEM_VIEW_COLUMNS")
                 .addColumn("VIEW_ID", INT32, entry -> entry.id)
-                .addColumn("NAME", stringOf(SYSTEM_VIEW_STRING_COLUMN_LENGTH), entry -> entry.descriptor.name())
+                .addColumn("VIEW_NAME", stringOf(SYSTEM_VIEW_STRING_COLUMN_LENGTH), entry -> entry.descriptor.name())
                 .addColumn("TYPE", stringOf(SYSTEM_VIEW_STRING_COLUMN_LENGTH), entry -> entry.descriptor.type().name())
                 .addColumn("NULLABLE", BOOLEAN, entry -> entry.descriptor.nullable())
                 .addColumn("PRECISION", INT32, entry -> entry.descriptor.precision())
                 .addColumn("SCALE", INT32, entry -> entry.descriptor.scale())
                 .addColumn("LENGTH", INT32, entry -> entry.descriptor.length())
+                // TODO https://issues.apache.org/jira/browse/IGNITE-24589: Next column is deprecated and should be removed.
+                //  It is kept for compatibility with 3.0 version, to allow column being found by it's old names.
+                .addColumn("NAME", stringOf(SYSTEM_VIEW_STRING_COLUMN_LENGTH), entry -> entry.descriptor.name())
                 .dataProvider(viewDataPublisher)
                 .build();
     }
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/systemviews/TablesSystemViewProvider.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/systemviews/TablesSystemViewProvider.java
index feb0acd024a..98290055ffa 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/systemviews/TablesSystemViewProvider.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/systemviews/TablesSystemViewProvider.java
@@ -66,13 +66,22 @@ public class TablesSystemViewProvider implements CatalogSystemViewProvider {
 
         return SystemViews.<TableWithSchemaAndZoneName>clusterViewBuilder()
                 .name("TABLES")
+                .addColumn("SCHEMA_NAME", STRING, entry -> entry.schemaName)
+                .addColumn("TABLE_NAME", STRING, entry -> entry.table.name())
+                .addColumn("TABLE_ID", INT32, entry -> entry.table.id())
+                .addColumn("PK_INDEX_ID", INT32, entry -> entry.table.primaryKeyIndexId())
+                .addColumn("ZONE_NAME", STRING, entry -> entry.zoneName)
+                .addColumn("STORAGE_PROFILE", STRING, entry -> entry.table.storageProfile())
+                .addColumn("COLOCATION_KEY_INDEX", STRING, entry -> concatColumns(entry.table.colocationColumns()))
+                .addColumn("SCHEMA_ID", INT32, entry -> entry.table.schemaId())
+                .addColumn("ZONE_ID", INT32, entry -> entry.table.zoneId())
+                // TODO https://issues.apache.org/jira/browse/IGNITE-24589: Next columns are deprecated and should be removed.
+                //  They are kept for compatibility with 3.0 version, to allow columns being found by their old names.
                 .addColumn("SCHEMA", STRING, entry -> entry.schemaName)
                 .addColumn("NAME", STRING, entry -> entry.table.name())
                 .addColumn("ID", INT32, entry -> entry.table.id())
-                .addColumn("PK_INDEX_ID", INT32, entry -> entry.table.primaryKeyIndexId())
                 .addColumn("ZONE", STRING, entry -> entry.zoneName)
-                .addColumn("STORAGE_PROFILE", STRING, entry -> entry.table.storageProfile())
-                .addColumn("COLOCATION_KEY_INDEX", STRING, entry -> concatColumns(entry.table.colocationColumns()))
+                // End of legacy columns list. New columns must be added below this line.
                 .dataProvider(viewDataPublisher)
                 .build();
     }
@@ -106,16 +115,21 @@ public class TablesSystemViewProvider implements CatalogSystemViewProvider {
 
         return SystemViews.<ColumnWithTableId>clusterViewBuilder()
                 .name("TABLE_COLUMNS")
-                .addColumn("SCHEMA", STRING, entry -> entry.schema)
+                .addColumn("SCHEMA_NAME", STRING, entry -> entry.schema)
                 .addColumn("TABLE_NAME", STRING, entry -> entry.tableName)
                 .addColumn("TABLE_ID", INT32, entry -> entry.tableId)
                 .addColumn("COLUMN_NAME", STRING, entry -> entry.descriptor.name())
                 .addColumn("TYPE", STRING, entry -> entry.descriptor.type().name())
                 .addColumn("NULLABLE", BOOLEAN, entry -> entry.descriptor.nullable())
-                .addColumn("PREC", INT32, entry -> entry.descriptor.precision())
+                .addColumn("PRECISION", INT32, entry -> entry.descriptor.precision())
                 .addColumn("SCALE", INT32, entry -> entry.descriptor.scale())
                 .addColumn("LENGTH", INT32, entry -> entry.descriptor.length())
                 .addColumn("COLUMN_ORDINAL", INT32, entry -> entry.columnOrdinal)
+                // TODO https://issues.apache.org/jira/browse/IGNITE-24589: Next columns are deprecated and should be removed.
+                //  They are kept for compatibility with 3.0 version, to allow columns being found by their old names.
+                .addColumn("SCHEMA", STRING, entry -> entry.schema)
+                .addColumn("PREC", INT32, entry -> entry.descriptor.precision())
+                // End of legacy columns list. New columns must be added below this line.
                 .dataProvider(viewDataPublisher)
                 .build();
     }
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/systemviews/ZonesSystemViewProvider.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/systemviews/ZonesSystemViewProvider.java
index 5433fffd068..048d90466b9 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/systemviews/ZonesSystemViewProvider.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/systemviews/ZonesSystemViewProvider.java
@@ -51,7 +51,7 @@ public final class ZonesSystemViewProvider implements CatalogSystemViewProvider
     private static SystemView<?> getZoneView(Supplier<Catalog> catalogSupplier) {
         return SystemViews.<ZoneWithDefaultMarker>clusterViewBuilder()
                 .name("ZONES")
-                .addColumn("NAME", STRING, wrapper -> wrapper.zone.name())
+                .addColumn("ZONE_NAME", STRING, wrapper -> wrapper.zone.name())
                 .addColumn("PARTITIONS", INT32, wrapper -> wrapper.zone.partitions())
                 .addColumn("REPLICAS", INT32, wrapper -> wrapper.zone.replicas())
                 .addColumn("DATA_NODES_AUTO_ADJUST_SCALE_UP", INT32, wrapper -> wrapper.zone.dataNodesAutoAdjustScaleUp())
@@ -59,6 +59,10 @@ public final class ZonesSystemViewProvider implements CatalogSystemViewProvider
                 .addColumn("DATA_NODES_FILTER", STRING, wrapper -> wrapper.zone.filter())
                 .addColumn("IS_DEFAULT_ZONE", BOOLEAN, wrapper -> wrapper.isDefault)
                 .addColumn("CONSISTENCY_MODE", STRING, wrapper -> wrapper.zone.consistencyMode().name())
+                .addColumn("ZONE_ID", INT32, wrapper -> wrapper.zone.id())
+                // TODO https://issues.apache.org/jira/browse/IGNITE-24589: Next columns are deprecated and should be removed.
+                //  They are kept for compatibility with 3.0 version, to allow columns being found by their old names.
+                .addColumn("NAME", STRING, wrapper -> wrapper.zone.name())
                 .dataProvider(SubscriptionUtils.fromIterable(() -> {
                             Catalog catalog = catalogSupplier.get();
                             CatalogZoneDescriptor defaultZone = catalog.defaultZone();
diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItIndexesSystemViewTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItIndexesSystemViewTest.java
index d943ef9a25a..1e8daf22c09 100644
--- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItIndexesSystemViewTest.java
+++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItIndexesSystemViewTest.java
@@ -24,9 +24,12 @@ import java.util.Collection;
 import org.apache.ignite.internal.app.IgniteImpl;
 import org.apache.ignite.internal.catalog.Catalog;
 import org.apache.ignite.internal.catalog.CatalogManager;
+import org.apache.ignite.internal.catalog.commands.CatalogUtils;
 import org.apache.ignite.internal.catalog.descriptors.CatalogIndexDescriptor;
 import org.apache.ignite.internal.catalog.descriptors.CatalogTableDescriptor;
 import org.apache.ignite.internal.sql.SqlCommon;
+import org.apache.ignite.internal.sql.engine.util.MetadataMatcher;
+import org.apache.ignite.sql.ColumnType;
 import org.junit.jupiter.api.Test;
 
 /** End-to-end tests to verify indexes system view. */
@@ -37,6 +40,59 @@ public class ItIndexesSystemViewTest extends AbstractSystemViewTest {
 
     private static final String COLUMNS_COLLATIONS = "ID DESC, NAME ASC";
 
+    @Test
+    public void testMetadata() {
+        assertQuery("SELECT * FROM SYSTEM.INDEXES")
+                .columnMetadata(
+                        new MetadataMatcher().name("INDEX_ID")
+                                .type(ColumnType.INT32)
+                                .nullable(true),
+
+                        new MetadataMatcher().name("INDEX_NAME")
+                                .type(ColumnType.STRING)
+                                .precision(CatalogUtils.DEFAULT_VARLEN_LENGTH)
+                                .nullable(true),
+
+                        new MetadataMatcher().name("TABLE_ID")
+                                .type(ColumnType.INT32)
+                                .nullable(true),
+
+                        new MetadataMatcher().name("TABLE_NAME")
+                                .type(ColumnType.STRING)
+                                .precision(CatalogUtils.DEFAULT_VARLEN_LENGTH)
+                                .nullable(true),
+
+                        new MetadataMatcher().name("SCHEMA_ID")
+                                .type(ColumnType.INT32)
+                                .nullable(true),
+
+                        new MetadataMatcher().name("SCHEMA_NAME")
+                                .type(ColumnType.STRING)
+                                .precision(CatalogUtils.DEFAULT_VARLEN_LENGTH)
+                                .nullable(true),
+
+                        new MetadataMatcher().name("TYPE")
+                                .type(ColumnType.STRING)
+                                .precision(CatalogUtils.DEFAULT_VARLEN_LENGTH)
+                                .nullable(true),
+
+                        new MetadataMatcher().name("IS_UNIQUE")
+                                .type(ColumnType.BOOLEAN)
+                                .nullable(true),
+
+                        new MetadataMatcher().name("COLUMNS")
+                                .type(ColumnType.STRING)
+                                .precision(CatalogUtils.DEFAULT_VARLEN_LENGTH)
+                                .nullable(true),
+
+                        new MetadataMatcher().name("STATUS")
+                                .type(ColumnType.STRING)
+                                .precision(CatalogUtils.DEFAULT_VARLEN_LENGTH)
+                                .nullable(true)
+                )
+                .check();
+    }
+
     @Test
     public void multipleIndexes() {
         sql(String.format("CREATE TABLE %S (ID INT, NAME VARCHAR, CONSTRAINT PK PRIMARY KEY USING HASH(ID, NAME));", TABLE_NAME));
diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItSqlQueriesSystemViewTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItSqlQueriesSystemViewTest.java
index 0accfeb1126..0ba8600c6bd 100644
--- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItSqlQueriesSystemViewTest.java
+++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItSqlQueriesSystemViewTest.java
@@ -77,12 +77,8 @@ public class ItSqlQueriesSystemViewTest extends AbstractSystemViewTest {
     }
 
     @Test
-    public void singleStatement() {
-        String query = "SELECT * FROM SQL_QUERIES ORDER BY START_TIME";
-
-        // Verify metadata.
-        assertQuery(query)
-                .withDefaultSchema("SYSTEM")
+    public void testMetadata() {
+        assertQuery("SELECT * FROM SYSTEM.SQL_QUERIES")
                 .columnMetadata(
                         new MetadataMatcher().name("INITIATOR_NODE").type(ColumnType.STRING).nullable(false),
                         new MetadataMatcher().name("ID").type(ColumnType.STRING).precision(36).nullable(true),
@@ -97,6 +93,11 @@ public class ItSqlQueriesSystemViewTest extends AbstractSystemViewTest {
                 )
                 .returnRowCount(1)
                 .check();
+    }
+
+    @Test
+    public void singleStatement() {
+        String query = "SELECT * FROM SQL_QUERIES ORDER BY START_TIME";
 
         Ignite initiator = CLUSTER.aliveNode();
 
diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItSystemViewsTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItSystemViewsTest.java
index 16918909b02..1ba3ce64108 100644
--- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItSystemViewsTest.java
+++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItSystemViewsTest.java
@@ -74,18 +74,18 @@ public class ItSystemViewsTest extends AbstractSystemViewTest {
         assertQuery(format("SELECT * FROM {}", SYSTEM_VIEWS.canonicalName()))
                 .columnMetadata(
                         new MetadataMatcher()
-                                .name("ID")
+                                .name("VIEW_ID")
                                 .type(ColumnType.INT32)
                                 .nullable(true),
 
                         new MetadataMatcher()
-                                .name("SCHEMA")
+                                .name("SCHEMA_NAME")
                                 .type(ColumnType.STRING)
                                 .precision(Short.MAX_VALUE)
                                 .nullable(true),
 
                         new MetadataMatcher()
-                                .name("NAME")
+                                .name("VIEW_NAME")
                                 .type(ColumnType.STRING)
                                 .precision(Short.MAX_VALUE)
                                 .nullable(true),
@@ -94,6 +94,24 @@ public class ItSystemViewsTest extends AbstractSystemViewTest {
                                 .name("TYPE")
                                 .type(ColumnType.STRING)
                                 .precision(Short.MAX_VALUE)
+                                .nullable(true),
+
+                        // Legacy column.
+                        new MetadataMatcher()
+                                .name("ID")
+                                .type(ColumnType.INT32)
+                                .nullable(true),
+                        // Legacy column.
+                        new MetadataMatcher()
+                                .name("SCHEMA")
+                                .type(ColumnType.STRING)
+                                .precision(Short.MAX_VALUE)
+                                .nullable(true),
+                        // Legacy column.
+                        new MetadataMatcher()
+                                .name("NAME")
+                                .type(ColumnType.STRING)
+                                .precision(Short.MAX_VALUE)
                                 .nullable(true)
                 )
                 .check();
@@ -109,7 +127,7 @@ public class ItSystemViewsTest extends AbstractSystemViewTest {
                                 .nullable(true),
 
                         new MetadataMatcher()
-                                .name("NAME")
+                                .name("VIEW_NAME")
                                 .type(ColumnType.STRING)
                                 .precision(Short.MAX_VALUE)
                                 .nullable(true),
@@ -138,7 +156,15 @@ public class ItSystemViewsTest extends AbstractSystemViewTest {
                         new MetadataMatcher()
                                 .name("LENGTH")
                                 .type(ColumnType.INT32)
-                                .nullable(true))
+                                .nullable(true),
+
+                        // Legacy column.
+                        new MetadataMatcher()
+                                .name("NAME")
+                                .type(ColumnType.STRING)
+                                .precision(Short.MAX_VALUE)
+                                .nullable(true)
+                )
                 .check();
     }
 
diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItTablesSystemViewTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItTablesSystemViewTest.java
index ee192822ca8..acffa3ec17d 100644
--- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItTablesSystemViewTest.java
+++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItTablesSystemViewTest.java
@@ -42,19 +42,19 @@ public class ItTablesSystemViewTest extends AbstractSystemViewTest {
         assertQuery("SELECT * FROM SYSTEM.TABLES")
                 .columnMetadata(
                         new MetadataMatcher()
-                                .name("SCHEMA")
+                                .name("SCHEMA_NAME")
                                 .type(ColumnType.STRING)
                                 .precision(DEFAULT_VARLEN_LENGTH)
                                 .nullable(true),
 
                         new MetadataMatcher()
-                                .name("NAME")
+                                .name("TABLE_NAME")
                                 .type(ColumnType.STRING)
                                 .precision(DEFAULT_VARLEN_LENGTH)
                                 .nullable(true),
 
                         new MetadataMatcher()
-                                .name("ID")
+                                .name("TABLE_ID")
                                 .type(ColumnType.INT32)
                                 .nullable(true),
 
@@ -64,7 +64,7 @@ public class ItTablesSystemViewTest extends AbstractSystemViewTest {
                                 .nullable(true),
 
                         new MetadataMatcher()
-                                .name("ZONE")
+                                .name("ZONE_NAME")
                                 .type(ColumnType.STRING)
                                 .precision(DEFAULT_VARLEN_LENGTH)
                                 .nullable(true),
@@ -79,6 +79,43 @@ public class ItTablesSystemViewTest extends AbstractSystemViewTest {
                                 .name("COLOCATION_KEY_INDEX")
                                 .type(ColumnType.STRING)
                                 .precision(DEFAULT_VARLEN_LENGTH)
+                                .nullable(true),
+
+                        new MetadataMatcher()
+                                .name("SCHEMA_ID")
+                                .type(ColumnType.INT32)
+                                .nullable(true),
+
+                        new MetadataMatcher()
+                                .name("ZONE_ID")
+                                .type(ColumnType.INT32)
+                                .nullable(true),
+
+                        // Legacy column.
+                        new MetadataMatcher()
+                                .name("SCHEMA")
+                                .type(ColumnType.STRING)
+                                .precision(DEFAULT_VARLEN_LENGTH)
+                                .nullable(true),
+
+                        // Legacy column.
+                        new MetadataMatcher()
+                                .name("NAME")
+                                .type(ColumnType.STRING)
+                                .precision(DEFAULT_VARLEN_LENGTH)
+                                .nullable(true),
+
+                        // Legacy column.
+                        new MetadataMatcher()
+                                .name("ID")
+                                .type(ColumnType.INT32)
+                                .nullable(true),
+
+                        // Legacy column.
+                        new MetadataMatcher()
+                                .name("ZONE")
+                                .type(ColumnType.STRING)
+                                .precision(DEFAULT_VARLEN_LENGTH)
                                 .nullable(true)
                 )
                 .check();
@@ -104,7 +141,7 @@ public class ItTablesSystemViewTest extends AbstractSystemViewTest {
         assertQuery("SELECT * FROM SYSTEM.TABLE_COLUMNS")
                 .columnMetadata(
                         new MetadataMatcher()
-                                .name("SCHEMA")
+                                .name("SCHEMA_NAME")
                                 .type(ColumnType.STRING)
                                 .precision(DEFAULT_VARLEN_LENGTH)
                                 .nullable(true),
@@ -139,7 +176,7 @@ public class ItTablesSystemViewTest extends AbstractSystemViewTest {
                                 .nullable(true),
 
                         new MetadataMatcher()
-                                .name("PREC")
+                                .name("PRECISION")
                                 .type(ColumnType.INT32)
                                 .nullable(true),
 
@@ -156,6 +193,19 @@ public class ItTablesSystemViewTest extends AbstractSystemViewTest {
                         new MetadataMatcher()
                                 .name("COLUMN_ORDINAL")
                                 .type(ColumnType.INT32)
+                                .nullable(true),
+
+                        // Legacy column.
+                        new MetadataMatcher()
+                                .name("SCHEMA")
+                                .type(ColumnType.STRING)
+                                .precision(DEFAULT_VARLEN_LENGTH)
+                                .nullable(true),
+
+                        // Legacy column.
+                        new MetadataMatcher()
+                                .name("PREC")
+                                .type(ColumnType.INT32)
                                 .nullable(true)
                 )
                 .check();
diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItZonesSystemViewTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItZonesSystemViewTest.java
index eb25cf9793d..bf1227fefed 100644
--- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItZonesSystemViewTest.java
+++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItZonesSystemViewTest.java
@@ -31,7 +31,10 @@ import java.util.Objects;
 import org.apache.ignite.internal.app.IgniteImpl;
 import org.apache.ignite.internal.catalog.Catalog;
 import org.apache.ignite.internal.catalog.CatalogManager;
+import org.apache.ignite.internal.catalog.commands.CatalogUtils;
 import org.apache.ignite.internal.catalog.descriptors.ConsistencyMode;
+import org.apache.ignite.internal.sql.engine.util.MetadataMatcher;
+import org.apache.ignite.sql.ColumnType;
 import org.apache.ignite.sql.SqlException;
 import org.junit.jupiter.api.Test;
 
@@ -59,7 +62,9 @@ public class ItZonesSystemViewTest extends AbstractSystemViewTest {
                 INFINITE_TIMER_VALUE,
                 DEFAULT_FILTER,
                 true,
-                DEFAULT_CONSISTENCY_MODE.name()
+                DEFAULT_CONSISTENCY_MODE.name(),
+                0,
+                catalog.defaultZone().name()
         ).check();
     }
 
@@ -223,6 +228,68 @@ public class ItZonesSystemViewTest extends AbstractSystemViewTest {
         sql("DROP ZONE " + ZONE_NAME);
     }
 
+    @Test
+    public void testMetadata() {
+        assertQuery("SELECT * FROM SYSTEM.ZONES")
+                .columnMetadata(
+                        new MetadataMatcher()
+                                .name("ZONE_NAME")
+                                .type(ColumnType.STRING)
+                                .precision(CatalogUtils.DEFAULT_VARLEN_LENGTH)
+                                .nullable(true),
+
+                        new MetadataMatcher()
+                                .name("PARTITIONS")
+                                .type(ColumnType.INT32)
+                                .nullable(true),
+
+                        new MetadataMatcher()
+                                .name("REPLICAS")
+                                .type(ColumnType.INT32)
+                                .nullable(true),
+
+                        new MetadataMatcher()
+                                .name("DATA_NODES_AUTO_ADJUST_SCALE_UP")
+                                .type(ColumnType.INT32)
+                                .nullable(true),
+
+                        new MetadataMatcher()
+                                .name("DATA_NODES_AUTO_ADJUST_SCALE_DOWN")
+                                .type(ColumnType.INT32)
+                                .nullable(true),
+
+                        new MetadataMatcher()
+                                .name("DATA_NODES_FILTER")
+                                .type(ColumnType.STRING)
+                                .precision(CatalogUtils.DEFAULT_VARLEN_LENGTH)
+                                .nullable(true),
+
+                        new MetadataMatcher()
+                                .name("IS_DEFAULT_ZONE")
+                                .type(ColumnType.BOOLEAN)
+                                .nullable(true),
+
+                        new MetadataMatcher()
+                                .name("CONSISTENCY_MODE")
+                                .type(ColumnType.STRING)
+                                .precision(CatalogUtils.DEFAULT_VARLEN_LENGTH)
+                                .nullable(true),
+
+                        new MetadataMatcher()
+                                .name("ZONE_ID")
+                                .type(ColumnType.INT32)
+                                .nullable(true),
+
+                        // Legacy column.
+                        new MetadataMatcher()
+                                .name("NAME")
+                                .type(ColumnType.STRING)
+                                .precision(CatalogUtils.DEFAULT_VARLEN_LENGTH)
+                                .nullable(true)
+                )
+                .check();
+    }
+
     private static String createZoneSql(String zoneName, int partitions, int replicas, int scaleUp, int scaleDown, String filter) {
         String sqlFormat = "CREATE ZONE \"%s\" WITH "
                 + "\"PARTITIONS\" = %d, "
@@ -267,7 +334,8 @@ public class ItZonesSystemViewTest extends AbstractSystemViewTest {
     }
 
     private static String selectFromZonesSystemView(String zoneName) {
-        String sqlFormat = "SELECT * FROM SYSTEM.ZONES WHERE NAME = '%s'";
+        String sqlFormat = "SELECT ZONE_NAME, PARTITIONS, REPLICAS, DATA_NODES_AUTO_ADJUST_SCALE_UP, DATA_NODES_AUTO_ADJUST_SCALE_DOWN, "
+                + "DATA_NODES_FILTER, IS_DEFAULT_ZONE, CONSISTENCY_MODE FROM SYSTEM.ZONES WHERE ZONE_NAME = '%s'";
 
         return String.format(sqlFormat, zoneName);
     }