<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->

# System Tables

IoTDB has a built-in system database called `INFORMATION_SCHEMA`, which contains a series of system tables for storing IoTDB runtime information (such as currently executing SQL statements, etc.). Currently, the `INFORMATION_SCHEMA` database only supports read operations.

## 1. System Database

* ​**Name**​: `INFORMATION_SCHEMA`
* ​**Commands**​: Read-only, only supports `Show databases (DETAILS)` / `Show Tables (DETAILS)` / `Use`. Other operations will result in an error: `"The database 'information_schema' can only be queried."`
* ​**Attributes**​:` TTL=INF`, other attributes default to `null  `
* ​**SQL Example**​:

```sql
IoTDB> show databases
+------------------+-------+-----------------------+---------------------+---------------------+
|          Database|TTL(ms)|SchemaReplicationFactor|DataReplicationFactor|TimePartitionInterval|
+------------------+-------+-----------------------+---------------------+---------------------+
|information_schema|    INF|                   null|                 null|                 null|
+------------------+-------+-----------------------+---------------------+---------------------+

IoTDB> show tables from information_schema
+-----------------------+-------+
|              TableName|TTL(ms)|
+-----------------------+-------+
|                columns|    INF|
|           config_nodes|    INF|
|         configurations|    INF|
|            connections|    INF|
|        current_queries|    INF|
|             data_nodes|    INF|
|              databases|    INF|
|              functions|    INF|
|               keywords|    INF|
|                  nodes|    INF|
|           pipe_plugins|    INF|
|                  pipes|    INF|
|                queries|    INF|
|queries_costs_histogram|    INF|
|                regions|    INF|
|               services|    INF|
|          subscriptions|    INF|
|       table_disk_usage|    INF|
|                 tables|    INF|
|                 topics|    INF|
|                  views|    INF|
+-----------------------+-------+
```

## 2. System Tables

* ​**Names**​: `DATABASES`, `TABLES`, `REGIONS`, `QUERIES`, `COLUMNS`, `PIPES`, `PIPE_PLUGINS`, `SUBSCRIPTION`, `TOPICS`, `VIEWS`, `MODELS`, `FUNCTIONS`, `CONFIGURATIONS`, `KEYWORDS`, `NODES`, `CONFIG_NODES`, `DATA_NODES` , `CONNECTIONS`, `CURRENT_QUERIES`, `QUERIES_COSTS_HISTOGRAM`, `SERVICES`, `TABLE_DISK_USAGE` (detailed descriptions in later sections)
* ​**Operations**​: Read-only, only supports `SELECT`, `COUNT/SHOW DEVICES`, `DESC`. Any modifications to table structure or content are not allowed and will result in an error: `"The database 'information_schema' can only be queried."  `
* ​**Column Names**​: System table column names are all lowercase by default and separated by underscores (`_`).

### 2.1 DATABASES

* Contains information about all databases in the cluster.
* Table structure is as follows:

| Column Name                     | Data Type | Column Type | Description                    |
| --------------------------------- | ----------- | ------------- | -------------------------------- |
| `database`                  | STRING    | TAG         | Database name                  |
| `ttl(ms)`                   | STRING    | ATTRIBUTE   | Data retention time            |
| `schema_replication_factor` | INT32     | ATTRIBUTE   | Schema replica count           |
| `data_replication_factor`   | INT32     | ATTRIBUTE   | Data replica count             |
| `time_partition_interval`   | INT64     | ATTRIBUTE   | Time partition interval        |
| `schema_region_group_num`   | INT32     | ATTRIBUTE   | Number of schema region groups |
| `data_region_group_num`     | INT32     | ATTRIBUTE   | Number of data region groups   |

* The query results only display the collection of databases for which you have any permission on the database itself or any table within the database.
* Query Example:

```sql
IoTDB> 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|
+------------------+-------+-------------------------+-----------------------+-----------------------+-----------------------+---------------------+
|information_schema|    INF|                     null|                   null|                   null|                   null|                 null|
|         database1|    INF|                        1|                      1|              604800000|                      0|                    0|
+------------------+-------+-------------------------+-----------------------+-----------------------+-----------------------+---------------------+
```

### 2.2 TABLES

* Contains information about all tables in the cluster.
* Table structure is as follows:

| Column Name      | Data Type | Column Type | Description         |
| ------------------ | ----------- | ------------- | --------------------- |
| `database`   | STRING    | TAG         | Database name       |
| `table_name` | STRING    | TAG         | Table name          |
| `ttl(ms)`    | STRING    | ATTRIBUTE   | Data retention time |
| `status`     | STRING    | ATTRIBUTE   | Status              |
| `comment`    | STRING    | ATTRIBUTE   | Description/comment |

