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 ee23284e5d..4cfc8c99ac 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 @@ -1208,6 +1208,11 @@ public class OlapTable extends Table { return rowCount; } + @Override + public long getCacheRowCount() { + return getRowCount(); + } + @Override public long getAvgRowLength() { long rowCount = 0; diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java index b14e1444ec..be4d846e5e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java @@ -344,6 +344,10 @@ public abstract class Table extends MetaObject implements Writable, TableIf { return 0; } + public long getCacheRowCount() { + return getRowCount(); + } + public long getAvgRowLength() { return 0; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/TableIf.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/TableIf.java index 6927538958..0d0d910521 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/TableIf.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/TableIf.java @@ -121,6 +121,10 @@ public interface TableIf { long getRowCount(); + // Get the exact number of rows in the internal table; + // Get the number of cached rows or estimated rows in the external table, if not, return -1. + long getCacheRowCount(); + long getDataLength(); long getAvgRowLength(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/external/ExternalTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/external/ExternalTable.java index 4eab7ebf81..a07fcff5f5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/external/ExternalTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/external/ExternalTable.java @@ -282,6 +282,10 @@ public class ExternalTable implements TableIf, Writable, GsonPostProcessable { return 0; } + public long getCacheRowCount() { + return 0; + } + @Override public long getAvgRowLength() { return 0; diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/external/HMSExternalTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/external/HMSExternalTable.java index 38f4256276..b284b4d60e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/external/HMSExternalTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/external/HMSExternalTable.java @@ -452,6 +452,23 @@ public class HMSExternalTable extends ExternalTable { return tmpSchema; } + @Override + public long getCacheRowCount() { + //Cached accurate information + TableStatsMeta tableStats = Env.getCurrentEnv().getAnalysisManager().findTableStatsStatus(id); + if (tableStats != null) { + long rowCount = tableStats.rowCount; + LOG.debug("Estimated row count for db {} table {} is {}.", dbName, name, rowCount); + return rowCount; + } + + //estimated information + if (estimatedRowCount != -1) { + return estimatedRowCount; + } + return -1; + } + @Override public long estimatedRowCount() { try { diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/external/JdbcExternalTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/external/JdbcExternalTable.java index 9c5159a2bd..5a423ed027 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/external/JdbcExternalTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/external/JdbcExternalTable.java @@ -122,6 +122,11 @@ public class JdbcExternalTable extends ExternalTable { return 1; } + @Override + public long getCacheRowCount() { + return getRowCount(); + } + @Override public long estimatedRowCount() { return getRowCount(); 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 e30acf9973..621def175e 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 @@ -747,7 +747,7 @@ public class FrontendServiceImpl implements FrontendService.Iface { status.setUpdateTime(table.getUpdateTime() / 1000); status.setCheckTime(lastCheckTime / 1000); status.setCollation("utf-8"); - status.setRows(table.getRowCount()); + status.setRows(table.getCacheRowCount()); status.setDataLength(table.getDataLength()); status.setAvgRowLength(table.getAvgRowLength()); tablesResult.add(status);