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

lide pushed a commit to branch branch-1.2-lts
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-1.2-lts by this push:
     new 497ae91c6e6 [improvement](http) add show_table_data http api (#28380) 
(#28631)
497ae91c6e6 is described below

commit 497ae91c6e6c8ff486cdda263366c9aadf75872b
Author: xueweizhang <zxw520bl...@163.com>
AuthorDate: Mon Dec 25 15:16:49 2023 +0800

    [improvement](http) add show_table_data http api (#28380) (#28631)
---
 .../http-actions/fe/show-table-data-action.md      | 163 +++++++++++++++++++++
 docs/sidebars.json                                 |   1 +
 .../http-actions/fe/show-table-data-action.md      | 163 +++++++++++++++++++++
 .../java/org/apache/doris/catalog/OlapTable.java   |   8 +-
 .../doris/httpv2/rest/RestBaseController.java      |   1 +
 .../org/apache/doris/httpv2/rest/ShowAction.java   |  69 +++++++++
 6 files changed, 403 insertions(+), 2 deletions(-)

diff --git 
a/docs/en/docs/admin-manual/http-actions/fe/show-table-data-action.md 
b/docs/en/docs/admin-manual/http-actions/fe/show-table-data-action.md
new file mode 100644
index 00000000000..9cdbe2c49ad
--- /dev/null
+++ b/docs/en/docs/admin-manual/http-actions/fe/show-table-data-action.md
@@ -0,0 +1,163 @@
+---
+{
+    "title": "Show Table Data Action",
+    "language": "en"
+}
+---
+
+<!-- 
+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.
+-->
+
+# Show Table Data Action
+
+## Request
+
+`GET /api/show_table_data`
+
+## Description
+
+Used to get the data size of all tables in all databases under all internal 
catalog, or the data size of the specified database or table. Unit byte.
+    
+## Path parameters
+
+NULL
+
+## Query parameters
+
+* `db`
+
+    Optional. If specified, get the data size of the tables under the 
specified database.
+
+* `table`
+
+    Optional. If specified, get the data size of the specified table.
+
+* `single_replica`
+
+    Optional. If specified, get the data size of the single replica of the 
table.
+
+## Request body
+
+NULL
+
+## Response
+
+1. The data size of all tables in the specified database.
+
+    ```
+    {
+        "msg":"success",
+        "code":0,
+        "data":{
+            "tpch":{
+                "partsupp":9024548244,
+                "revenue0":0,
+                "customer":1906421482
+            }
+        },
+        "count":0
+    }
+    ```
+    
+2. The data size of the specified table of the specified db.
+
+    ```
+    {
+        "msg":"success",
+        "code":0,
+        "data":{
+            "tpch":{
+                "partsupp":9024548244
+            }
+        },
+        "count":0
+    }
+    ```
+
+3. The data size of the single replica of the specified table of the specified 
db.
+
+    ```
+    {
+        "msg":"success",
+        "code":0,
+        "data":{
+            "tpch":{
+                "partsupp":3008182748
+            }
+        },
+        "count":0
+    }
+    ```
+    
+## Examples
+
+1. The data size of all tables in the specified database.
+
+    ```
+    GET /api/show_table_data?db=tpch
+    
+    Response:
+    {
+        "msg":"success",
+        "code":0,
+        "data":{
+            "tpch":{
+                "partsupp":9024548244,
+                "revenue0":0,
+                "customer":1906421482
+            }
+        },
+        "count":0
+    }
+    ```
+
+2. The data size of the specified table of the specified db.
+
+    ```
+    GET /api/show_table_data?db=tpch&table=partsupp
+        
+    Response:
+    {
+        "msg":"success",
+        "code":0,
+        "data":{
+            "tpch":{
+                "partsupp":9024548244
+            }
+        },
+        "count":0
+    }
+    ```
+3. The data size of the single replica of the specified table of the specified 
db.
+
+    ```
+    GET /api/show_table_data?db=tpch&table=partsupp&single_replica=true
+        
+    Response:
+    {
+        "msg":"success",
+        "code":0,
+        "data":{
+            "tpch":{
+                "partsupp":3008182748
+            }
+        },
+        "count":0
+    }
+    ```
diff --git a/docs/sidebars.json b/docs/sidebars.json
index 55b66394f33..0dde25b4779 100644
--- a/docs/sidebars.json
+++ b/docs/sidebars.json
@@ -1162,6 +1162,7 @@
                                 
"admin-manual/http-actions/fe/show-meta-info-action",
                                 
"admin-manual/http-actions/fe/show-proc-action",
                                 
"admin-manual/http-actions/fe/show-runtime-info-action",
+                                
"admin-manual/http-actions/fe/show-table-data-action",
                                 
"admin-manual/http-actions/fe/statement-execution-action",
                                 
"admin-manual/http-actions/fe/table-query-plan-action",
                                 
"admin-manual/http-actions/fe/table-row-count-action",
diff --git 
a/docs/zh-CN/docs/admin-manual/http-actions/fe/show-table-data-action.md 
b/docs/zh-CN/docs/admin-manual/http-actions/fe/show-table-data-action.md
new file mode 100644
index 00000000000..97bb3dcf3b8
--- /dev/null
+++ b/docs/zh-CN/docs/admin-manual/http-actions/fe/show-table-data-action.md
@@ -0,0 +1,163 @@
+---
+{
+    "title": "Show Table Data Action",
+    "language": "zh-CN"
+}
+---
+
+<!-- 
+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.
+-->
+
+# Show Table Data Action
+
+## Request
+
+`GET /api/show_table_data`
+
+## Description
+
+用于获取所有internal源下所有数据库所有表的数据量,或者指定数据库或指定表的数据量。单位字节。
+    
+## Path parameters
+
+无
+
+## Query parameters
+
+* `db`
+
+    可选。如果指定,则获取指定数据库下表的数据量。
+
+* `table`
+
+    可选。如果指定,则获取指定表的数据量。
+
+* `single_replica`
+
+    可选。如果指定,则获取表单副本所占用的数据量。
+
+## Request body
+
+无
+
+## Response
+
+1. 指定数据库所有表的数据量。
+
+    ```
+    {
+        "msg":"success",
+        "code":0,
+        "data":{
+            "tpch":{
+                "partsupp":9024548244,
+                "revenue0":0,
+                "customer":1906421482
+            }
+        },
+        "count":0
+    }
+    ```
+    
+2. 指定数据库指定表的数据量。
+
+    ```
+    {
+        "msg":"success",
+        "code":0,
+        "data":{
+            "tpch":{
+                "partsupp":9024548244
+            }
+        },
+        "count":0
+    }
+    ```
+
+3. 指定数据库指定表单副本的数据量。
+
+    ```
+    {
+        "msg":"success",
+        "code":0,
+        "data":{
+            "tpch":{
+                "partsupp":3008182748
+            }
+        },
+        "count":0
+    }
+    ```
+    
+## Examples
+
+1. 获取指定数据库的数据量
+
+    ```
+    GET /api/show_table_data?db=tpch
+    
+    Response:
+    {
+        "msg":"success",
+        "code":0,
+        "data":{
+            "tpch":{
+                "partsupp":9024548244,
+                "revenue0":0,
+                "customer":1906421482
+            }
+        },
+        "count":0
+    }
+    ```
+
+2. 指定数据库指定表的数据量。
+
+    ```
+    GET /api/show_table_data?db=tpch&table=partsupp
+        
+    Response:
+    {
+        "msg":"success",
+        "code":0,
+        "data":{
+            "tpch":{
+                "partsupp":9024548244
+            }
+        },
+        "count":0
+    }
+    ```
+3. 指定数据库指定表单副本的数据量。
+
+    ```
+    GET /api/show_table_data?db=tpch&table=partsupp&single_replica=true
+        
+    Response:
+    {
+        "msg":"success",
+        "code":0,
+        "data":{
+            "tpch":{
+                "partsupp":3008182748
+            }
+        },
+        "count":0
+    }
+    ```
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
index d880ce05045..5c9ca6184d9 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
@@ -1393,14 +1393,18 @@ public class OlapTable extends Table {
         return oldPartition;
     }
 
-    public long getDataSize() {
+    public long getDataSize(boolean singleReplica) {
         long dataSize = 0;
         for (Partition partition : getAllPartitions()) {
-            dataSize += partition.getDataSize(false);
+            dataSize += partition.getDataSize(singleReplica);
         }
         return dataSize;
     }
 
+    public long getDataSize() {
+        return getDataSize(false);
+    }
+
     public long getReplicaCount() {
         long replicaCount = 0;
         for (Partition partition : getAllPartitions()) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/RestBaseController.java 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/RestBaseController.java
index 2f56831d446..80e2b4e2fa6 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/RestBaseController.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/RestBaseController.java
@@ -49,6 +49,7 @@ public class RestBaseController extends BaseController {
     protected static final String LABEL_KEY = "label";
     protected static final String TXN_ID_KEY = "txn_id";
     protected static final String TXN_OPERATION_KEY = "txn_operation";
+    protected static final String SINGLE_REPLICA_KEY = "single_replica";
     private static final Logger LOG = 
LogManager.getLogger(RestBaseController.class);
 
     public ActionAuthorizationInfo executeCheckPassword(HttpServletRequest 
request,
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/ShowAction.java 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/ShowAction.java
index dd3fbf48f88..659fedb7088 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/ShowAction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/ShowAction.java
@@ -23,6 +23,7 @@ import org.apache.doris.catalog.Env;
 import org.apache.doris.catalog.OlapTable;
 import org.apache.doris.catalog.Table;
 import org.apache.doris.catalog.TableIf.TableType;
+import org.apache.doris.cluster.ClusterNamespace;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.Config;
 import org.apache.doris.common.proc.ProcNodeInterface;
@@ -190,6 +191,34 @@ public class ShowAction extends RestBaseController {
         return ResponseEntityBuilder.ok(oneEntry);
     }
 
+    @RequestMapping(path = "/api/show_table_data", method = RequestMethod.GET)
+    public Object show_table_data(HttpServletRequest request, 
HttpServletResponse response) {
+        String dbName = request.getParameter(DB_KEY);
+        String tableName = request.getParameter(TABLE_KEY);
+        String singleReplica = request.getParameter(SINGLE_REPLICA_KEY);
+        boolean singleReplicaBool = Boolean.parseBoolean(singleReplica);
+        Map<String, Map<String, Long>> oneEntry = Maps.newHashMap();
+        if (dbName != null) {
+            String fullDbName = getFullDbName(dbName);
+            DatabaseIf db = 
Env.getCurrentInternalCatalog().getDbNullable(fullDbName);
+            if (db == null) {
+                return ResponseEntityBuilder.okWithCommonError("database " + 
fullDbName + " not found.");
+            }
+            Map<String, Long> tablesEntry = getDataSizeOfTables(db, tableName, 
singleReplicaBool);
+            oneEntry.put(ClusterNamespace.getNameFromFullName(fullDbName), 
tablesEntry);
+        } else {
+            for (long dbId : Env.getCurrentInternalCatalog().getDbIds()) {
+                DatabaseIf db = 
Env.getCurrentInternalCatalog().getDbNullable(dbId);
+                if (db == null || !(db instanceof Database) || ((Database) 
db).isInfoSchemaDb()) {
+                    continue;
+                }
+                Map<String, Long> tablesEntry = getDataSizeOfTables(db, 
tableName, singleReplicaBool);
+                
oneEntry.put(ClusterNamespace.getNameFromFullName(db.getFullName()), 
tablesEntry);
+            }
+        }
+        return ResponseEntityBuilder.ok(oneEntry);
+    }
+
     private Map<String, String> getHaInfo() throws IOException {
         HashMap<String, String> feInfo = new HashMap<String, String>();
         feInfo.put("role", Env.getCurrentEnv().getFeType().toString());
@@ -271,6 +300,46 @@ public class ShowAction extends RestBaseController {
         return totalSize;
     }
 
+    public Map<String, Long> getDataSizeOfTables(DatabaseIf db, String 
tableName, boolean singleReplica) {
+        Map<String, Long> oneEntry = Maps.newHashMap();
+        db.readLock();
+        try {
+            if (Strings.isNullOrEmpty(tableName)) {
+                List<Table> tables = db.getTables();
+                for (Table table : tables) {
+                    Map<String, Long> tableEntry = getDataSizeOfTable(table, 
singleReplica);
+                    oneEntry.putAll(tableEntry);
+                }
+            } else {
+                Table table = ((Database) db).getTableNullable(tableName);
+                if (table == null) {
+                    return oneEntry;
+                }
+                Map<String, Long> tableEntry = getDataSizeOfTable(table, 
singleReplica);
+                oneEntry.putAll(tableEntry);
+            }
+        } finally {
+            db.readUnlock();
+        }
+        return oneEntry;
+    }
+
+    public Map<String, Long> getDataSizeOfTable(Table table, boolean 
singleReplica) {
+        Map<String, Long> oneEntry = Maps.newHashMap();
+        if (table.getType() == TableType.VIEW || table.getType() == 
TableType.ODBC) {
+            oneEntry.put(table.getName(), 0L);
+        } else if (table.getType() == TableType.OLAP) {
+            table.readLock();
+            try {
+                long tableSize = ((OlapTable) 
table).getDataSize(singleReplica);
+                oneEntry.put(table.getName(), tableSize);
+            } finally {
+                table.readUnlock();
+            }
+        }
+        return oneEntry;
+    }
+
     private Map<String, Long> getDataSize() {
         Map<String, Long> result = new HashMap<String, Long>();
         List<String> dbNames = Env.getCurrentInternalCatalog().getDbNames();


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to