* Note:  Possible values for `status`: `USING`, `PRE_CREATE`, `PRE_DELETE`.  For details, refer to the [View Tables](../Basic-Concept/Table-Management_apache.md#12-view-tables) in Table Management documentation
* The query results only display the collection of tables for which you have any permission.
* Query Example:

```sql
IoTDB> select * from information_schema.tables
+------------------+--------------+-----------+------+-------+-----------+
|          database|    table_name|    ttl(ms)|status|comment| table_type|
+------------------+--------------+-----------+------+-------+-----------+
|information_schema|     databases|        INF| USING|   null|SYSTEM VIEW|
|information_schema|        models|        INF| USING|   null|SYSTEM VIEW|
|information_schema| subscriptions|        INF| USING|   null|SYSTEM VIEW|
|information_schema|       regions|        INF| USING|   null|SYSTEM VIEW|
|information_schema|     functions|        INF| USING|   null|SYSTEM VIEW|
|information_schema|      keywords|        INF| USING|   null|SYSTEM VIEW|
|information_schema|       columns|        INF| USING|   null|SYSTEM VIEW|
|information_schema|        topics|        INF| USING|   null|SYSTEM VIEW|
|information_schema|configurations|        INF| USING|   null|SYSTEM VIEW|
|information_schema|       queries|        INF| USING|   null|SYSTEM VIEW|
|information_schema|        tables|        INF| USING|   null|SYSTEM VIEW|
|information_schema|  pipe_plugins|        INF| USING|   null|SYSTEM VIEW|
|information_schema|         nodes|        INF| USING|   null|SYSTEM VIEW|
|information_schema|    data_nodes|        INF| USING|   null|SYSTEM VIEW|
|information_schema|         pipes|        INF| USING|   null|SYSTEM VIEW|
|information_schema|         views|        INF| USING|   null|SYSTEM VIEW|
|information_schema|  config_nodes|        INF| USING|   null|SYSTEM VIEW|
|         database1|        table1|31536000000| USING|   null| BASE TABLE|
+------------------+--------------+-----------+------+-------+-----------+
```

### 2.3 REGIONS

* Contains information about all regions in the cluster.
* Table structure is as follows:

| Column Name             | Data Type | Column Type | Description                                                                                                                                                       |
| ------------------------- | ----------- | ------------- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `region_id`         | INT32     | TAG         | Region ID                                                                                                                                                         |
| `datanode_id`       | INT32     | TAG         | DataNode ID                                                                                                                                                       |
| `type`              | STRING    | ATTRIBUTE   | Type (`SchemaRegion`/`DataRegion`)                                                                                                                                |
| `status`            | STRING    | ATTRIBUTE   | Status (`Running`,`Unknown`, etc.)                                                                                                                                |
| `database`          | STRING    | ATTRIBUTE   | Database name                                                                                                                                                     |
| `series_slot_num`   | INT32     | ATTRIBUTE   | Number of series slots                                                                                                                                            |
| `time_slot_num`     | INT64     | ATTRIBUTE   | Number of time slots                                                                                                                                              |
| `rpc_address`       | STRING    | ATTRIBUTE   | RPC address                                                                                                                                                       |
| `rpc_port`          | INT32     | ATTRIBUTE   | RPC port                                                                                                                                                          |
| `internal_address`  | STRING    | ATTRIBUTE   | Internal communication address                                                                                                                                    |
| `role`              | STRING    | ATTRIBUTE   | Role (`Leader`/`Follower`)                                                                                                                                        |
| `create_time`       | TIMESTAMP | ATTRIBUTE   | Creation time                                                                                                                                                     |
| `tsfile_size_bytes` | INT64     | ATTRIBUTE   | - For​**DataRegion with statistics ​**​: Total file size of TsFiles. <br>- For**DataRegion without statistics**(Unknown):`-1`.<br>- For​**SchemaRegion**​:`null`. |

* Only administrators are allowed to perform query operations.
* Query Example:

```SQL
IoTDB> select * from information_schema.regions
+---------+-----------+------------+-------+---------+---------------+-------------+-----------+--------+----------------+------+-----------------------------+-----------------+
|region_id|datanode_id|        type| status| database|series_slot_num|time_slot_num|rpc_address|rpc_port|internal_address|  role|                  create_time|tsfile_size_bytes|
+---------+-----------+------------+-------+---------+---------------+-------------+-----------+--------+----------------+------+-----------------------------+-----------------+
|        0|          1|SchemaRegion|Running|database1|             12|            0|    0.0.0.0|    6667|       127.0.0.1|Leader|2025-03-31T11:19:08.485+08:00|             null|
|        1|          1|  DataRegion|Running|database1|              6|            6|    0.0.0.0|    6667|       127.0.0.1|Leader|2025-03-31T11:19:09.156+08:00|             3985|
|        2|          1|  DataRegion|Running|database1|              6|            6|    0.0.0.0|    6667|       127.0.0.1|Leader|2025-03-31T11:19:09.156+08:00|             3841|
+---------+-----------+------------+-------+---------+---------------+-------------+-----------+--------+----------------+------+-----------------------------+-----------------+
```

### 2.4 QUERIES

* Contains information about all currently executing queries in the cluster. Can also be queried using the `SHOW QUERIES` syntax.
* Table structure is as follows:

| Column Name        | Data Type | Column Type | Description                                                |
| -------------------- | ----------- | ------------- | ------------------------------------------------------------ |
| `query_id`     | STRING    | TAG         | Query ID                                                   |
| `start_time`   | TIMESTAMP | ATTRIBUTE   | Query start timestamp (precision matches system precision) |
| `datanode_id`  | INT32     | ATTRIBUTE   | DataNode ID that initiated the query                       |
| `elapsed_time` | FLOAT     | ATTRIBUTE   | Query execution duration (in seconds)                      |
| `statement`    | STRING    | ATTRIBUTE   | SQL statement of the query                                 |
| `user`         | STRING    | ATTRIBUTE   | User who initiated the query                               |

* For regular users, the query results only display the queries executed by themselves; for administrators, all queries are displayed.
* Query Example:

```SQL
IoTDB> select * from information_schema.queries
+-----------------------+-----------------------------+-----------+------------+----------------------------------------+----+
|               query_id|                   start_time|datanode_id|elapsed_time|                               statement|user|
+-----------------------+-----------------------------+-----------+------------+----------------------------------------+----+
|20250331_023242_00011_1|2025-03-31T10:32:42.360+08:00|          1|       0.025|select * from information_schema.queries|root|
+-----------------------+-----------------------------+-----------+------------+----------------------------------------+----+
```

### 2.5 COLUMNS

* Contains information about all columns in tables across the cluster
* Table structure is as follows:

| Column Name       | Data Type | Column Type | Description        |
| ------------------- | ----------- | ------------- | -------------------- |
| `database`    | STRING    | TAG         | Database name      |
| `table_name`  | STRING    | TAG         | Table name         |
| `column_name` | STRING    | TAG         | Column name        |
| `datatype`    | STRING    | ATTRIBUTE   | Column data type   |
| `category`    | STRING    | ATTRIBUTE   | Column category    |
| `status`      | STRING    | ATTRIBUTE   | Column status      |
| `comment`     | STRING    | ATTRIBUTE   | Column description |

Notes: 
* Possible values for `status`: `USING`, `PRE_DELETE`. For details, refer to [Viewing Table Columns](../Basic-Concept/Table-Management_apache.html#13-view-table-columns) in Table Management documentation.
* The query results only display the column information of tables for which you have any permission.

* Query Example:

```SQL
IoTDB> select * from information_schema.columns where database = 'database1'
+---------+----------+------------+---------+---------+------+-------+
| database|table_name| column_name| datatype| category|status|comment|
+---------+----------+------------+---------+---------+------+-------+
|database1|    table1|        time|TIMESTAMP|     TIME| USING|   null|
|database1|    table1|      region|   STRING|      TAG| USING|   null|
|database1|    table1|    plant_id|   STRING|      TAG| USING|   null|
|database1|    table1|   device_id|   STRING|      TAG| USING|   null|
|database1|    table1|    model_id|   STRING|ATTRIBUTE| USING|   null|
|database1|    table1| maintenance|   STRING|ATTRIBUTE| USING|   null|
|database1|    table1| temperature|    FLOAT|    FIELD| USING|   null|
|database1|    table1|    humidity|    FLOAT|    FIELD| USING|   null|
|database1|    table1|      status|  BOOLEAN|    FIELD| USING|   null|
|database1|    table1|arrival_time|TIMESTAMP|    FIELD| USING|   null|
+---------+----------+------------+---------+---------+------+-------+
```

### 2.6 PIPES

* Contains information about all pipes in the cluster
* Table structure is as follows:

| Column Name                       | Data Type | Column Type | Description                                              |
| ----------------------------------- | ----------- | ------------- | ---------------------------------------------------------- |
| `id`                          | STRING    | TAG         | Pipe name                                                |
| `creation_time`               | TIMESTAMP | ATTRIBUTE   | Creation time                                            |
| `state`                       | STRING    | ATTRIBUTE   | Pipe status (`RUNNING`/`STOPPED`)                |
| `pipe_source`                 | STRING    | ATTRIBUTE   | Source plugin parameters                                 |
| `pipe_processor`              | STRING    | ATTRIBUTE   | Processor plugin parameters                              |
| `pipe_sink`                   | STRING    | ATTRIBUTE   | Sink plugin parameters                                   |
| `exception_message`           | STRING    | ATTRIBUTE   | Exception message                                        |
| `remaining_event_count`       | INT64     | ATTRIBUTE   | Remaining event count (`-1`if Unknown)               |
| `estimated_remaining_seconds` | DOUBLE    | ATTRIBUTE   | Estimated remaining time in seconds (`-1`if Unknown) |

* Only administrators are allowed to perform operations.
* Query Example:

```SQL
select * from information_schema.pipes
+----------+-----------------------------+-------+--------------------------------------------------------------------------+--------------+-----------------------------------------------------------------------+-----------------+---------------------+---------------------------+
|        id|                creation_time|  state|                                                               pipe_source|pipe_processor|                                                              pipe_sink|exception_message|remaining_event_count|estimated_remaining_seconds|
+----------+-----------------------------+-------+--------------------------------------------------------------------------+--------------+-----------------------------------------------------------------------+-----------------+---------------------+---------------------------+
|tablepipe1|2025-03-31T12:25:24.040+08:00|RUNNING|{__system.sql-dialect=table, source.password=******, source.username=root}|            {}|{format=hybrid, node-urls=192.168.xxx.xxx:6667, sink=iotdb-thrift-sink}|                 |                    0|                        0.0|
+----------+-----------------------------+-------+--------------------------------------------------------------------------+--------------+-----------------------------------------------------------------------+-----------------+---------------------+---------------------------+
```

### 2.7 PIPE\_PLUGINS

* Contains information about all PIPE plugins in the cluster
* Table structure is as follows:

| Column Name       | Data Type | Column Type | Description                                         |
| ------------------- | ----------- | ------------- | ----------------------------------------------------- |
| `plugin_name` | STRING    | TAG         | Plugin name                                         |
| `plugin_type` | STRING    | ATTRIBUTE   | Plugin type (`Builtin`/`External`)          |
| `class_name`  | STRING    | ATTRIBUTE   | Plugin's main class name                            |
| `plugin_jar`  | STRING    | ATTRIBUTE   | Plugin's JAR file name (`null`for builtin type) |

* Query Example:

```SQL
IoTDB> select * from information_schema.pipe_plugins
+---------------------+-----------+-------------------------------------------------------------------------------------------------+----------+
|          plugin_name|plugin_type|                                                                                       class_name|plugin_jar|
+---------------------+-----------+-------------------------------------------------------------------------------------------------+----------+
|IOTDB-THRIFT-SSL-SINK|    Builtin|org.apache.iotdb.commons.pipe.agent.plugin.builtin.connector.iotdb.thrift.IoTDBThriftSslConnector|      null|
|   IOTDB-AIR-GAP-SINK|    Builtin|   org.apache.iotdb.commons.pipe.agent.plugin.builtin.connector.iotdb.airgap.IoTDBAirGapConnector|      null|
|      DO-NOTHING-SINK|    Builtin|        org.apache.iotdb.commons.pipe.agent.plugin.builtin.connector.donothing.DoNothingConnector|      null|
| DO-NOTHING-PROCESSOR|    Builtin|        org.apache.iotdb.commons.pipe.agent.plugin.builtin.processor.donothing.DoNothingProcessor|      null|
|    IOTDB-THRIFT-SINK|    Builtin|   org.apache.iotdb.commons.pipe.agent.plugin.builtin.connector.iotdb.thrift.IoTDBThriftConnector|      null|
|         IOTDB-SOURCE|    Builtin|                org.apache.iotdb.commons.pipe.agent.plugin.builtin.extractor.iotdb.IoTDBExtractor|      null|
+---------------------+-----------+-------------------------------------------------------------------------------------------------+----------+
```

### 2.8 SUBSCRIPTIONS

* Contains information about all data subscriptions in the cluster
* Table structure is as follows:

| Column Name                | Data Type | Column Type | Description             |
| ---------------------------- | ----------- | ------------- | ------------------------- |
| `topic_name`           | STRING    | TAG         | Subscription topic name |
| `consumer_group_name`  | STRING    | TAG         | Consumer group name     |
| `subscribed_consumers` | STRING    | ATTRIBUTE   | Subscribed consumers    |

* Only administrators are allowed to perform operations.
* Query Example:

```SQL
IoTDB> select * from information_schema.subscriptions where topic_name = 'topic_1'
+----------+-------------------+--------------------------------+
|topic_name|consumer_group_name|            subscribed_consumers|
+----------+-------------------+--------------------------------+
|   topic_1|                cg1|[c3, c4, c5, c6, c7, c0, c1, c2]|
+----------+-------------------+--------------------------------+
```

### 2.9 TOPICS

* Contains information about all data subscription topics in the cluster
* Table structure is as follows:

| Column Name         | Data Type | Column Type | Description                    |
| --------------------- | ----------- | ------------- | -------------------------------- |
| `topic_name`    | STRING    | TAG         | Subscription topic name        |
| `topic_configs` | STRING    | ATTRIBUTE   | Topic configuration parameters |

* Only administrators are allowed to perform operations.
* Query Example:

```SQL
IoTDB> select * from information_schema.topics
+----------+----------------------------------------------------------------+
|topic_name|                                                   topic_configs|
+----------+----------------------------------------------------------------+
|     topic|{__system.sql-dialect=table, start-time=2025-01-10T17:05:38.282}|
+----------+----------------------------------------------------------------+
```

### 2.10 VIEWS

> This system table is available starting from version V2.0.5.

* Contains information about all table views in the database.
* The table structure is as follows:

| Column Name      | Data Type | Column Category | Description                     |
| ------------------ | ----------- | ----------------- | --------------------------------- |
| database         | STRING    | TAG             | Database name                   |
| table\_name      | STRING    | TAG             | View name                       |
| view\_definition | STRING    | ATTRIBUTE       | SQL statement for view creation |

* The query results only display the collection of views for which you have any permission.
* Query example:

```SQL
IoTDB> select * from information_schema.views
+---------+----------+---------------------------------------------------------------------------------------------------------------------------------------+
| database|table_name|                                                                                                                        view_definition|
+---------+----------+---------------------------------------------------------------------------------------------------------------------------------------+
|database1|        ln|CREATE VIEW "ln" ("device" STRING TAG,"model" STRING TAG,"status" BOOLEAN FIELD,"hardware" STRING FIELD) WITH (ttl='INF') AS root.ln.**|
+---------+----------+---------------------------------------------------------------------------------------------------------------------------------------+
```


### 2.11 MODELS

> This system table is available starting from version V 2.0.5 and has been discontinued since version V 2.0.8.

* Contains information about all models in the database.
* The table structure is as follows:

| Column Name | Data Type | Column Category | Description                                                                                    |
| ------------- | ----------- | ----------------- | ------------------------------------------------------------------------------------------------ |
| model\_id   | STRING    | TAG             | Model name                                                                                     |
| model\_type | STRING    | ATTRIBUTE       | Model type (Forecast, Anomaly Detection, Custom)                                               |
| state       | STRING    | ATTRIBUTE       | Model status (Available/Unavailable)                                                           |
| configs     | STRING    | ATTRIBUTE       | String format of model hyperparameters, consistent with the output of the `show` command   |
| notes       | STRING    | ATTRIBUTE       | Model description\* Built-in model: Built-in model in IoTDB\* User-defined model: Custom model |

* Query example:

```SQL
-- Find all built-in forecast models
IoTDB> select * from information_schema.models where model_type = 'BUILT_IN_FORECAST'
+---------------------+-----------------+------+-------+-----------------------+
|             model_id|       model_type| state|configs|                  notes|
+---------------------+-----------------+------+-------+-----------------------+
|       _STLForecaster|BUILT_IN_FORECAST|ACTIVE|   null|Built-in model in IoTDB|
|     _NaiveForecaster|BUILT_IN_FORECAST|ACTIVE|   null|Built-in model in IoTDB|
|               _ARIMA|BUILT_IN_FORECAST|ACTIVE|   null|Built-in model in IoTDB|
|_ExponentialSmoothing|BUILT_IN_FORECAST|ACTIVE|   null|Built-in model in IoTDB|
|         _HoltWinters|BUILT_IN_FORECAST|ACTIVE|   null|Built-in model in IoTDB|
|             _sundial|BUILT_IN_FORECAST|ACTIVE|   null|Built-in model in IoTDB|
+---------------------+-----------------+------+-------+-----------------------+
```


### 2.12 FUNCTIONS

> This system table is available starting from version V2.0.5.

* Contains information about all functions in the database.
* The table structure is as follows:

| Column Name      | Data Type | Column Category | Description                                                              |
| ------------------ | ----------- | ----------------- | -------------------------------------------------------------------------- |
| function\_name   | STRING    | TAG             | Function name                                                            |
| function\_type   | STRING    | ATTRIBUTE       | Function type (Built-in/User-defined, Scalar/Aggregation/Table Function) |
| class\_name(udf) | STRING    | ATTRIBUTE       | Class name if it is a UDF, otherwise null (tentative)                    |
| state            | STRING    | ATTRIBUTE       | Availability status                                                      |

* Query example:

```SQL
IoTDB> select * from information_schema.functions where function_type='built-in table function'
+--------------+-----------------------+---------------+---------+
|function_name |          function_type|class_name(udf)|    state|
+--------------+-----------------------+---------------+---------+
|      CUMULATE|built-in table function|           null|AVAILABLE|
|       SESSION|built-in table function|           null|AVAILABLE|
|           HOP|built-in table function|           null|AVAILABLE|
|        TUMBLE|built-in table function|           null|AVAILABLE|
|      FORECAST|built-in table function|           null|AVAILABLE|
|     VARIATION|built-in table function|           null|AVAILABLE|
|      CAPACITY|built-in table function|           null|AVAILABLE|
+--------------+-----------------------+---------------+---------+
```


### 2.13 CONFIGURATIONS

> This system table is available starting from version V2.0.5.

* Contains all configuration properties of the database.
* The table structure is as follows:

| Column Name | Data Type | Column Category | Description                  |
| ------------- | ----------- | ----------------- | ------------------------------ |
| variable    | STRING    | TAG             | Configuration property name  |
| value       | STRING    | ATTRIBUTE       | Configuration property value |

* Only administrators are allowed to perform operations on this table.
* Query example:

```SQL
IoTDB> select * from information_schema.configurations
+----------------------------------+-----------------------------------------------------------------+
|                          variable|                                                            value|
+----------------------------------+-----------------------------------------------------------------+
|                       ClusterName|                                                   defaultCluster|
|             DataReplicationFactor|                                                                1|
|           SchemaReplicationFactor|                                                                1|
|  DataRegionConsensusProtocolClass|                      org.apache.iotdb.consensus.iot.IoTConsensus|
|SchemaRegionConsensusProtocolClass|                  org.apache.iotdb.consensus.ratis.RatisConsensus|
|  ConfigNodeConsensusProtocolClass|                  org.apache.iotdb.consensus.ratis.RatisConsensus|
|               TimePartitionOrigin|                                                                0|
|             TimePartitionInterval|                                                        604800000|
|              ReadConsistencyLevel|                                                           strong|
|           SchemaRegionPerDataNode|                                                                1|
|             DataRegionPerDataNode|                                                                0|
|                     SeriesSlotNum|                                                             1000|
|           SeriesSlotExecutorClass|org.apache.iotdb.commons.partition.executor.hash.BKDRHashExecutor|
|         DiskSpaceWarningThreshold|                                                             0.05|
|                TimestampPrecision|                                                               ms|
+----------------------------------+-----------------------------------------------------------------+
```


### 2.14 KEYWORDS

> This system table is available starting from version V2.0.5.

* Contains all keywords in the database.
* The table structure is as follows:

| Column Name | Data Type | Column Category | Description                                     |
| ------------- | ----------- | ----------------- | ------------------------------------------------- |
| word        | STRING    | TAG             | Keyword                                         |
| reserved    | INT32     | ATTRIBUTE       | Whether it is a reserved word (1 = Yes, 0 = No) |

* Query example:

```SQL
IoTDB> select * from information_schema.keywords limit 10
+----------+--------+
|      word|reserved|
+----------+--------+
|    ABSENT|       0|
|ACTIVATION|       1|
|  ACTIVATE|       1|
|       ADD|       0|
|     ADMIN|       0|
|     AFTER|       0|
|   AINODES|       1|
|       ALL|       0|
|     ALTER|       1|
|   ANALYZE|       0|
+----------+--------+
```


### 2.15 NODES

> This system table is available starting from version V2.0.5.

* Contains information about all nodes in the database cluster.
* The table structure is as follows:

| Column Name                                | Data Type | Column Category | Description          |
| -------------------------------------------- | ----------- | ----------------- | ---------------------- |
| node\_id                                   | INT32     | TAG             | Node ID              |
| node\_type                                 | STRING    | ATTRIBUTE       | Node type            |
| status                                     | STRING    | ATTRIBUTE       | Node status          |
| internal\_address                          | STRING    | ATTRIBUTE       | Internal RPC address |
| internal\_port                             | INT32     | ATTRIBUTE       | Internal port        |
| version                                    | STRING    | ATTRIBUTE       | Version number       |
| build\_info                                | STRING    | ATTRIBUTE       | Commit ID            |
| activate\_status (Enterprise Edition only) | STRING    | ATTRIBUTE       | Activation status    |

* Only administrators are allowed to perform operations on this table.
* Query example:

```SQL
IoTDB> select * from information_schema.nodes 
+-------+----------+-------+----------------+-------------+-------+----------+
|node_id| node_type| status|internal_address|internal_port|version|build_info|
+-------+----------+-------+----------------+-------------+-------+----------+
|      0|ConfigNode|Running|       127.0.0.1|        10710|2.0.5.1|   58d685e|
|      1|  DataNode|Running|       127.0.0.1|        10730|2.0.5.1|   58d685e|
+-------+----------+-------+----------------+-------------+-------+----------+
```


### 2.16 CONFIG\_NODES

> This system table is available starting from version V2.0.5.

* Contains information about all ConfigNodes in the cluster.
* The table structure is as follows:

| Column Name             | Data Type | Column Category | Description               |
| ------------------------- | ----------- | ----------------- | --------------------------- |
| node\_id                | INT32     | TAG             | Node ID                   |
| config\_consensus\_port | INT32     | ATTRIBUTE       | ConfigNode consensus port |
| role                    | STRING    | ATTRIBUTE       | ConfigNode role           |

* Only administrators are allowed to perform operations on this table.
* Query example:

```SQL
IoTDB> select * from information_schema.config_nodes 
+-------+---------------------+------+
|node_id|config_consensus_port|  role|
+-------+---------------------+------+
|      0|                10720|Leader|
+-------+---------------------+------+
```


### 2.17 DATA\_NODES

> This system table is available starting from version V2.0.5.

* Contains information about all DataNodes in the cluster.
* The table structure is as follows:

| Column Name             | Data Type | Column Category | Description                 |
| ------------------------- | ----------- | ----------------- | ----------------------------- |
| node\_id                | INT32     | TAG             | Node ID                     |
| data\_region\_num       | INT32     | ATTRIBUTE       | Number of DataRegions       |
| schema\_region\_num     | INT32     | ATTRIBUTE       | Number of SchemaRegions     |
| rpc\_address            | STRING    | ATTRIBUTE       | RPC address                 |
| rpc\_port               | INT32     | ATTRIBUTE       | RPC port                    |
| mpp\_port               | INT32     | ATTRIBUTE       | MPP communication port      |
| data\_consensus\_port   | INT32     | ATTRIBUTE       | DataRegion consensus port   |
| schema\_consensus\_port | INT32     | ATTRIBUTE       | SchemaRegion consensus port |

* Only administrators are allowed to perform operations on this table.
* Query example:

```SQL
IoTDB> select * from information_schema.data_nodes 
+-------+---------------+-----------------+-----------+--------+--------+-------------------+---------------------+
|node_id|data_region_num|schema_region_num|rpc_address|rpc_port|mpp_port|data_consensus_port|schema_consensus_port|
+-------+---------------+-----------------+-----------+--------+--------+-------------------+---------------------+
|      1|              4|                4|    0.0.0.0|    6667|   10740|              10760|                10750|
+-------+---------------+-----------------+-----------+--------+--------+-------------------+---------------------+
```

### 2.18 CONNECTIONS

> This system table is available starting from version V 2.0.8

* Contains all connections in the cluster.
* The table structure is as follows:

| **Column Name** | **Data Type** | **Column Type** | **Description**        |
|-----------------|---------------|-----------------|------------------------|
| datanode_id     | STRING        | TAG             | DataNode ID           |
| user_id         | STRING        | TAG             | User ID               |
| session_id      | STRING        | TAG             | Session ID            |
| user_name       | STRING        | ATTRIBUTE       | Username              |
| last_active_time| TIMESTAMP     | ATTRIBUTE       | Last active time      |
| client_ip       | STRING        | ATTRIBUTE       | Client IP address     |

* Query example:

```SQL
IoTDB> select * from information_schema.connections;
+-----------+-------+----------+---------+-----------------------------+---------+
|datanode_id|user_id|session_id|user_name|             last_active_time|client_ip|
+-----------+-------+----------+---------+-----------------------------+---------+
|          1|      0|         2|     root|2026-01-21T16:28:54.704+08:00|127.0.0.1|
+-----------+-------+----------+---------+-----------------------------+---------+
```

### 2.19 CURRENT_QUERIES

> This system table is available starting from version V 2.0.8

* Contains all queries whose execution end time falls within the range `[now() - query_cost_stat_window, now())`, including currently executing queries. The `query_cost_stat_window` parameter represents the query cost statistics window. Its default value is 0 and can be configured via the `iotdb-system.properties` configuration file.
* The table structure is as follows:

| Column Name  | Data Type | Column Type | Description                                                                 |
|--------------|-----------|-------------|-----------------------------------------------------------------------------|
| query_id     | STRING    | TAG         | Query statement ID                                                         |
| state        | STRING    | FIELD       | Query state: RUNNING indicates executing, FINISHED indicates completed     |
| start_time   | TIMESTAMP | FIELD       | Query start timestamp (precision matches system timestamp precision)       |
| end_time     | TIMESTAMP | FIELD       | Query end timestamp (precision matches system timestamp precision). NULL if query is not yet finished |
| datanode_id  | INT32     | FIELD       | DataNode from which the query was initiated                                |
| cost_time    | FLOAT     | FIELD       | Query execution time in seconds. If query is not finished, shows elapsed time |
| statement    | STRING    | FIELD       | Query SQL / concatenated query request SQL                                |
| user         | STRING    | FIELD       | User who initiated the query                                               |
| client_ip    | STRING    | FIELD       | Client IP address that initiated the query                                 |

* Regular users can only view their own queries; administrators can view all queries.
* Query example:

```SQL
IoTDB> select * from information_schema.current_queries;
+-----------------------+-------+-----------------------------+--------+-----------+---------+------------------------------------------------+----+---------+
|               query_id|  state|                   start_time|end_time|datanode_id|cost_time|                                       statement|user|client_ip|
+-----------------------+-------+-----------------------------+--------+-----------+---------+------------------------------------------------+----+---------+
|20260121_085427_00013_1|RUNNING|2026-01-21T16:54:27.019+08:00|    null|          1|      0.0|select * from information_schema.current_queries|root|127.0.0.1|
+-----------------------+-------+-----------------------------+--------+-----------+---------+------------------------------------------------+----+---------+
```

### 2.20 QUERIES_COSTS_HISTOGRAM

> This system table is available starting from version V 2.0.8

* Contains a histogram of query execution times within the past `query_cost_stat_window` period (only statistics for completed SQL queries). The `query_cost_stat_window` parameter represents the query cost statistics window. Its default value is 0 and can be configured via the `iotdb-system.properties` configuration file.
* The table structure is as follows:

| Column Name  | Data Type | Column Type | Description                                                                 |
|--------------|-----------|-------------|-----------------------------------------------------------------------------|
| bin          | STRING    | TAG         | Bucket name: 61 buckets total - [0, 1), [1, 2), [2, 3), ..., [59, 60), 60+ |
| nums         | INT32     | FIELD       | Number of SQL queries in the bucket                                        |
| datanode_id  | INT32     | FIELD       | DataNode to which this bucket belongs                                      |

* Only administrators can execute operations on this table.
* Query example:

```SQL
IoTDB> select * from information_schema.queries_costs_histogram limit 10
+------+----+-----------+
|   bin|nums|datanode_id|
+------+----+-----------+
| [0,1)|   0|          1|
| [1,2)|   0|          1|
| [2,3)|   0|          1|
| [3,4)|   0|          1|
| [4,5)|   0|          1|
| [5,6)|   0|          1|
| [6,7)|   0|          1|
| [7,8)|   0|          1|
| [8,9)|   0|          1|
|[9,10)|   0|          1|
+------+----+-----------+
```

### 2.21 SERVICES

> This system table is available starting from version V 2.0.8

* Displays services (MQTT service, REST service) on all active DataNodes (with RUNNING or READ-ONLY status).
* Table structure:

| Column Name   | Data Type | Column Type | Description                     |
|---------------|-----------|-------------|---------------------------------|
| service_name  | STRING    | TAG         | Service Name                    |
| datanode_id   | INT32     | ATTRIBUTE   | DataNode ID where service runs  |
| state         | STRING    | ATTRIBUTE   | Service status: RUNNING/STOPPED |


* Query example:

```sql
IoTDB> SELECT * FROM information_schema.services
+------------+-----------+---------+
|service_name|datanode_id|state    |
+------------+-----------+---------+
|MQTT        |1          |STOPPED  |
|REST        |1          |RUNNING  |
+------------+-----------+---------+
```

### 2.22 TABLE_DISK_USAGE
> This system table is available since version V2.0.9-beta

Used to display the disk space usage of specified tables (excluding views), including the size of ChunkGroups and the size of Metadata.

Note: Statistics are based on the actual size of data in TsFiles; therefore, deletions made via mods are not considered.

The table structure is shown below:

| Column Name     | Data Type | Column Type | Description                      |
|-----------------|-----------|-------------|----------------------------------|
| database        | string    | Field       | Database name                    |
| table_name      | string    | Field       | Table name                       |
| datanode_id     | int32     | Field       | DataNode node ID                 |
| region_id       | int32     | Field       | Region ID                        |
| time_partition  | int64     | Field       | Time partition ID                |
| size_in_bytes   | int64     | Field       | Disk space occupied (in bytes)    |

**Query Examples**:

```SQL
-- Query all data;
select * from information_schema.table_disk_usage;
```

```Bash
+---------+-------------------+-----------+---------+--------------+-------------+
| database|         table_name|datanode_id|region_id|time_partition|size_in_bytes|
+---------+-------------------+-----------+---------+--------------+-------------+
|database1|             table1|          1|        3|          2864|          867|
|database1|            table11|          1|        3|          2864|            0|
|database1|             table3|          1|        3|          2864|            0|
|database1|             table1|          1|        3|          2865|         1411|
|database1|            table11|          1|        3|          2865|            0|
|database1|             table3|          1|        3|          2865|            0|
|database1|             table1|          1|        3|          2925|          590|
|database1|            table11|          1|        3|          2925|            0|
|database1|             table3|          1|        3|          2925|            0|
|database1|             table1|          1|        4|          2864|          883|
|database1|            table11|          1|        4|          2864|            0|
|database1|             table3|          1|        4|          2864|            0|
|database1|             table1|          1|        4|          2865|         1224|
|database1|            table11|          1|        4|          2865|            0|
|database1|             table3|          1|        4|          2865|            0|
|database1|             table1|          1|        4|          2888|            0|
|database1|            table11|          1|        4|          2888|            0|
|database1|             table3|          1|        4|          2888|          205|
|     etth|   tab_cov_forecast|          1|        8|             0|            0|
|     etth|           tab_real|          1|        8|             0|          963|
|     etth|tab_target_forecast|          1|        8|             0|            0|
|     etth|   tab_cov_forecast|          1|        9|             0|          448|
|     etth|           tab_real|          1|        9|             0|            0|
|     etth|tab_target_forecast|          1|        9|             0|            0|
+---------+-------------------+-----------+---------+--------------+-------------+
```

```SQL
-- Specify query conditions;
select * from information_schema.table_disk_usage where region_id = 4 and table_name like '%1';
```

```Bash
+---------+----------+-----------+---------+--------------+-------------+
| database|table_name|datanode_id|region_id|time_partition|size_in_bytes|
+---------+----------+-----------+---------+--------------+-------------+
|database1|    table1|          1|        4|          2864|          883|
|database1|   table11|          1|        4|          2864|            0|
|database1|    table1|          1|        4|          2865|         1224|
|database1|   table11|          1|        4|          2865|            0|
|database1|    table1|          1|        4|          2888|            0|
|database1|   table11|          1|        4|          2888|            0|
+---------+----------+-----------+---------+--------------+-------------+
```


## 3. Permission Description

* GRANT/REVOKE operations are not supported for the `information_schema` database or any of its tables.
* All users can view `information_schema` database details via the `SHOW DATABASES` statement.
* All users can list system tables via `SHOW TABLES FROM information_schema`.
* All users can inspect system table structures using the `DESC` statement.
