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

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new 258dcfca975 [Refactor](executor)Add information_schema.workload_groups 
(#32195) (#32314)
258dcfca975 is described below

commit 258dcfca975551e44ca4e032299faab2775665ad
Author: wangbo <[email protected]>
AuthorDate: Fri Mar 15 20:46:54 2024 +0800

    [Refactor](executor)Add information_schema.workload_groups (#32195) (#32314)
---
 be/src/exec/schema_scanner.cpp                     |  3 +
 .../schema_active_queries_scanner.cpp              | 17 ++--
 ...nner.cpp => schema_workload_groups_scanner.cpp} | 91 ++++++++++----------
 .../schema_workload_groups_scanner.h               | 52 ++++++++++++
 be/src/vec/exec/scan/vmeta_scanner.cpp             | 42 ---------
 .../org/apache/doris/analysis/SchemaTableType.java |  3 +-
 .../doris/catalog/BuiltinTableValuedFunctions.java |  4 +-
 .../java/org/apache/doris/catalog/SchemaTable.java | 14 +++
 .../functions/table/WorkloadGroups.java            | 56 ------------
 .../visitor/TableValuedFunctionVisitor.java        |  5 --
 .../apache/doris/service/FrontendServiceImpl.java  | 18 ++--
 .../ActiveQueriesTableValuedFunction.java          | 91 --------------------
 .../doris/tablefunction/MetadataGenerator.java     | 88 +++++++++++--------
 .../tablefunction/MetadataTableValuedFunction.java |  2 -
 .../doris/tablefunction/TableValuedFunctionIf.java |  2 -
 .../WorkloadGroupsTableValuedFunction.java         | 99 ----------------------
 .../doris/datasource/RefreshCatalogTest.java       |  4 +-
 gensrc/thrift/Descriptors.thrift                   |  3 +-
 gensrc/thrift/FrontendService.thrift               | 12 ++-
 gensrc/thrift/Types.thrift                         |  2 -
 .../jdbc/test_mariadb_jdbc_catalog.out             |  1 +
 .../jdbc/test_mysql_jdbc_catalog.out               |  1 +
 .../jdbc/test_mysql_jdbc_catalog_nereids.out       |  1 +
 .../jdbc/test_mysql_jdbc_driver5_catalog.out       |  1 +
 .../workload_manager_p0/test_curd_wlg.groovy       | 12 +--
 25 files changed, 210 insertions(+), 414 deletions(-)

diff --git a/be/src/exec/schema_scanner.cpp b/be/src/exec/schema_scanner.cpp
index 4f4273412c1..375252501ed 100644
--- a/be/src/exec/schema_scanner.cpp
+++ b/be/src/exec/schema_scanner.cpp
@@ -44,6 +44,7 @@
 #include "exec/schema_scanner/schema_user_privileges_scanner.h"
 #include "exec/schema_scanner/schema_variables_scanner.h"
 #include "exec/schema_scanner/schema_views_scanner.h"
+#include "exec/schema_scanner/schema_workload_groups_scanner.h"
 #include "olap/hll.h"
 #include "runtime/define_primitive_type.h"
 #include "util/string_util.h"
@@ -155,6 +156,8 @@ std::unique_ptr<SchemaScanner> 
SchemaScanner::create(TSchemaTableType::type type
         return SchemaBackendActiveTasksScanner::create_unique();
     case TSchemaTableType::SCH_ACTIVE_QUERIES:
         return SchemaActiveQueriesScanner::create_unique();
+    case TSchemaTableType::SCH_WORKLOAD_GROUPS:
+        return SchemaWorkloadGroupsScanner::create_unique();
     default:
         return SchemaDummyScanner::create_unique();
         break;
diff --git a/be/src/exec/schema_scanner/schema_active_queries_scanner.cpp 
b/be/src/exec/schema_scanner/schema_active_queries_scanner.cpp
index 02dcd4d4a3c..f16326dc8f5 100644
--- a/be/src/exec/schema_scanner/schema_active_queries_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_active_queries_scanner.cpp
@@ -50,20 +50,17 @@ Status SchemaActiveQueriesScanner::start(RuntimeState* 
state) {
 Status SchemaActiveQueriesScanner::_get_active_queries_block_from_fe() {
     TNetworkAddress master_addr = 
ExecEnv::GetInstance()->master_info()->network_address;
 
-    TQueriesMetadataParams tqueries_meta_params;
-    tqueries_meta_params.__set_relay_to_other_fe(true);
-
-    TMetadataTableRequestParams metadata_table_params;
-    metadata_table_params.__set_metadata_type(TMetadataType::QUERIES);
-    metadata_table_params.__set_queries_metadata_params(tqueries_meta_params);
+    TSchemaTableRequestParams schema_table_params;
     for (int i = 0; i < _s_tbls_columns.size(); i++) {
-        metadata_table_params.__isset.columns_name = true;
-        
metadata_table_params.columns_name.emplace_back(_s_tbls_columns[i].name);
+        schema_table_params.__isset.columns_name = true;
+        schema_table_params.columns_name.emplace_back(_s_tbls_columns[i].name);
     }
+    schema_table_params.replay_to_other_fe = true;
+    schema_table_params.__isset.replay_to_other_fe = true;
 
     TFetchSchemaTableDataRequest request;
-    request.__set_schema_table_name(TSchemaTableName::SCHEMA_TABLE);
-    request.__set_metada_table_params(metadata_table_params);
+    request.__set_schema_table_name(TSchemaTableName::ACTIVE_QUERIES);
+    request.__set_schema_table_params(schema_table_params);
 
     TFetchSchemaTableDataResult result;
 
diff --git a/be/src/exec/schema_scanner/schema_active_queries_scanner.cpp 
b/be/src/exec/schema_scanner/schema_workload_groups_scanner.cpp
similarity index 60%
copy from be/src/exec/schema_scanner/schema_active_queries_scanner.cpp
copy to be/src/exec/schema_scanner/schema_workload_groups_scanner.cpp
index 02dcd4d4a3c..b3fb9adcbeb 100644
--- a/be/src/exec/schema_scanner/schema_active_queries_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_workload_groups_scanner.cpp
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-#include "exec/schema_scanner/schema_active_queries_scanner.h"
+#include "exec/schema_scanner/schema_workload_groups_scanner.h"
 
 #include "runtime/client_cache.h"
 #include "runtime/exec_env.h"
@@ -26,44 +26,44 @@
 #include "vec/data_types/data_type_factory.hpp"
 
 namespace doris {
-std::vector<SchemaScanner::ColumnDesc> 
SchemaActiveQueriesScanner::_s_tbls_columns = {
-        //   name,       type,          size
-        {"QUERY_ID", TYPE_VARCHAR, sizeof(StringRef), true},
-        {"START_TIME", TYPE_VARCHAR, sizeof(StringRef), true},
-        {"QUERY_TIME_MS", TYPE_BIGINT, sizeof(int64_t), true},
-        {"WORKLOAD_GROUP_ID", TYPE_BIGINT, sizeof(int64_t), true},
-        {"DATABASE", TYPE_VARCHAR, sizeof(StringRef), true},
-        {"FRONTEND_INSTANCE", TYPE_VARCHAR, sizeof(StringRef), true},
-        {"SQL", TYPE_STRING, sizeof(StringRef), true}};
-
-SchemaActiveQueriesScanner::SchemaActiveQueriesScanner()
-        : SchemaScanner(_s_tbls_columns, TSchemaTableType::SCH_ACTIVE_QUERIES) 
{}
-
-SchemaActiveQueriesScanner::~SchemaActiveQueriesScanner() {}
-
-Status SchemaActiveQueriesScanner::start(RuntimeState* state) {
+std::vector<SchemaScanner::ColumnDesc> 
SchemaWorkloadGroupsScanner::_s_tbls_columns = {
+        {"ID", TYPE_BIGINT, sizeof(int64_t), true},
+        {"NAME", TYPE_VARCHAR, sizeof(StringRef), true},
+        {"CPU_SHARE", TYPE_BIGINT, sizeof(int64_t), true},
+        {"MEMORY_LIMIT", TYPE_VARCHAR, sizeof(StringRef), true},
+        {"ENABLE_MEMORY_OVERCOMMIT", TYPE_VARCHAR, sizeof(StringRef), true},
+        {"MAX_CONCURRENCY", TYPE_BIGINT, sizeof(int64_t), true},
+        {"MAX_QUEUE_SIZE", TYPE_BIGINT, sizeof(int64_t), true},
+        {"QUEUE_TIMEOUT", TYPE_BIGINT, sizeof(int64_t), true},
+        {"CPU_HARD_LIMIT", TYPE_STRING, sizeof(StringRef), true},
+        {"SCAN_THREAD_NUM", TYPE_BIGINT, sizeof(int64_t), true},
+        {"MAX_REMOTE_SCAN_THREAD_NUM", TYPE_BIGINT, sizeof(int64_t), true},
+        {"MIN_REMOTE_SCAN_THREAD_NUM", TYPE_BIGINT, sizeof(int64_t), true}};
+
+SchemaWorkloadGroupsScanner::SchemaWorkloadGroupsScanner()
+        : SchemaScanner(_s_tbls_columns, 
TSchemaTableType::SCH_WORKLOAD_GROUPS) {}
+
+SchemaWorkloadGroupsScanner::~SchemaWorkloadGroupsScanner() {}
+
+Status SchemaWorkloadGroupsScanner::start(RuntimeState* state) {
     _block_rows_limit = state->batch_size();
     _rpc_timeout = state->execution_timeout() * 1000;
     return Status::OK();
 }
 
-Status SchemaActiveQueriesScanner::_get_active_queries_block_from_fe() {
+Status SchemaWorkloadGroupsScanner::_get_workload_groups_block_from_fe() {
     TNetworkAddress master_addr = 
ExecEnv::GetInstance()->master_info()->network_address;
 
-    TQueriesMetadataParams tqueries_meta_params;
-    tqueries_meta_params.__set_relay_to_other_fe(true);
-
-    TMetadataTableRequestParams metadata_table_params;
-    metadata_table_params.__set_metadata_type(TMetadataType::QUERIES);
-    metadata_table_params.__set_queries_metadata_params(tqueries_meta_params);
+    TSchemaTableRequestParams schema_table_request_params;
     for (int i = 0; i < _s_tbls_columns.size(); i++) {
-        metadata_table_params.__isset.columns_name = true;
-        
metadata_table_params.columns_name.emplace_back(_s_tbls_columns[i].name);
+        schema_table_request_params.__isset.columns_name = true;
+        
schema_table_request_params.columns_name.emplace_back(_s_tbls_columns[i].name);
     }
+    
schema_table_request_params.__set_current_user_ident(*_param->common_param->current_user_ident);
 
     TFetchSchemaTableDataRequest request;
-    request.__set_schema_table_name(TSchemaTableName::SCHEMA_TABLE);
-    request.__set_metada_table_params(metadata_table_params);
+    request.__set_schema_table_name(TSchemaTableName::WORKLOAD_GROUPS);
+    request.__set_schema_table_params(schema_table_request_params);
 
     TFetchSchemaTableDataResult result;
 
@@ -76,25 +76,26 @@ Status 
SchemaActiveQueriesScanner::_get_active_queries_block_from_fe() {
 
     Status status(Status::create(result.status));
     if (!status.ok()) {
-        LOG(WARNING) << "fetch active queries from FE failed, errmsg=" << 
status;
+        LOG(WARNING) << "fetch workload groups from FE failed, errmsg=" << 
status;
         return status;
     }
     std::vector<TRow> result_data = result.data_batch;
 
-    _active_query_block = vectorized::Block::create_unique();
+    _workload_groups_block = vectorized::Block::create_unique();
     for (int i = 0; i < _s_tbls_columns.size(); ++i) {
         TypeDescriptor descriptor(_s_tbls_columns[i].type);
         auto data_type = 
vectorized::DataTypeFactory::instance().create_data_type(descriptor, true);
-        _active_query_block->insert(vectorized::ColumnWithTypeAndName(
+        _workload_groups_block->insert(vectorized::ColumnWithTypeAndName(
                 data_type->create_column(), data_type, 
_s_tbls_columns[i].name));
     }
 
-    _active_query_block->reserve(_block_rows_limit);
+    _workload_groups_block->reserve(_block_rows_limit);
 
     if (result_data.size() > 0) {
         int col_size = result_data[0].column_value.size();
         if (col_size != _s_tbls_columns.size()) {
-            return Status::InternalError<false>("active queries schema is not 
match for FE and BE");
+            return Status::InternalError<false>(
+                    "workload groups schema is not match for FE and BE");
         }
     }
 
@@ -123,18 +124,18 @@ Status 
SchemaActiveQueriesScanner::_get_active_queries_block_from_fe() {
     for (int i = 0; i < result_data.size(); i++) {
         TRow row = result_data[i];
 
-        insert_string_value(0, row.column_value[0].stringVal, 
_active_query_block.get());
-        insert_string_value(1, row.column_value[1].stringVal, 
_active_query_block.get());
-        insert_int_value(2, row.column_value[2].longVal, 
_active_query_block.get());
-        insert_int_value(3, row.column_value[3].longVal, 
_active_query_block.get());
-        insert_string_value(4, row.column_value[4].stringVal, 
_active_query_block.get());
-        insert_string_value(5, row.column_value[5].stringVal, 
_active_query_block.get());
-        insert_string_value(6, row.column_value[6].stringVal, 
_active_query_block.get());
+        for (int j = 0; j < _s_tbls_columns.size(); j++) {
+            if (_s_tbls_columns[j].type == TYPE_BIGINT) {
+                insert_int_value(j, row.column_value[j].longVal, 
_workload_groups_block.get());
+            } else {
+                insert_string_value(j, row.column_value[j].stringVal, 
_workload_groups_block.get());
+            }
+        }
     }
     return Status::OK();
 }
 
-Status SchemaActiveQueriesScanner::get_next_block(vectorized::Block* block, 
bool* eos) {
+Status SchemaWorkloadGroupsScanner::get_next_block(vectorized::Block* block, 
bool* eos) {
     if (!_is_init) {
         return Status::InternalError("Used before initialized.");
     }
@@ -143,9 +144,9 @@ Status 
SchemaActiveQueriesScanner::get_next_block(vectorized::Block* block, bool
         return Status::InternalError("input pointer is nullptr.");
     }
 
-    if (_active_query_block == nullptr) {
-        RETURN_IF_ERROR(_get_active_queries_block_from_fe());
-        _total_rows = _active_query_block->rows();
+    if (_workload_groups_block == nullptr) {
+        RETURN_IF_ERROR(_get_workload_groups_block_from_fe());
+        _total_rows = _workload_groups_block->rows();
     }
 
     if (_row_idx == _total_rows) {
@@ -155,7 +156,7 @@ Status 
SchemaActiveQueriesScanner::get_next_block(vectorized::Block* block, bool
 
     int current_batch_rows = std::min(_block_rows_limit, _total_rows - 
_row_idx);
     vectorized::MutableBlock mblock = 
vectorized::MutableBlock::build_mutable_block(block);
-    mblock.add_rows(_active_query_block.get(), _row_idx, current_batch_rows);
+    mblock.add_rows(_workload_groups_block.get(), _row_idx, 
current_batch_rows);
     _row_idx += current_batch_rows;
 
     *eos = _row_idx == _total_rows;
diff --git a/be/src/exec/schema_scanner/schema_workload_groups_scanner.h 
b/be/src/exec/schema_scanner/schema_workload_groups_scanner.h
new file mode 100644
index 00000000000..bf7a103526d
--- /dev/null
+++ b/be/src/exec/schema_scanner/schema_workload_groups_scanner.h
@@ -0,0 +1,52 @@
+// 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.
+
+#pragma once
+
+#include <vector>
+
+#include "common/status.h"
+#include "exec/schema_scanner.h"
+
+namespace doris {
+class RuntimeState;
+namespace vectorized {
+class Block;
+} // namespace vectorized
+
+class SchemaWorkloadGroupsScanner : public SchemaScanner {
+    ENABLE_FACTORY_CREATOR(SchemaWorkloadGroupsScanner);
+
+public:
+    SchemaWorkloadGroupsScanner();
+    ~SchemaWorkloadGroupsScanner() override;
+
+    Status start(RuntimeState* state) override;
+    Status get_next_block(vectorized::Block* block, bool* eos) override;
+
+    static std::vector<SchemaScanner::ColumnDesc> _s_tbls_columns;
+
+private:
+    Status _get_workload_groups_block_from_fe();
+
+    int _block_rows_limit = 4096;
+    int _row_idx = 0;
+    int _total_rows = 0;
+    std::unique_ptr<vectorized::Block> _workload_groups_block = nullptr;
+    int _rpc_timeout = 3000;
+};
+}; // namespace doris
\ No newline at end of file
diff --git a/be/src/vec/exec/scan/vmeta_scanner.cpp 
b/be/src/vec/exec/scan/vmeta_scanner.cpp
index 22545fa4dce..e31846c21be 100644
--- a/be/src/vec/exec/scan/vmeta_scanner.cpp
+++ b/be/src/vec/exec/scan/vmeta_scanner.cpp
@@ -235,9 +235,6 @@ Status VMetaScanner::_fetch_metadata(const TMetaScanRange& 
meta_scan_range) {
     case TMetadataType::FRONTENDS_DISKS:
         
RETURN_IF_ERROR(_build_frontends_disks_metadata_request(meta_scan_range, 
&request));
         break;
-    case TMetadataType::WORKLOAD_GROUPS:
-        
RETURN_IF_ERROR(_build_workload_groups_metadata_request(meta_scan_range, 
&request));
-        break;
     case TMetadataType::WORKLOAD_SCHED_POLICY:
         
RETURN_IF_ERROR(_build_workload_sched_policy_metadata_request(meta_scan_range, 
&request));
         break;
@@ -253,9 +250,6 @@ Status VMetaScanner::_fetch_metadata(const TMetaScanRange& 
meta_scan_range) {
     case TMetadataType::TASKS:
         RETURN_IF_ERROR(_build_tasks_metadata_request(meta_scan_range, 
&request));
         break;
-    case TMetadataType::QUERIES:
-        RETURN_IF_ERROR(_build_queries_metadata_request(meta_scan_range, 
&request));
-        break;
     default:
         _meta_eos = true;
         return Status::OK();
@@ -365,23 +359,6 @@ Status 
VMetaScanner::_build_frontends_disks_metadata_request(
     return Status::OK();
 }
 
-Status VMetaScanner::_build_workload_groups_metadata_request(
-        const TMetaScanRange& meta_scan_range, TFetchSchemaTableDataRequest* 
request) {
-    VLOG_CRITICAL << "VMetaScanner::_build_workload_groups_metadata_request";
-
-    // create request
-    request->__set_cluster_name("");
-    request->__set_schema_table_name(TSchemaTableName::METADATA_TABLE);
-
-    // create TMetadataTableRequestParams
-    TMetadataTableRequestParams metadata_table_params;
-    metadata_table_params.__set_metadata_type(TMetadataType::WORKLOAD_GROUPS);
-    metadata_table_params.__set_current_user_ident(_user_identity);
-
-    request->__set_metada_table_params(metadata_table_params);
-    return Status::OK();
-}
-
 Status VMetaScanner::_build_workload_sched_policy_metadata_request(
         const TMetaScanRange& meta_scan_range, TFetchSchemaTableDataRequest* 
request) {
     VLOG_CRITICAL << 
"VMetaScanner::_build_workload_sched_policy_metadata_request";
@@ -473,25 +450,6 @@ Status VMetaScanner::_build_tasks_metadata_request(const 
TMetaScanRange& meta_sc
     return Status::OK();
 }
 
-Status VMetaScanner::_build_queries_metadata_request(const TMetaScanRange& 
meta_scan_range,
-                                                     
TFetchSchemaTableDataRequest* request) {
-    VLOG_CRITICAL << "VMetaScanner::_build_queries_metadata_request";
-    if (!meta_scan_range.__isset.queries_params) {
-        return Status::InternalError("Can not find TQueriesMetadataParams from 
meta_scan_range.");
-    }
-    // create request
-    request->__set_cluster_name("");
-    request->__set_schema_table_name(TSchemaTableName::METADATA_TABLE);
-
-    // create TMetadataTableRequestParams
-    TMetadataTableRequestParams metadata_table_params;
-    metadata_table_params.__set_metadata_type(TMetadataType::QUERIES);
-    
metadata_table_params.__set_queries_metadata_params(meta_scan_range.queries_params);
-
-    request->__set_metada_table_params(metadata_table_params);
-    return Status::OK();
-}
-
 Status VMetaScanner::close(RuntimeState* state) {
     VLOG_CRITICAL << "VMetaScanner::close";
     RETURN_IF_ERROR(VScanner::close(state));
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/SchemaTableType.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/SchemaTableType.java
index f3965a2f865..bb1aa5e7952 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SchemaTableType.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SchemaTableType.java
@@ -71,7 +71,8 @@ public enum SchemaTableType {
     SCH_METADATA_NAME_IDS("METADATA_NAME_IDS", "METADATA_NAME_IDS", 
TSchemaTableType.SCH_METADATA_NAME_IDS),
     SCH_PROFILING("PROFILING", "PROFILING", TSchemaTableType.SCH_PROFILING),
     SCH_BACKEND_ACTIVE_TASKS("BACKEND_ACTIVE_TASKS", "BACKEND_ACTIVE_TASKS", 
TSchemaTableType.SCH_BACKEND_ACTIVE_TASKS),
-    SCH_ACTIVE_QUERIES("ACTIVE_QUERIES", "ACTIVE_QUERIES", 
TSchemaTableType.SCH_ACTIVE_QUERIES);
+    SCH_ACTIVE_QUERIES("ACTIVE_QUERIES", "ACTIVE_QUERIES", 
TSchemaTableType.SCH_ACTIVE_QUERIES),
+    SCH_WORKLOAD_GROUPS("WORKLOAD_GROUPS", "WORKLOAD_GROUPS", 
TSchemaTableType.SCH_WORKLOAD_GROUPS);
     private static final String dbName = "INFORMATION_SCHEMA";
     private static SelectList fullSelectLists;
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinTableValuedFunctions.java
 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinTableValuedFunctions.java
index 049e1b301e5..9986ce71885 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinTableValuedFunctions.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinTableValuedFunctions.java
@@ -31,7 +31,6 @@ import 
org.apache.doris.nereids.trees.expressions.functions.table.MvInfos;
 import org.apache.doris.nereids.trees.expressions.functions.table.Numbers;
 import org.apache.doris.nereids.trees.expressions.functions.table.S3;
 import org.apache.doris.nereids.trees.expressions.functions.table.Tasks;
-import 
org.apache.doris.nereids.trees.expressions.functions.table.WorkloadGroups;
 
 import com.google.common.collect.ImmutableList;
 
@@ -56,8 +55,7 @@ public class BuiltinTableValuedFunctions implements 
FunctionHelper {
             tableValued(S3.class, "s3"),
             tableValued(MvInfos.class, "mv_infos"),
             tableValued(Jobs.class, "jobs"),
-            tableValued(Tasks.class, "tasks"),
-            tableValued(WorkloadGroups.class, "workload_groups")
+            tableValued(Tasks.class, "tasks")
     );
 
     public static final BuiltinTableValuedFunctions INSTANCE = new 
BuiltinTableValuedFunctions();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/SchemaTable.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/SchemaTable.java
index 2ce7f5bb794..736df74f1e6 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/SchemaTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/SchemaTable.java
@@ -467,6 +467,20 @@ public class SchemaTable extends Table {
                             .column("FRONTEND_INSTANCE", 
ScalarType.createVarchar(256))
                             .column("SQL", ScalarType.createStringType())
                             .build()))
+            .put("workload_groups", new 
SchemaTable(SystemIdGenerator.getNextId(), "workload_groups", TableType.SCHEMA,
+                    builder().column("ID", 
ScalarType.createType(PrimitiveType.BIGINT))
+                            .column("NAME", ScalarType.createVarchar(256))
+                            .column("CPU_SHARE", 
ScalarType.createType(PrimitiveType.BIGINT))
+                            .column("MEMORY_LIMIT", 
ScalarType.createVarchar(256))
+                            .column("ENABLE_MEMORY_OVERCOMMIT", 
ScalarType.createVarchar(256))
+                            .column("MAX_CONCURRENCY", 
ScalarType.createType(PrimitiveType.BIGINT))
+                            .column("MAX_QUEUE_SIZE", 
ScalarType.createType(PrimitiveType.BIGINT))
+                            .column("QUEUE_TIMEOUT", 
ScalarType.createType(PrimitiveType.BIGINT))
+                            .column("CPU_HARD_LIMIT", 
ScalarType.createStringType())
+                            .column("SCAN_THREAD_NUM", 
ScalarType.createType(PrimitiveType.BIGINT))
+                            .column("MAX_REMOTE_SCAN_THREAD_NUM", 
ScalarType.createType(PrimitiveType.BIGINT))
+                            .column("MIN_REMOTE_SCAN_THREAD_NUM", 
ScalarType.createType(PrimitiveType.BIGINT))
+                            .build()))
             .build();
 
     protected SchemaTable(long id, String name, TableType type, List<Column> 
baseSchema) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/WorkloadGroups.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/WorkloadGroups.java
deleted file mode 100644
index 84aa4de697f..00000000000
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/WorkloadGroups.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// 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.
-
-package org.apache.doris.nereids.trees.expressions.functions.table;
-
-import org.apache.doris.catalog.FunctionSignature;
-import org.apache.doris.nereids.exceptions.AnalysisException;
-import org.apache.doris.nereids.trees.expressions.Properties;
-import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
-import org.apache.doris.nereids.types.coercion.AnyDataType;
-import org.apache.doris.tablefunction.TableValuedFunctionIf;
-import org.apache.doris.tablefunction.WorkloadGroupsTableValuedFunction;
-
-import java.util.Map;
-
-/** workload_groups */
-public class WorkloadGroups extends TableValuedFunction {
-    public WorkloadGroups(Properties properties) {
-        super("workload_groups", properties);
-    }
-
-    @Override
-    public FunctionSignature customSignature() {
-        return FunctionSignature.of(AnyDataType.INSTANCE_WITHOUT_INDEX, 
getArgumentsTypes());
-    }
-
-    @Override
-    protected TableValuedFunctionIf toCatalogFunction() {
-        try {
-            Map<String, String> arguments = getTVFProperties().getMap();
-            return new WorkloadGroupsTableValuedFunction(arguments);
-        } catch (Throwable t) {
-            throw new AnalysisException("Can not build 
WorkloadGroupsTableValuedFunction by "
-                + this + ": " + t.getMessage(), t);
-        }
-    }
-
-    @Override
-    public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
-        return visitor.visitWorkloadGroups(this, context);
-    }
-}
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/TableValuedFunctionVisitor.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/TableValuedFunctionVisitor.java
index 36e8ac365f7..d0c76d143a2 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/TableValuedFunctionVisitor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/TableValuedFunctionVisitor.java
@@ -32,7 +32,6 @@ import 
org.apache.doris.nereids.trees.expressions.functions.table.Numbers;
 import org.apache.doris.nereids.trees.expressions.functions.table.S3;
 import 
org.apache.doris.nereids.trees.expressions.functions.table.TableValuedFunction;
 import org.apache.doris.nereids.trees.expressions.functions.table.Tasks;
-import 
org.apache.doris.nereids.trees.expressions.functions.table.WorkloadGroups;
 
 /** TableValuedFunctionVisitor */
 public interface TableValuedFunctionVisitor<R, C> {
@@ -93,8 +92,4 @@ public interface TableValuedFunctionVisitor<R, C> {
     default R visitS3(S3 s3, C context) {
         return visitTableValuedFunction(s3, context);
     }
-
-    default R visitWorkloadGroups(WorkloadGroups workloadGroups, C context) {
-        return visitTableValuedFunction(workloadGroups, context);
-    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java 
b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
index f4b4b74f936..a332f6f5031 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
@@ -209,6 +209,7 @@ import org.apache.doris.thrift.TRestoreSnapshotRequest;
 import org.apache.doris.thrift.TRestoreSnapshotResult;
 import org.apache.doris.thrift.TRollbackTxnRequest;
 import org.apache.doris.thrift.TRollbackTxnResult;
+import org.apache.doris.thrift.TSchemaTableName;
 import org.apache.doris.thrift.TShowProcessListRequest;
 import org.apache.doris.thrift.TShowProcessListResult;
 import org.apache.doris.thrift.TShowVariableRequest;
@@ -2289,15 +2290,16 @@ public class FrontendServiceImpl implements 
FrontendService.Iface {
 
     @Override
     public TFetchSchemaTableDataResult 
fetchSchemaTableData(TFetchSchemaTableDataRequest request) throws TException {
-        switch (request.getSchemaTableName()) {
-            case METADATA_TABLE:
-                return MetadataGenerator.getMetadataTable(request);
-            case SCHEMA_TABLE:
-                return MetadataGenerator.getSchemaTableData(request);
-            default:
-                break;
+        if (!request.isSetSchemaTableName()) {
+            return MetadataGenerator.errorResult("Fetch schema table name is 
not set");
+        }
+        // tvf queries
+        if (request.getSchemaTableName() == TSchemaTableName.METADATA_TABLE) {
+            return MetadataGenerator.getMetadataTable(request);
+        } else {
+            // database information_schema's tables
+            return MetadataGenerator.getSchemaTableData(request);
         }
-        return MetadataGenerator.errorResult("Fetch schema table name is not 
set");
     }
 
     private TNetworkAddress getClientAddr() {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ActiveQueriesTableValuedFunction.java
 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ActiveQueriesTableValuedFunction.java
deleted file mode 100644
index ebc0ffa1121..00000000000
--- 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ActiveQueriesTableValuedFunction.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// 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.
-
-package org.apache.doris.tablefunction;
-
-import org.apache.doris.catalog.Column;
-import org.apache.doris.catalog.PrimitiveType;
-import org.apache.doris.catalog.ScalarType;
-import org.apache.doris.common.AnalysisException;
-import org.apache.doris.thrift.TMetaScanRange;
-import org.apache.doris.thrift.TMetadataType;
-import org.apache.doris.thrift.TQueriesMetadataParams;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-
-import java.util.List;
-import java.util.Map;
-
-public class ActiveQueriesTableValuedFunction extends 
MetadataTableValuedFunction {
-    public static final String NAME = "active_queries";
-
-    private static final ImmutableList<Column> SCHEMA = ImmutableList.of(
-            new Column("QueryId", ScalarType.createStringType()),
-            new Column("StartTime", ScalarType.createStringType()),
-            new Column("QueryTimeMs", PrimitiveType.BIGINT),
-            new Column("WorkloadGroupId", PrimitiveType.BIGINT),
-            new Column("Database", ScalarType.createStringType()),
-            new Column("FrontendInstance", ScalarType.createStringType()),
-            new Column("Sql", ScalarType.createStringType()));
-
-    private static final ImmutableMap<String, Integer> COLUMN_TO_INDEX;
-
-    static {
-        ImmutableMap.Builder<String, Integer> builder = new 
ImmutableMap.Builder();
-        for (int i = 0; i < SCHEMA.size(); i++) {
-            builder.put(SCHEMA.get(i).getName().toLowerCase(), i);
-        }
-        COLUMN_TO_INDEX = builder.build();
-    }
-
-    public static Integer getColumnIndexFromColumnName(String columnName) {
-        return COLUMN_TO_INDEX.get(columnName.toLowerCase());
-    }
-
-    public ActiveQueriesTableValuedFunction(Map<String, String> params) throws 
AnalysisException {
-        if (params.size() != 0) {
-            throw new AnalysisException("ActiveQueries table-valued-function 
does not support any params");
-        }
-    }
-
-    @Override
-    public TMetadataType getMetadataType() {
-        return TMetadataType.QUERIES;
-    }
-
-    @Override
-    public TMetaScanRange getMetaScanRange() {
-        TMetaScanRange metaScanRange = new TMetaScanRange();
-        metaScanRange.setMetadataType(TMetadataType.QUERIES);
-        TQueriesMetadataParams queriesMetadataParams = new 
TQueriesMetadataParams();
-        queriesMetadataParams.setClusterName("");
-        queriesMetadataParams.setRelayToOtherFe(true);
-        metaScanRange.setQueriesParams(queriesMetadataParams);
-        return metaScanRange;
-    }
-
-    @Override
-    public String getTableName() {
-        return "ActiveQueriesTableValuedFunction";
-    }
-
-    @Override
-    public List<Column> getTableColumns() throws AnalysisException {
-        return SCHEMA;
-    }
-}
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java
 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java
index 24cb4a365a9..8f4dbf95616 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java
@@ -57,9 +57,9 @@ import org.apache.doris.thrift.TMetadataTableRequestParams;
 import org.apache.doris.thrift.TMetadataType;
 import org.apache.doris.thrift.TNetworkAddress;
 import org.apache.doris.thrift.TPipelineWorkloadGroup;
-import org.apache.doris.thrift.TQueriesMetadataParams;
 import org.apache.doris.thrift.TQueryStatistics;
 import org.apache.doris.thrift.TRow;
+import org.apache.doris.thrift.TSchemaTableRequestParams;
 import org.apache.doris.thrift.TStatus;
 import org.apache.doris.thrift.TStatusCode;
 import org.apache.doris.thrift.TTasksMetadataParams;
@@ -100,12 +100,35 @@ public class MetadataGenerator {
 
     private static final ImmutableMap<String, Integer> 
ACTIVE_QUERIES_COLUMN_TO_INDEX;
 
+
+    private static final ImmutableList<Column> WORKLOAD_GROUPS_SCHEMA = 
ImmutableList.of(
+            new Column("ID", ScalarType.BIGINT),
+            new Column("NAME", ScalarType.createStringType()),
+            new Column("CPU_SHARE", PrimitiveType.BIGINT),
+            new Column("MEMORY_LIMIT", ScalarType.createStringType()),
+            new Column("ENABLE_MEMORY_OVERCOMMIT", 
ScalarType.createStringType()),
+            new Column("MAX_CONCURRENCY", PrimitiveType.BIGINT),
+            new Column("MAX_QUEUE_SIZE", PrimitiveType.BIGINT),
+            new Column("QUEUE_TIMEOUT", PrimitiveType.BIGINT),
+            new Column("CPU_HARD_LIMIT", PrimitiveType.BIGINT),
+            new Column("SCAN_THREAD_NUM", PrimitiveType.BIGINT),
+            new Column("MAX_REMOTE_SCAN_THREAD_NUM", PrimitiveType.BIGINT),
+            new Column("MIN_REMOTE_SCAN_THREAD_NUM", PrimitiveType.BIGINT));
+
+    private static final ImmutableMap<String, Integer> 
WORKLOAD_GROUPS_COLUMN_TO_INDEX;
+
     static {
-        ImmutableMap.Builder<String, Integer> builder = new 
ImmutableMap.Builder();
+        ImmutableMap.Builder<String, Integer> activeQueriesbuilder = new 
ImmutableMap.Builder();
         for (int i = 0; i < ACTIVE_QUERIES_SCHEMA.size(); i++) {
-            builder.put(ACTIVE_QUERIES_SCHEMA.get(i).getName().toLowerCase(), 
i);
+            
activeQueriesbuilder.put(ACTIVE_QUERIES_SCHEMA.get(i).getName().toLowerCase(), 
i);
+        }
+        ACTIVE_QUERIES_COLUMN_TO_INDEX = activeQueriesbuilder.build();
+
+        ImmutableMap.Builder<String, Integer> workloadGroupsBuilder = new 
ImmutableMap.Builder();
+        for (int i = 0; i < WORKLOAD_GROUPS_SCHEMA.size(); i++) {
+            
workloadGroupsBuilder.put(WORKLOAD_GROUPS_SCHEMA.get(i).getName().toLowerCase(),
 i);
         }
-        ACTIVE_QUERIES_COLUMN_TO_INDEX = builder.build();
+        WORKLOAD_GROUPS_COLUMN_TO_INDEX = workloadGroupsBuilder.build();
     }
 
     public static TFetchSchemaTableDataResult 
getMetadataTable(TFetchSchemaTableDataRequest request) throws TException {
@@ -127,9 +150,6 @@ public class MetadataGenerator {
             case FRONTENDS_DISKS:
                 result = frontendsDisksMetadataResult(params);
                 break;
-            case WORKLOAD_GROUPS:
-                result = workloadGroupsMetadataResult(params);
-                break;
             case CATALOGS:
                 result = catalogsMetadataResult(params);
                 break;
@@ -156,23 +176,26 @@ public class MetadataGenerator {
 
     public static TFetchSchemaTableDataResult 
getSchemaTableData(TFetchSchemaTableDataRequest request)
             throws TException {
-        if (!request.isSetMetadaTableParams() || 
!request.getMetadaTableParams().isSetMetadataType()) {
-            return errorResult("Metadata table params is not set. ");
+        if (!request.isSetSchemaTableParams()) {
+            return errorResult("schema table params is not set.");
         }
         TFetchSchemaTableDataResult result;
-        TMetadataTableRequestParams params = request.getMetadaTableParams();
+        TSchemaTableRequestParams schemaTableParams = 
request.getSchemaTableParams();
         ImmutableMap<String, Integer> columnIndex;
-        // todo(wb) move workload group/workload scheduler policy here
-        switch (request.getMetadaTableParams().getMetadataType()) {
-            case QUERIES:
-                result = queriesMetadataResult(params, request);
+        switch (request.getSchemaTableName()) {
+            case ACTIVE_QUERIES:
+                result = queriesMetadataResult(schemaTableParams, request);
                 columnIndex = ACTIVE_QUERIES_COLUMN_TO_INDEX;
                 break;
+            case WORKLOAD_GROUPS:
+                result = workloadGroupsMetadataResult(schemaTableParams);
+                columnIndex = WORKLOAD_GROUPS_COLUMN_TO_INDEX;
+                break;
             default:
-                return errorResult("schema table params is not set.");
+                return errorResult("invalid schema table name.");
         }
-        if (result.getStatus().getStatusCode() == TStatusCode.OK) {
-            filterColumns(result, params.getColumnsName(), columnIndex);
+        if (schemaTableParams.isSetColumnsName() && 
result.getStatus().getStatusCode() == TStatusCode.OK) {
+            filterColumns(result, schemaTableParams.getColumnsName(), 
columnIndex);
         }
         return result;
     }
@@ -406,7 +429,7 @@ public class MetadataGenerator {
         return result;
     }
 
-    private static TFetchSchemaTableDataResult 
workloadGroupsMetadataResult(TMetadataTableRequestParams params) {
+    private static TFetchSchemaTableDataResult 
workloadGroupsMetadataResult(TSchemaTableRequestParams params) {
         if (!params.isSetCurrentUserIdent()) {
             return errorResult("current user ident is not set.");
         }
@@ -427,13 +450,11 @@ public class MetadataGenerator {
             trow.addToColumnValue(new 
TCell().setLongVal(Long.valueOf(rGroupsInfo.get(6)))); // max queue size
             trow.addToColumnValue(new 
TCell().setLongVal(Long.valueOf(rGroupsInfo.get(7)))); // queue timeout
             trow.addToColumnValue(new 
TCell().setStringVal(rGroupsInfo.get(8)));             // cpu hard limit
-            trow.addToColumnValue(new 
TCell().setIntVal(Integer.parseInt(rGroupsInfo.get(9)))); // scan thread num
+            trow.addToColumnValue(new 
TCell().setLongVal(Long.valueOf(rGroupsInfo.get(9)))); // scan thread num
             // max remote scan thread num
-            trow.addToColumnValue(new 
TCell().setIntVal(Integer.parseInt(rGroupsInfo.get(10))));
+            trow.addToColumnValue(new 
TCell().setLongVal(Long.valueOf(rGroupsInfo.get(10))));
             // min remote scan thread num
-            trow.addToColumnValue(new 
TCell().setIntVal(Integer.parseInt(rGroupsInfo.get(11))));
-            trow.addToColumnValue(new 
TCell().setLongVal(Long.valueOf(rGroupsInfo.get(12)))); // running query num
-            trow.addToColumnValue(new 
TCell().setLongVal(Long.valueOf(rGroupsInfo.get(13)))); // waiting query num
+            trow.addToColumnValue(new 
TCell().setLongVal(Long.valueOf(rGroupsInfo.get(11))));
             dataBatch.add(trow);
         }
 
@@ -516,13 +537,8 @@ public class MetadataGenerator {
         return trow;
     }
 
-    private static TFetchSchemaTableDataResult 
queriesMetadataResult(TMetadataTableRequestParams params,
+    private static TFetchSchemaTableDataResult 
queriesMetadataResult(TSchemaTableRequestParams tSchemaTableParams,
             TFetchSchemaTableDataRequest parentRequest) {
-        if (!params.isSetQueriesMetadataParams()) {
-            return errorResult("queries metadata param is not set.");
-        }
-
-        TQueriesMetadataParams queriesMetadataParams = 
params.getQueriesMetadataParams();
         TFetchSchemaTableDataResult result = new TFetchSchemaTableDataResult();
 
         String selfNode = Env.getCurrentEnv().getSelfNode().getHost();
@@ -563,16 +579,14 @@ public class MetadataGenerator {
         }
 
         /* Get the query results from other FE also */
-        if (queriesMetadataParams.isRelayToOtherFe()) {
-            TFetchSchemaTableDataRequest relayRequest = new 
TFetchSchemaTableDataRequest(parentRequest);
-            TMetadataTableRequestParams relayParams = new 
TMetadataTableRequestParams(params);
-            TQueriesMetadataParams relayQueryParams = new 
TQueriesMetadataParams(queriesMetadataParams);
+        if (tSchemaTableParams.isReplayToOtherFe()) {
+            TSchemaTableRequestParams replaySchemaTableParams = new 
TSchemaTableRequestParams(tSchemaTableParams);
+            replaySchemaTableParams.setReplayToOtherFe(false);
 
-            relayQueryParams.setRelayToOtherFe(false);
-            relayParams.setQueriesMetadataParams(relayQueryParams);
-            relayRequest.setMetadaTableParams(relayParams);
+            TFetchSchemaTableDataRequest replayFetchSchemaTableReq = new 
TFetchSchemaTableDataRequest(parentRequest);
+            
replayFetchSchemaTableReq.setSchemaTableParams(replaySchemaTableParams);
 
-            List<TFetchSchemaTableDataResult> relayResults = 
forwardToOtherFrontends(relayRequest);
+            List<TFetchSchemaTableDataResult> relayResults = 
forwardToOtherFrontends(replayFetchSchemaTableReq);
             relayResults
                     .forEach(rs -> rs.getDataBatch()
                         .forEach(row -> dataBatch.add(row)));
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataTableValuedFunction.java
 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataTableValuedFunction.java
index 1947c241ef7..56e769cc8b3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataTableValuedFunction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataTableValuedFunction.java
@@ -40,8 +40,6 @@ public abstract class MetadataTableValuedFunction extends 
TableValuedFunctionIf
                 return 
FrontendsDisksTableValuedFunction.getColumnIndexFromColumnName(columnName);
             case ICEBERG:
                 return 
IcebergTableValuedFunction.getColumnIndexFromColumnName(columnName);
-            case WORKLOAD_GROUPS:
-                return 
WorkloadGroupsTableValuedFunction.getColumnIndexFromColumnName(columnName);
             case CATALOGS:
                 return 
CatalogsTableValuedFunction.getColumnIndexFromColumnName(columnName);
             case MATERIALIZED_VIEWS:
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/TableValuedFunctionIf.java
 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/TableValuedFunctionIf.java
index 2c63cdca1c6..64e794757d1 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/TableValuedFunctionIf.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/TableValuedFunctionIf.java
@@ -62,8 +62,6 @@ public abstract class TableValuedFunctionIf {
                 return new FrontendsTableValuedFunction(params);
             case FrontendsDisksTableValuedFunction.NAME:
                 return new FrontendsDisksTableValuedFunction(params);
-            case WorkloadGroupsTableValuedFunction.NAME:
-                return new WorkloadGroupsTableValuedFunction(params);
             case CatalogsTableValuedFunction.NAME:
                 return new CatalogsTableValuedFunction(params);
             case MvInfosTableValuedFunction.NAME:
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/WorkloadGroupsTableValuedFunction.java
 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/WorkloadGroupsTableValuedFunction.java
deleted file mode 100644
index 27e011d60d5..00000000000
--- 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/WorkloadGroupsTableValuedFunction.java
+++ /dev/null
@@ -1,99 +0,0 @@
-// 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.
-
-package org.apache.doris.tablefunction;
-
-import org.apache.doris.catalog.Column;
-import org.apache.doris.catalog.PrimitiveType;
-import org.apache.doris.catalog.ScalarType;
-import org.apache.doris.nereids.exceptions.AnalysisException;
-import org.apache.doris.resource.workloadgroup.QueryQueue;
-import org.apache.doris.resource.workloadgroup.WorkloadGroup;
-import org.apache.doris.thrift.TMetaScanRange;
-import org.apache.doris.thrift.TMetadataType;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * The Implement of table valued function
- * workload_groups().
- */
-public class WorkloadGroupsTableValuedFunction extends 
MetadataTableValuedFunction {
-    public static final String NAME = "workload_groups";
-
-    private static final ImmutableList<Column> SCHEMA = ImmutableList.of(
-            new Column("Id", ScalarType.createType(PrimitiveType.BIGINT)),
-            new Column("Name", ScalarType.createStringType()),
-            new Column(WorkloadGroup.CPU_SHARE, 
ScalarType.createType(PrimitiveType.BIGINT)),
-            new Column(WorkloadGroup.MEMORY_LIMIT, 
ScalarType.createStringType()),
-            new Column(WorkloadGroup.ENABLE_MEMORY_OVERCOMMIT, 
ScalarType.createStringType()),
-            new Column(WorkloadGroup.MAX_CONCURRENCY, 
ScalarType.createType(PrimitiveType.BIGINT)),
-            new Column(WorkloadGroup.MAX_QUEUE_SIZE, 
ScalarType.createType(PrimitiveType.BIGINT)),
-            new Column(WorkloadGroup.QUEUE_TIMEOUT, 
ScalarType.createType(PrimitiveType.BIGINT)),
-            new Column(WorkloadGroup.CPU_HARD_LIMIT, 
ScalarType.createStringType()),
-            new Column(WorkloadGroup.SCAN_THREAD_NUM, 
ScalarType.createType(PrimitiveType.INT)),
-            new Column(WorkloadGroup.MAX_REMOTE_SCAN_THREAD_NUM, 
ScalarType.createType(PrimitiveType.INT)),
-            new Column(WorkloadGroup.MIN_REMOTE_SCAN_THREAD_NUM, 
ScalarType.createType(PrimitiveType.INT)),
-            new Column(QueryQueue.RUNNING_QUERY_NUM, 
ScalarType.createType(PrimitiveType.BIGINT)),
-            new Column(QueryQueue.WAITING_QUERY_NUM, 
ScalarType.createType(PrimitiveType.BIGINT)));
-
-    private static final ImmutableMap<String, Integer> COLUMN_TO_INDEX;
-
-    static {
-        ImmutableMap.Builder<String, Integer> builder = new 
ImmutableMap.Builder();
-        for (int i = 0; i < SCHEMA.size(); i++) {
-            builder.put(SCHEMA.get(i).getName().toLowerCase(), i);
-        }
-        COLUMN_TO_INDEX = builder.build();
-    }
-
-    public static Integer getColumnIndexFromColumnName(String columnName) {
-        return COLUMN_TO_INDEX.get(columnName.toLowerCase());
-    }
-
-    public WorkloadGroupsTableValuedFunction(Map<String, String> params) 
throws AnalysisException {
-        if (params.size() != 0) {
-            throw new AnalysisException("workload groups table-valued-function 
does not support any params");
-        }
-    }
-
-    @Override
-    public TMetadataType getMetadataType() {
-        return TMetadataType.WORKLOAD_GROUPS;
-    }
-
-    @Override
-    public TMetaScanRange getMetaScanRange() {
-        TMetaScanRange metaScanRange = new TMetaScanRange();
-        metaScanRange.setMetadataType(TMetadataType.WORKLOAD_GROUPS);
-        return metaScanRange;
-    }
-
-    @Override
-    public String getTableName() {
-        return "WorkloadGroupsTableValuedFunction";
-    }
-
-    @Override
-    public List<Column> getTableColumns() throws AnalysisException {
-        return SCHEMA;
-    }
-}
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/datasource/RefreshCatalogTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/datasource/RefreshCatalogTest.java
index 4e327644bd2..7e8e8c33224 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/datasource/RefreshCatalogTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/datasource/RefreshCatalogTest.java
@@ -87,7 +87,7 @@ public class RefreshCatalogTest extends TestWithFeService {
         List<String> dbNames2 = test1.getDbNames();
         Assertions.assertEquals(4, dbNames2.size());
         ExternalInfoSchemaDatabase infoDb = (ExternalInfoSchemaDatabase) 
test1.getDb(InfoSchemaDb.DATABASE_NAME).get();
-        Assertions.assertEquals(29, infoDb.getTables().size());
+        Assertions.assertEquals(30, infoDb.getTables().size());
         TestExternalDatabase testDb = (TestExternalDatabase) 
test1.getDb("db1").get();
         Assertions.assertEquals(2, testDb.getTables().size());
 
@@ -96,7 +96,7 @@ public class RefreshCatalogTest extends TestWithFeService {
         CatalogMgr mgr2 = GsonUtils.GSON.fromJson(json, CatalogMgr.class);
         test1 = mgr2.getCatalog("test1");
         infoDb = (ExternalInfoSchemaDatabase) 
test1.getDb(InfoSchemaDb.DATABASE_NAME).get();
-        Assertions.assertEquals(29, infoDb.getTables().size());
+        Assertions.assertEquals(30, infoDb.getTables().size());
         testDb = (TestExternalDatabase) test1.getDb("db1").get();
         Assertions.assertEquals(2, testDb.getTables().size());
     }
diff --git a/gensrc/thrift/Descriptors.thrift b/gensrc/thrift/Descriptors.thrift
index 760fd979bc0..909739168c5 100644
--- a/gensrc/thrift/Descriptors.thrift
+++ b/gensrc/thrift/Descriptors.thrift
@@ -127,7 +127,8 @@ enum TSchemaTableType {
     SCH_METADATA_NAME_IDS,
     SCH_PROFILING,
     SCH_BACKEND_ACTIVE_TASKS,
-    SCH_ACTIVE_QUERIES;
+    SCH_ACTIVE_QUERIES,
+    SCH_WORKLOAD_GROUPS;
 }
 
 enum THdfsCompression {
diff --git a/gensrc/thrift/FrontendService.thrift 
b/gensrc/thrift/FrontendService.thrift
index 79be4de149f..9f47037c56d 100644
--- a/gensrc/thrift/FrontendService.thrift
+++ b/gensrc/thrift/FrontendService.thrift
@@ -901,7 +901,8 @@ struct TInitExternalCtlMetaResult {
 enum TSchemaTableName {
   // BACKENDS = 0,
   METADATA_TABLE = 1, // tvf
-  SCHEMA_TABLE = 2, // db information_schema's table
+  ACTIVE_QUERIES = 2, // db information_schema's table
+  WORKLOAD_GROUPS = 3, // db information_schema's table
 }
 
 struct TMetadataTableRequestParams {
@@ -917,10 +918,17 @@ struct TMetadataTableRequestParams {
   10: optional PlanNodes.TTasksMetadataParams tasks_metadata_params
 }
 
+struct TSchemaTableRequestParams {
+    1: optional list<string> columns_name
+    2: optional Types.TUserIdentity current_user_ident
+    3: optional bool replay_to_other_fe
+}
+
 struct TFetchSchemaTableDataRequest {
   1: optional string cluster_name
   2: optional TSchemaTableName schema_table_name
-  3: optional TMetadataTableRequestParams metada_table_params
+  3: optional TMetadataTableRequestParams metada_table_params // used for tvf
+  4: optional TSchemaTableRequestParams schema_table_params // used for 
request db information_schema's table
 }
 
 struct TFetchSchemaTableDataResult {
diff --git a/gensrc/thrift/Types.thrift b/gensrc/thrift/Types.thrift
index 11ec1093da0..529527a8838 100644
--- a/gensrc/thrift/Types.thrift
+++ b/gensrc/thrift/Types.thrift
@@ -703,14 +703,12 @@ enum TSortType {
 enum TMetadataType {
   ICEBERG,
   BACKENDS,
-  WORKLOAD_GROUPS,
   FRONTENDS,
   CATALOGS,
   FRONTENDS_DISKS,
   MATERIALIZED_VIEWS,
   JOBS,
   TASKS,
-  QUERIES,
   WORKLOAD_SCHED_POLICY
 }
 
diff --git 
a/regression-test/data/external_table_p0/jdbc/test_mariadb_jdbc_catalog.out 
b/regression-test/data/external_table_p0/jdbc/test_mariadb_jdbc_catalog.out
index 8023cf076c3..a83c87b49c2 100644
--- a/regression-test/data/external_table_p0/jdbc/test_mariadb_jdbc_catalog.out
+++ b/regression-test/data/external_table_p0/jdbc/test_mariadb_jdbc_catalog.out
@@ -52,6 +52,7 @@ tables
 triggers
 user_privileges
 views
+workload_groups
 
 -- !auto_default_t --
 0
diff --git 
a/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_catalog.out 
b/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_catalog.out
index f03a7591cf1..e2e853d7cf4 100644
--- a/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_catalog.out
+++ b/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_catalog.out
@@ -221,6 +221,7 @@ tables
 triggers
 user_privileges
 views
+workload_groups
 
 -- !dt --
 2023-06-17T10:00       2023-06-17T10:00:01.100 2023-06-17T10:00:02.220 
2023-06-17T10:00:03.333 2023-06-17T10:00:04.444400      
2023-06-17T10:00:05.555550      2023-06-17T10:00:06.666666
diff --git 
a/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_catalog_nereids.out
 
b/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_catalog_nereids.out
index 8cf9d01b6e5..6b895c059f1 100644
--- 
a/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_catalog_nereids.out
+++ 
b/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_catalog_nereids.out
@@ -189,6 +189,7 @@ tables
 triggers
 user_privileges
 views
+workload_groups
 
 -- !test_insert1 --
 doris1 18
diff --git 
a/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_driver5_catalog.out
 
b/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_driver5_catalog.out
index 5e63f90319d..2665f803a65 100644
--- 
a/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_driver5_catalog.out
+++ 
b/regression-test/data/external_table_p0/jdbc/test_mysql_jdbc_driver5_catalog.out
@@ -221,6 +221,7 @@ tables
 triggers
 user_privileges
 views
+workload_groups
 
 -- !dt --
 2023-06-17T10:00       2023-06-17T10:00:01     2023-06-17T10:00:02     
2023-06-17T10:00:03     2023-06-17T10:00:04     2023-06-17T10:00:05     
2023-06-17T10:00:06
diff --git a/regression-test/suites/workload_manager_p0/test_curd_wlg.groovy 
b/regression-test/suites/workload_manager_p0/test_curd_wlg.groovy
index 864d1ab5b21..92b4836ea7f 100644
--- a/regression-test/suites/workload_manager_p0/test_curd_wlg.groovy
+++ b/regression-test/suites/workload_manager_p0/test_curd_wlg.groovy
@@ -117,7 +117,7 @@ suite("test_crud_wlg") {
             ");"
     sql "set workload_group=test_group;"
 
-    qt_show_1 "select 
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num
 from workload_groups() where name in ('normal','test_group') order by name;"
+    qt_show_1 "select 
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num
 from information_schema.workload_groups where name in ('normal','test_group') 
order by name;"
 
     // test memory_limit
     test {
@@ -128,7 +128,7 @@ suite("test_crud_wlg") {
 
     sql "alter workload group test_group properties ( 'memory_limit'='11%' );"
     qt_mem_limit_1 """ select count(1) from ${table_name} """
-    qt_mem_limit_2 "select 
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num
 from workload_groups() where name in ('normal','test_group') order by name;"
+    qt_mem_limit_2 "select 
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num
 from information_schema.workload_groups where name in ('normal','test_group') 
order by name;"
 
     // test enable_memory_overcommit
     test {
@@ -141,7 +141,7 @@ suite("test_crud_wlg") {
     qt_mem_overcommit_1 """ select count(1) from ${table_name} """
     sql "alter workload group test_group properties ( 
'enable_memory_overcommit'='false' );"
     qt_mem_overcommit_2 """ select count(1) from ${table_name} """
-    qt_mem_overcommit_3 "select 
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num
 from workload_groups() where name in ('normal','test_group') order by name;"
+    qt_mem_overcommit_3 "select 
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num
 from information_schema.workload_groups where name in ('normal','test_group') 
order by name;"
 
     // test cpu_hard_limit
     test {
@@ -160,7 +160,7 @@ suite("test_crud_wlg") {
 
     sql "alter workload group test_group properties ( 'cpu_hard_limit'='20%' 
);"
     qt_cpu_hard_limit_1 """ select count(1) from ${table_name} """
-    qt_cpu_hard_limit_2 "select 
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num
 from workload_groups() where name in ('normal','test_group') order by name;"
+    qt_cpu_hard_limit_2 "select 
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num
 from information_schema.workload_groups where name in ('normal','test_group') 
order by name;"
 
     // test query queue
     test {
@@ -183,7 +183,7 @@ suite("test_crud_wlg") {
 
     sql "alter workload group test_group properties ( 'max_concurrency'='100' 
);"
     qt_queue_1 """ select count(1) from ${table_name} """
-    qt_show_queue "select 
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num
 from workload_groups() where name in ('normal','test_group') order by name;"
+    qt_show_queue "select 
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num
 from information_schema.workload_groups where name in ('normal','test_group') 
order by name;"
 
     // test create group failed
     // failed for cpu_share
@@ -261,7 +261,7 @@ suite("test_crud_wlg") {
     }
 
     // test show workload groups
-    qt_select_tvf_1 "select 
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num
 from workload_groups() where name in ('normal','test_group') order by name;"
+    qt_select_tvf_1 "select 
name,cpu_share,memory_limit,enable_memory_overcommit,max_concurrency,max_queue_size,queue_timeout,cpu_hard_limit,scan_thread_num
 from information_schema.workload_groups where name in ('normal','test_group') 
order by name;"
 
     // test auth
     sql """drop user if exists test_wlg_user"""


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to