You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by li...@apache.org on 2024/04/15 09:50:35 UTC
(doris) 03/04: Improve waiting empty table logic. (#33472)
This is an automated email from the ASF dual-hosted git repository.
lijibing pushed a commit to branch high-priority-column
in repository https://gitbox.apache.org/repos/asf/doris.git
commit 8a9defed5ba3ae238c4e308d1510271baca09558
Author: Jibing-Li <64...@users.noreply.github.com>
AuthorDate: Wed Apr 10 15:40:31 2024 +0800
Improve waiting empty table logic. (#33472)
---
.../apache/doris/statistics/AnalysisManager.java | 6 +++---
.../doris/statistics/ExternalAnalysisTask.java | 5 +----
.../apache/doris/statistics/OlapAnalysisTask.java | 24 +++++++---------------
.../doris/statistics/StatisticsAutoCollector.java | 4 ++--
.../doris/statistics/util/StatisticsUtil.java | 2 +-
5 files changed, 14 insertions(+), 27 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java
index b59ee808e75..405715a9e5a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java
@@ -236,8 +236,9 @@ public class AnalysisManager implements Writable {
@VisibleForTesting
protected AnalysisInfo buildAndAssignJob(AnalyzeTblStmt stmt) throws DdlException {
AnalysisInfo jobInfo = buildAnalysisJobInfo(stmt);
- if (jobInfo.jobColumns.isEmpty()) {
+ if (jobInfo.jobColumns == null || jobInfo.jobColumns.isEmpty()) {
// No statistics need to be collected or updated
+ LOG.info("Job columns are empty, skip analyze table {}", stmt.getTblName().toString());
return null;
}
// Only OlapTable and Hive HMSExternalTable support sample analyze.
@@ -371,8 +372,7 @@ public class AnalysisManager implements Writable {
infoBuilder.setColName(stringJoiner.toString());
infoBuilder.setTaskIds(Lists.newArrayList());
infoBuilder.setTblUpdateTime(table.getUpdateTime());
- long rowCount = table.getRowCount();
- infoBuilder.setRowCount(rowCount);
+ infoBuilder.setRowCount(StatisticsUtil.isEmptyTable(table, analysisMethod) ? 0 : table.getRowCount());
TableStatsMeta tableStatsStatus = findTableStatsStatus(table.getId());
infoBuilder.setUpdateRows(tableStatsStatus == null ? 0 : tableStatsStatus.updatedRows.get());
infoBuilder.setPriority(JobPriority.MANUAL);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/ExternalAnalysisTask.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/ExternalAnalysisTask.java
index 16e741f4563..7d3c9af2548 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/ExternalAnalysisTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/ExternalAnalysisTask.java
@@ -256,9 +256,6 @@ public class ExternalAnalysisTask extends BaseAnalysisTask {
}
target = columnSize * tableSample.getSampleValue();
}
- if (sizeToRead > LIMIT_SIZE && sizeToRead > target * LIMIT_FACTOR) {
- return true;
- }
- return false;
+ return sizeToRead > LIMIT_SIZE && sizeToRead > target * LIMIT_FACTOR;
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java
index c1f7765ea54..41e492fbc04 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java
@@ -37,7 +37,6 @@ import org.apache.commons.text.StringSubstitutor;
import java.security.SecureRandom;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
@@ -65,11 +64,11 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
}
public void doExecute() throws Exception {
- Set<Pair<String, String>> columnList = info.jobColumns;
- if (StatisticsUtil.isEmptyTable(tbl, info.analysisMethod) || columnList == null || columnList.isEmpty()) {
+ // For empty table, write empty result directly, no need to run SQL to collect stats.
+ if (info.rowCount == 0) {
StatsId statsId = new StatsId(concatColumnStatsId(), info.catalogId, info.dbId,
info.tblId, info.indexId, info.colName, null);
- job.appendBuf(this, Arrays.asList(new ColStatsData(statsId)));
+ job.appendBuf(this, Collections.singletonList(new ColStatsData(statsId)));
return;
}
if (tableSample != null) {
@@ -84,7 +83,7 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
* 2. estimate partition stats
* 3. insert col stats and partition stats
*/
- protected void doSample() throws Exception {
+ protected void doSample() {
if (LOG.isDebugEnabled()) {
LOG.debug("Will do sample collection for column {}", col.getName());
}
@@ -209,7 +208,7 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
* 2. insert partition in batch
* 3. calculate column stats based on partition stats
*/
- protected void doFull() throws Exception {
+ protected void doFull() {
if (LOG.isDebugEnabled()) {
LOG.debug("Will do full collection for column {}", col.getName());
}
@@ -315,10 +314,7 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
return false;
}
// Partition column need to scan tablets from all partitions.
- if (tbl.isPartitionColumn(col.getName())) {
- return false;
- }
- return true;
+ return !tbl.isPartitionColumn(col.getName());
}
/**
@@ -381,12 +377,6 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
}
protected String concatColumnStatsId() {
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append(info.tblId);
- stringBuilder.append("-");
- stringBuilder.append(info.indexId);
- stringBuilder.append("-");
- stringBuilder.append(info.colName);
- return stringBuilder.toString();
+ return info.tblId + "-" + info.indexId + "-" + info.colName;
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsAutoCollector.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsAutoCollector.java
index 0b37ede5a49..479610ccea2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsAutoCollector.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsAutoCollector.java
@@ -114,7 +114,7 @@ public class StatisticsAutoCollector extends MasterDaemon {
return Pair.of(job.get(), JobPriority.MID);
}
job = fetchJobFromMap(manager.lowPriorityJobs);
- return job.map(tableNameSetEntry -> Pair.of(tableNameSetEntry, JobPriority.LOW)).orElse(null);
+ return job.map(entry -> Pair.of(entry, JobPriority.LOW)).orElse(null);
}
protected Optional<Map.Entry<TableName, Set<Pair<String, String>>>> fetchJobFromMap(
@@ -183,7 +183,7 @@ public class StatisticsAutoCollector extends MasterDaemon {
? AnalysisMethod.SAMPLE : AnalysisMethod.FULL;
AnalysisManager manager = Env.getServingEnv().getAnalysisManager();
TableStatsMeta tableStatsStatus = manager.findTableStatsStatus(table.getId());
- long rowCount = table.getRowCount();
+ long rowCount = StatisticsUtil.isEmptyTable(table, analysisMethod) ? 0 : table.getRowCount();
StringJoiner stringJoiner = new StringJoiner(",", "[", "]");
for (Pair<String, String> pair : jobColumns) {
stringJoiner.add(pair.toString());
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java
index 351fcbd892f..a25934dd3d1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java
@@ -1020,7 +1020,7 @@ public class StatisticsUtil {
}
public static boolean isEmptyTable(TableIf table, AnalysisInfo.AnalysisMethod method) {
- int waitRowCountReportedTime = 90;
+ int waitRowCountReportedTime = 75;
if (!(table instanceof OlapTable) || method.equals(AnalysisInfo.AnalysisMethod.FULL)) {
return false;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org