This is an automated email from the ASF dual-hosted git repository.
CRZbulabula pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 8c9dbb57c7c Add region group stats to table model database details
(#17738)
8c9dbb57c7c is described below
commit 8c9dbb57c7c1ad01427651c1dc554bd9056a0fa9
Author: libo <[email protected]>
AuthorDate: Tue Jun 16 11:04:25 2026 +0800
Add region group stats to table model database details (#17738)
---
.../relational/it/schema/IoTDBDatabaseIT.java | 55 +++++++++++++++++-----
.../manager/schema/ClusterSchemaManager.java | 4 --
.../InformationSchemaContentSupplierFactory.java | 4 +-
.../config/metadata/relational/ShowDBTask.java | 4 +-
.../statement/metadata/ShowDatabaseStatement.java | 8 ++--
.../schemaengine/table/InformationSchemaUtils.java | 7 ++-
.../schema/column/ColumnHeaderConstant.java | 11 +++--
.../commons/schema/table/InformationSchema.java | 6 +++
.../src/main/thrift/confignode.thrift | 2 -
9 files changed, 70 insertions(+), 31 deletions(-)
diff --git
a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java
b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java
index 4eab11ca3c7..58834cb5d79 100644
---
a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java
@@ -19,6 +19,8 @@
package org.apache.iotdb.relational.it.schema;
+import org.apache.iotdb.commons.schema.table.InformationSchema;
+import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchema;
import org.apache.iotdb.db.it.utils.TestUtils;
import org.apache.iotdb.it.env.EnvFactory;
import org.apache.iotdb.it.framework.IoTDBTestRunner;
@@ -41,12 +43,14 @@ import java.sql.Statement;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import static
org.apache.iotdb.commons.schema.column.ColumnHeaderConstant.showDBColumnHeaders;
import static
org.apache.iotdb.commons.schema.column.ColumnHeaderConstant.showDBDetailsColumnHeaders;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -139,6 +143,8 @@ public class IoTDBDatabaseIT {
final int[] schemaRegionGroupNum = new int[] {0};
final int[] dataRegionGroupNum = new int[] {0};
+ final int[] defaultSchemaRegionGroupNum = new int[] {1};
+ final int[] defaultDataRegionGroupNum = new int[] {2};
// show
try (final ResultSet resultSet = statement.executeQuery("SHOW DATABASES
DETAILS")) {
int cnt = 0;
@@ -158,7 +164,9 @@ public class IoTDBDatabaseIT {
assertEquals(dataReplicaFactors[cnt], resultSet.getInt(4));
assertEquals(timePartitionInterval[cnt], resultSet.getLong(5));
assertEquals(schemaRegionGroupNum[cnt], resultSet.getInt(6));
- assertEquals(dataRegionGroupNum[cnt], resultSet.getInt(7));
+ assertTrue(resultSet.getInt(7) >= defaultSchemaRegionGroupNum[cnt]);
+ assertEquals(dataRegionGroupNum[cnt], resultSet.getInt(8));
+ assertTrue(resultSet.getInt(9) >= defaultDataRegionGroupNum[cnt]);
cnt++;
}
assertEquals(databaseNames.length, cnt);
@@ -430,7 +438,9 @@ public class IoTDBDatabaseIT {
"data_replication_factor,INT32,ATTRIBUTE,",
"time_partition_interval,INT64,ATTRIBUTE,",
"schema_region_group_num,INT32,ATTRIBUTE,",
- "data_region_group_num,INT32,ATTRIBUTE,")));
+ "max_schema_region_group_num,INT32,ATTRIBUTE,",
+ "data_region_group_num,INT32,ATTRIBUTE,",
+ "max_data_region_group_num,INT32,ATTRIBUTE,")));
TestUtils.assertResultSetEqual(
statement.executeQuery("desc tables"),
"ColumnName,DataType,Category,",
@@ -637,13 +647,36 @@ public class IoTDBDatabaseIT {
statement.execute(
"CREATE VIEW test.view_table (tag1 STRING TAG,tag2 STRING TAG,s11
INT32 FIELD,s3 INT32 FIELD FROM s2) RESTRICT WITH (ttl=100) AS root.\"a\".**");
- TestUtils.assertResultSetEqual(
- statement.executeQuery("select * from databases"),
-
"database,ttl(ms),schema_replication_factor,data_replication_factor,time_partition_interval,schema_region_group_num,data_region_group_num,",
- new HashSet<>(
- Arrays.asList(
- "information_schema,INF,null,null,null,null,null,",
- "test,INF,1,1,604800000,0,0,")));
+ try (final ResultSet resultSet = statement.executeQuery("select * from
databases")) {
+ final ResultSetMetaData metaData = resultSet.getMetaData();
+ final List<TsTableColumnSchema> expectedColumnSchemas =
+
InformationSchema.getSchemaTables().get(InformationSchema.DATABASES).getColumnList();
+ assertEquals(expectedColumnSchemas.size(), metaData.getColumnCount());
+ for (int i = 0; i < expectedColumnSchemas.size(); i++) {
+ assertEquals(expectedColumnSchemas.get(i).getColumnName(),
metaData.getColumnName(i + 1));
+ }
+
+ int cnt = 0;
+ while (resultSet.next()) {
+ if ("information_schema".equals(resultSet.getString(1))) {
+ for (int columnIndex = 3; columnIndex <= 9; columnIndex++) {
+ assertNull(resultSet.getObject(columnIndex));
+ }
+ } else {
+ assertEquals("test", resultSet.getString(1));
+ assertEquals("INF", resultSet.getString(2));
+ assertEquals(1, resultSet.getInt(3));
+ assertEquals(1, resultSet.getInt(4));
+ assertEquals(604800000, resultSet.getLong(5));
+ assertEquals(0, resultSet.getInt(6));
+ assertTrue(resultSet.getInt(7) >= 1);
+ assertEquals(0, resultSet.getInt(8));
+ assertTrue(resultSet.getInt(9) >= 2);
+ }
+ cnt++;
+ }
+ assertEquals(2, cnt);
+ }
TestUtils.assertResultSetEqual(
statement.executeQuery("show devices from tables where status =
'USING'"),
"database,table_name,ttl(ms),status,comment,table_type,",
@@ -870,8 +903,8 @@ public class IoTDBDatabaseIT {
Collections.singleton("information_schema,INF,null,null,null,"));
TestUtils.assertResultSetEqual(
userStmt.executeQuery("select * from information_schema.databases"),
-
"database,ttl(ms),schema_replication_factor,data_replication_factor,time_partition_interval,schema_region_group_num,data_region_group_num,",
-
Collections.singleton("information_schema,INF,null,null,null,null,null,"));
+
"database,ttl(ms),schema_replication_factor,data_replication_factor,time_partition_interval,schema_region_group_num,max_schema_region_group_num,data_region_group_num,max_data_region_group_num,",
+
Collections.singleton("information_schema,INF,null,null,null,null,null,null,null,"));
}
try (final Connection adminCon =
EnvFactory.getEnv().getConnection(BaseEnv.TABLE_SQL_DIALECT);
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
index cfecd8e0114..fbf62d8f1dd 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
@@ -389,12 +389,8 @@ public class ClusterSchemaManager {
databaseInfo.setDataReplicationFactor(databaseSchema.getDataReplicationFactor());
databaseInfo.setTimePartitionOrigin(databaseSchema.getTimePartitionOrigin());
databaseInfo.setTimePartitionInterval(databaseSchema.getTimePartitionInterval());
- databaseInfo.setMinSchemaRegionNum(
- getMinRegionGroupNum(database, TConsensusGroupType.SchemaRegion));
databaseInfo.setMaxSchemaRegionNum(
getMaxRegionGroupNum(database, TConsensusGroupType.SchemaRegion));
- databaseInfo.setMinDataRegionNum(
- getMinRegionGroupNum(database, TConsensusGroupType.DataRegion));
databaseInfo.setMaxDataRegionNum(
getMaxRegionGroupNum(database, TConsensusGroupType.DataRegion));
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
index ca9c09ecb95..3b2c7e13bac 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
@@ -345,7 +345,9 @@ public class InformationSchemaContentSupplierFactory {
columnBuilders[3].writeInt(currentDatabase.getDataReplicationFactor());
columnBuilders[4].writeLong(currentDatabase.getTimePartitionInterval());
columnBuilders[5].writeInt(currentDatabase.getSchemaRegionNum());
- columnBuilders[6].writeInt(currentDatabase.getDataRegionNum());
+ columnBuilders[6].writeInt(currentDatabase.getMaxSchemaRegionNum());
+ columnBuilders[7].writeInt(currentDatabase.getDataRegionNum());
+ columnBuilders[8].writeInt(currentDatabase.getMaxDataRegionNum());
resultBuilder.declarePosition();
currentDatabase = null;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/relational/ShowDBTask.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/relational/ShowDBTask.java
index ba8ed54541a..128458888dc 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/relational/ShowDBTask.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/relational/ShowDBTask.java
@@ -166,7 +166,9 @@ public class ShowDBTask implements IConfigTask {
builder.getColumnBuilder(3).writeInt(storageGroupInfo.getDataReplicationFactor());
builder.getColumnBuilder(4).writeLong(storageGroupInfo.getTimePartitionInterval());
builder.getColumnBuilder(5).writeInt(storageGroupInfo.getSchemaRegionNum());
-
builder.getColumnBuilder(6).writeInt(storageGroupInfo.getDataRegionNum());
+
builder.getColumnBuilder(6).writeInt(storageGroupInfo.getMaxSchemaRegionNum());
+
builder.getColumnBuilder(7).writeInt(storageGroupInfo.getDataRegionNum());
+
builder.getColumnBuilder(8).writeInt(storageGroupInfo.getMaxDataRegionNum());
builder.declarePosition();
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowDatabaseStatement.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowDatabaseStatement.java
index e1a53662242..2367aa0c312 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowDatabaseStatement.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowDatabaseStatement.java
@@ -101,11 +101,9 @@ public class ShowDatabaseStatement extends ShowStatement
implements IConfigState
builder.getColumnBuilder(4).writeLong(databaseInfo.getTimePartitionInterval());
if (isDetailed) {
builder.getColumnBuilder(5).writeInt(databaseInfo.getSchemaRegionNum());
-
builder.getColumnBuilder(6).writeInt(databaseInfo.getMinSchemaRegionNum());
-
builder.getColumnBuilder(7).writeInt(databaseInfo.getMaxSchemaRegionNum());
- builder.getColumnBuilder(8).writeInt(databaseInfo.getDataRegionNum());
-
builder.getColumnBuilder(9).writeInt(databaseInfo.getMinDataRegionNum());
-
builder.getColumnBuilder(10).writeInt(databaseInfo.getMaxDataRegionNum());
+
builder.getColumnBuilder(6).writeInt(databaseInfo.getMaxSchemaRegionNum());
+ builder.getColumnBuilder(7).writeInt(databaseInfo.getDataRegionNum());
+
builder.getColumnBuilder(8).writeInt(databaseInfo.getMaxDataRegionNum());
}
builder.declarePosition();
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/table/InformationSchemaUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/table/InformationSchemaUtils.java
index f736c96ee76..443352ae919 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/table/InformationSchemaUtils.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/table/InformationSchemaUtils.java
@@ -74,8 +74,11 @@ public class InformationSchemaUtils {
builder.getColumnBuilder(3).appendNull();
builder.getColumnBuilder(4).appendNull();
if (details) {
- builder.getColumnBuilder(5).appendNull();
- builder.getColumnBuilder(6).appendNull();
+ for (int columnIndex = 5;
+ columnIndex < builder.getValueColumnBuilders().length;
+ columnIndex++) {
+ builder.getColumnBuilder(columnIndex).appendNull();
+ }
}
builder.declarePosition();
}
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeaderConstant.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeaderConstant.java
index 186f7daa684..33c3fe451ca 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeaderConstant.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeaderConstant.java
@@ -61,10 +61,8 @@ public class ColumnHeaderConstant {
public static final String TIME_PARTITION_ORIGIN = "TimePartitionOrigin";
public static final String TIME_PARTITION_INTERVAL = "TimePartitionInterval";
public static final String SCHEMA_REGION_GROUP_NUM = "SchemaRegionGroupNum";
- public static final String MIN_SCHEMA_REGION_GROUP_NUM =
"MinSchemaRegionGroupNum";
public static final String MAX_SCHEMA_REGION_GROUP_NUM =
"MaxSchemaRegionGroupNum";
public static final String DATA_REGION_GROUP_NUM = "DataRegionGroupNum";
- public static final String MIN_DATA_REGION_GROUP_NUM =
"MinDataRegionGroupNum";
public static final String MAX_DATA_REGION_GROUP_NUM =
"MaxDataRegionGroupNum";
public static final String CHILD_PATHS = "ChildPaths";
public static final String NODE_TYPES = "NodeTypes";
@@ -248,7 +246,10 @@ public class ColumnHeaderConstant {
public static final String DATA_REPLICATION_FACTOR_TABLE_MODEL =
"data_replication_factor";
public static final String TIME_PARTITION_INTERVAL_TABLE_MODEL =
"time_partition_interval";
public static final String SCHEMA_REGION_GROUP_NUM_TABLE_MODEL =
"schema_region_group_num";
+ public static final String MAX_SCHEMA_REGION_GROUP_NUM_TABLE_MODEL =
+ "max_schema_region_group_num";
public static final String DATA_REGION_GROUP_NUM_TABLE_MODEL =
"data_region_group_num";
+ public static final String MAX_DATA_REGION_GROUP_NUM_TABLE_MODEL =
"max_data_region_group_num";
public static final String REGION_ID_TABLE_MODEL = "region_id";
public static final String DATANODE_ID_TABLE_MODEL = "datanode_id";
@@ -417,10 +418,8 @@ public class ColumnHeaderConstant {
new ColumnHeader(TIME_PARTITION_ORIGIN, TSDataType.INT64),
new ColumnHeader(TIME_PARTITION_INTERVAL, TSDataType.INT64),
new ColumnHeader(SCHEMA_REGION_GROUP_NUM, TSDataType.INT32),
- new ColumnHeader(MIN_SCHEMA_REGION_GROUP_NUM, TSDataType.INT32),
new ColumnHeader(MAX_SCHEMA_REGION_GROUP_NUM, TSDataType.INT32),
new ColumnHeader(DATA_REGION_GROUP_NUM, TSDataType.INT32),
- new ColumnHeader(MIN_DATA_REGION_GROUP_NUM, TSDataType.INT32),
new ColumnHeader(MAX_DATA_REGION_GROUP_NUM, TSDataType.INT32));
public static final List<ColumnHeader> showChildPathsColumnHeaders =
@@ -730,7 +729,9 @@ public class ColumnHeaderConstant {
new ColumnHeader(DATA_REPLICATION_FACTOR, TSDataType.INT32),
new ColumnHeader(TIME_PARTITION_INTERVAL, TSDataType.INT64),
new ColumnHeader(SCHEMA_REGION_GROUP_NUM, TSDataType.INT32),
- new ColumnHeader(DATA_REGION_GROUP_NUM, TSDataType.INT32));
+ new ColumnHeader(MAX_SCHEMA_REGION_GROUP_NUM, TSDataType.INT32),
+ new ColumnHeader(DATA_REGION_GROUP_NUM, TSDataType.INT32),
+ new ColumnHeader(MAX_DATA_REGION_GROUP_NUM, TSDataType.INT32));
public static final List<ColumnHeader> describeTableColumnHeaders =
ImmutableList.of(
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/InformationSchema.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/InformationSchema.java
index c4001ecbb1e..27a1dbdd9d2 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/InformationSchema.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/InformationSchema.java
@@ -106,9 +106,15 @@ public class InformationSchema {
databaseTable.addColumnSchema(
new AttributeColumnSchema(
ColumnHeaderConstant.SCHEMA_REGION_GROUP_NUM_TABLE_MODEL,
TSDataType.INT32));
+ databaseTable.addColumnSchema(
+ new AttributeColumnSchema(
+ ColumnHeaderConstant.MAX_SCHEMA_REGION_GROUP_NUM_TABLE_MODEL,
TSDataType.INT32));
databaseTable.addColumnSchema(
new AttributeColumnSchema(
ColumnHeaderConstant.DATA_REGION_GROUP_NUM_TABLE_MODEL,
TSDataType.INT32));
+ databaseTable.addColumnSchema(
+ new AttributeColumnSchema(
+ ColumnHeaderConstant.MAX_DATA_REGION_GROUP_NUM_TABLE_MODEL,
TSDataType.INT32));
schemaTables.put(DATABASES, databaseTable);
final TsTable tableTable = new TsTable(TABLES);
diff --git a/iotdb-protocol/thrift-confignode/src/main/thrift/confignode.thrift
b/iotdb-protocol/thrift-confignode/src/main/thrift/confignode.thrift
index e8720d3592c..852460fb60e 100644
--- a/iotdb-protocol/thrift-confignode/src/main/thrift/confignode.thrift
+++ b/iotdb-protocol/thrift-confignode/src/main/thrift/confignode.thrift
@@ -736,10 +736,8 @@ struct TDatabaseInfo {
4: required i32 dataReplicationFactor
5: required i64 timePartitionInterval
6: required i32 schemaRegionNum
- 7: required i32 minSchemaRegionNum
8: required i32 maxSchemaRegionNum
9: required i32 dataRegionNum
- 10: required i32 minDataRegionNum
11: required i32 maxDataRegionNum
12: optional i64 timePartitionOrigin
}