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

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 666f7096f2 [Fix](multi catalog)(planner) Fix external table statistic 
collection bug (#16486)
666f7096f2 is described below

commit 666f7096f21a882a23a7c73542dc598b0ad9270b
Author: Jibing-Li <64681310+jibing...@users.noreply.github.com>
AuthorDate: Wed Feb 8 16:51:30 2023 +0800

    [Fix](multi catalog)(planner) Fix external table statistic collection bug 
(#16486)
    
    Add index id to column statistic id. Refresh statistic cache after analyze.
---
 .../doris/catalog/external/HMSExternalTable.java    |  1 +
 .../apache/doris/statistics/HiveAnalysisTask.java   | 21 +++++++++++++++++++--
 2 files changed, 20 insertions(+), 2 deletions(-)

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 4d4fc310bd..1a558e1bd9 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
@@ -294,6 +294,7 @@ public class HMSExternalTable extends ExternalTable {
 
     @Override
     public List<Column> initSchema() {
+        makeSureInitialized();
         List<Column> columns;
         List<FieldSchema> schema = ((HMSExternalCatalog) 
catalog).getClient().getSchema(dbName, name);
         if (dlaType.equals(DLAType.ICEBERG)) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/HiveAnalysisTask.java 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/HiveAnalysisTask.java
index d22e2abe78..c0ca6df80c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/HiveAnalysisTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/HiveAnalysisTask.java
@@ -17,6 +17,7 @@
 
 package org.apache.doris.statistics;
 
+import org.apache.doris.catalog.Env;
 import org.apache.doris.common.FeConstants;
 import org.apache.doris.datasource.HMSExternalCatalog;
 import org.apache.doris.qe.AutoCloseConnectContext;
@@ -54,6 +55,7 @@ public class HiveAnalysisTask extends HMSAnalysisTask {
     public static final String NUM_ROWS = "numRows";
     public static final String NUM_FILES = "numFiles";
     public static final String TIMESTAMP = "transient_lastDdlTime";
+    public static final String DELIMITER = "-";
 
     public HiveAnalysisTask(AnalysisTaskScheduler analysisTaskScheduler, 
AnalysisTaskInfo info) {
         super(analysisTaskScheduler, info);
@@ -85,7 +87,7 @@ public class HiveAnalysisTask extends HMSAnalysisTask {
         Map<String, String> parameters = 
table.getRemoteTable().getParameters();
         // Collect table level row count, null number and timestamp.
         setParameterData(parameters, params);
-        params.put("id", String.valueOf(tbl.getId()) + "-" + 
String.valueOf(col.getName()));
+        params.put("id", genColumnStatId(tbl.getId(), -1, col.getName(), 
null));
         List<ColumnStatisticsObj> tableStats = 
table.getHiveTableColumnStats(columns);
         // Collect table level ndv, nulls, min and max. tableStats contains at 
most 1 item;
         for (ColumnStatisticsObj tableStat : tableStats) {
@@ -117,7 +119,7 @@ public class HiveAnalysisTask extends HMSAnalysisTask {
             parameters = partition.getParameters();
             // Collect row count, null number and timestamp.
             setParameterData(parameters, params);
-            params.put("id", String.valueOf(tbl.getId()) + "-" + 
String.valueOf(col.getName()) + "-" + partName);
+            params.put("id", genColumnStatId(tbl.getId(), -1, col.getName(), 
partName));
             params.put("partId", partName);
             List<ColumnStatisticsObj> value = entry.getValue();
             Preconditions.checkState(value.size() == 1);
@@ -138,6 +140,7 @@ public class HiveAnalysisTask extends HMSAnalysisTask {
                 this.stmtExecutor.execute();
             }
         }
+        Env.getCurrentEnv().getStatisticsCache().refreshSync(tbl.getId(), -1, 
col.getName());
     }
 
     private void getStatData(ColumnStatisticsData data, Map<String, String> 
params) {
@@ -226,4 +229,18 @@ public class HiveAnalysisTask extends HMSAnalysisTask {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         params.put("update_time", sdf.format(new Date(timestamp * 1000)));
     }
+
+    private String genColumnStatId(long tableId, long indexId, String 
columnName, String partitionName) {
+        StringBuilder sb = new StringBuilder();
+        sb.append(tableId);
+        sb.append(DELIMITER);
+        sb.append(indexId);
+        sb.append(DELIMITER);
+        sb.append(columnName);
+        if (partitionName != null) {
+            sb.append(DELIMITER);
+            sb.append(partitionName);
+        }
+        return sb.toString();
+    }
 }


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

Reply via email to