Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.qe.ShowResultSet;
import org.apache.doris.qe.ShowResultSetMetaData;
import org.apache.doris.statistics.ColStatsMeta;
import org.apache.doris.statistics.ColumnStatistic;

import com.google.common.collect.ImmutableList;
Expand All @@ -54,6 +55,10 @@ public class ShowColumnStatsStmt extends ShowStmt {
.add("avg_size_byte")
.add("min")
.add("max")
.add("method")
.add("type")
.add("trigger")
.add("query_times")
.add("updated_time")
.build();

Expand Down Expand Up @@ -136,6 +141,7 @@ public ShowResultSet constructResultSet(List<Pair<String, ColumnStatistic>> colu
if (p.second.isUnKnown) {
return;
}

List<String> row = Lists.newArrayList();
row.add(p.first);
row.add(String.valueOf(p.second.count));
Expand All @@ -145,6 +151,12 @@ public ShowResultSet constructResultSet(List<Pair<String, ColumnStatistic>> colu
row.add(String.valueOf(p.second.avgSizeByte));
row.add(String.valueOf(p.second.minExpr == null ? "N/A" : p.second.minExpr.toSql()));
row.add(String.valueOf(p.second.maxExpr == null ? "N/A" : p.second.maxExpr.toSql()));
ColStatsMeta colStatsMeta = Env.getCurrentEnv().getAnalysisManager().findColStatsMeta(table.getId(),
p.first);
row.add(String.valueOf(colStatsMeta == null ? "N/A" : colStatsMeta.analysisMethod));
row.add(String.valueOf(colStatsMeta == null ? "N/A" : colStatsMeta.analysisType));
row.add(String.valueOf(colStatsMeta == null ? "N/A" : colStatsMeta.jobType));
row.add(String.valueOf(colStatsMeta == null ? "N/A" : colStatsMeta.queriedTimes));
row.add(String.valueOf(p.second.updatedTime));
result.add(row);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.qe.ShowResultSet;
import org.apache.doris.qe.ShowResultSetMetaData;
import org.apache.doris.statistics.TableStats;
import org.apache.doris.statistics.TableStatsMeta;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
Expand All @@ -49,8 +49,6 @@ public class ShowTableStatsStmt extends ShowStmt {
.add("updated_rows")
.add("query_times")
.add("row_count")
.add("method")
.add("type")
.add("updated_time")
.add("columns")
.add("trigger")
Expand Down Expand Up @@ -132,7 +130,7 @@ public long getPartitionId() {
return table.getPartition(partitionName).getId();
}

public ShowResultSet constructResultSet(TableStats tableStatistic) {
public ShowResultSet constructResultSet(TableStatsMeta tableStatistic) {
if (tableStatistic == null) {
return new ShowResultSet(getMetaData(), new ArrayList<>());
}
Expand All @@ -141,8 +139,6 @@ public ShowResultSet constructResultSet(TableStats tableStatistic) {
row.add(String.valueOf(tableStatistic.updatedRows));
row.add(String.valueOf(tableStatistic.queriedTimes.get()));
row.add(String.valueOf(tableStatistic.rowCount));
row.add(tableStatistic.analysisMethod.toString());
row.add(tableStatistic.analysisType.toString());
row.add(new Date(tableStatistic.updatedTime).toString());
row.add(tableStatistic.analyzeColumns().toString());
row.add(tableStatistic.jobType.toString());
Expand Down
11 changes: 7 additions & 4 deletions fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
import org.apache.doris.statistics.HistogramTask;
import org.apache.doris.statistics.MVAnalysisTask;
import org.apache.doris.statistics.OlapAnalysisTask;
import org.apache.doris.statistics.TableStats;
import org.apache.doris.statistics.TableStatsMeta;
import org.apache.doris.statistics.util.StatisticsUtil;
import org.apache.doris.system.Backend;
import org.apache.doris.system.SystemInfoService;
Expand Down Expand Up @@ -1125,12 +1125,15 @@ public BaseAnalysisTask createAnalysisTask(AnalysisInfo info) {
return new MVAnalysisTask(info);
}

@Override
public boolean needReAnalyzeTable(TableStats tblStats) {
public boolean needReAnalyzeTable(TableStatsMeta tblStats) {
if (tblStats == null) {
return true;
}
long rowCount = getRowCount();
// TODO: Do we need to analyze an empty table?
if (rowCount == 0) {
return false;
}
if (!tblStats.analyzeColumns().containsAll(getBaseSchema()
.stream()
.map(Column::getName)
Expand All @@ -1145,7 +1148,7 @@ public boolean needReAnalyzeTable(TableStats tblStats) {
@Override
public Map<String, Set<String>> findReAnalyzeNeededPartitions() {
TableIf table = this;
TableStats tableStats = Env.getCurrentEnv().getAnalysisManager().findTableStatsStatus(table.getId());
TableStatsMeta tableStats = Env.getCurrentEnv().getAnalysisManager().findTableStatsStatus(table.getId());
Set<String> allPartitions = table.getPartitionNames().stream().map(table::getPartition)
.filter(Partition::hasData).map(Partition::getName).collect(Collectors.toSet());
if (tableStats == null) {
Expand Down
4 changes: 2 additions & 2 deletions fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
import org.apache.doris.statistics.AnalysisInfo;
import org.apache.doris.statistics.BaseAnalysisTask;
import org.apache.doris.statistics.ColumnStatistic;
import org.apache.doris.statistics.TableStats;
import org.apache.doris.statistics.TableStatsMeta;
import org.apache.doris.thrift.TTableDescriptor;

import com.google.common.base.Preconditions;
Expand Down Expand Up @@ -575,7 +575,7 @@ public Optional<ColumnStatistic> getColumnStatistic(String colName) {
public void analyze(String dbName) {}

@Override
public boolean needReAnalyzeTable(TableStats tblStats) {
public boolean needReAnalyzeTable(TableStatsMeta tblStats) {
return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import org.apache.doris.statistics.AnalysisInfo;
import org.apache.doris.statistics.BaseAnalysisTask;
import org.apache.doris.statistics.ColumnStatistic;
import org.apache.doris.statistics.TableStats;
import org.apache.doris.statistics.TableStatsMeta;
import org.apache.doris.thrift.TTableDescriptor;

import com.google.common.collect.Lists;
Expand Down Expand Up @@ -138,7 +138,7 @@ default int getBaseColumnIdxByName(String colName) {

Optional<ColumnStatistic> getColumnStatistic(String colName);

boolean needReAnalyzeTable(TableStats tblStats);
boolean needReAnalyzeTable(TableStatsMeta tblStats);

Map<String, Set<String>> findReAnalyzeNeededPartitions();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
import org.apache.doris.statistics.AnalysisInfo;
import org.apache.doris.statistics.BaseAnalysisTask;
import org.apache.doris.statistics.ColumnStatistic;
import org.apache.doris.statistics.TableStats;
import org.apache.doris.statistics.TableStatsMeta;
import org.apache.doris.thrift.TTableDescriptor;

import com.google.common.collect.Sets;
Expand Down Expand Up @@ -383,7 +383,7 @@ public void gsonPostProcess() throws IOException {
}

@Override
public boolean needReAnalyzeTable(TableStats tblStats) {
public boolean needReAnalyzeTable(TableStatsMeta tblStats) {
// TODO: Find a way to decide if this external table need to be reanalyzed.
// For now, simply return true for all external tables.
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
import org.apache.doris.statistics.ColumnStatistic;
import org.apache.doris.statistics.ColumnStatisticBuilder;
import org.apache.doris.statistics.HMSAnalysisTask;
import org.apache.doris.statistics.TableStats;
import org.apache.doris.statistics.TableStatsMeta;
import org.apache.doris.statistics.util.StatisticsUtil;
import org.apache.doris.thrift.THiveTable;
import org.apache.doris.thrift.TTableDescriptor;
Expand Down Expand Up @@ -436,7 +436,7 @@ public List<Column> getHudiSchema(List<FieldSchema> hmsSchema) {
@Override
public long estimatedRowCount() {
try {
TableStats tableStats = Env.getCurrentEnv().getAnalysisManager().findTableStatsStatus(id);
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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import org.apache.doris.statistics.AnalysisInfo;
import org.apache.doris.statistics.BaseAnalysisTask;
import org.apache.doris.statistics.JdbcAnalysisTask;
import org.apache.doris.statistics.TableStats;
import org.apache.doris.statistics.TableStatsMeta;
import org.apache.doris.thrift.TTableDescriptor;

import org.apache.logging.log4j.LogManager;
Expand Down Expand Up @@ -111,7 +111,7 @@ public BaseAnalysisTask createAnalysisTask(AnalysisInfo info) {
@Override
public long getRowCount() {
makeSureInitialized();
TableStats tableStats = Env.getCurrentEnv().getAnalysisManager().findTableStatsStatus(id);
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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@
import org.apache.doris.scheduler.job.Job;
import org.apache.doris.scheduler.job.JobTask;
import org.apache.doris.statistics.AnalysisInfo;
import org.apache.doris.statistics.TableStats;
import org.apache.doris.statistics.TableStatsMeta;
import org.apache.doris.system.Backend;
import org.apache.doris.system.Frontend;
import org.apache.doris.transaction.TransactionState;
Expand Down Expand Up @@ -889,7 +889,7 @@ public void readFields(DataInput in) throws IOException {
break;
}
case OperationType.OP_UPDATE_TABLE_STATS: {
data = TableStats.read(in);
data = TableStatsMeta.read(in);
isRead = true;
break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
import org.apache.doris.scheduler.job.JobTask;
import org.apache.doris.statistics.AnalysisInfo;
import org.apache.doris.statistics.AnalysisManager;
import org.apache.doris.statistics.TableStats;
import org.apache.doris.statistics.TableStatsMeta;
import org.apache.doris.system.Backend;
import org.apache.doris.system.Frontend;
import org.apache.doris.transaction.TransactionState;
Expand Down Expand Up @@ -1124,7 +1124,7 @@ public static void loadJournal(Env env, Long logId, JournalEntity journal) {
break;
}
case OperationType.OP_UPDATE_TABLE_STATS: {
env.getAnalysisManager().replayUpdateTableStatsStatus((TableStats) journal.getData());
env.getAnalysisManager().replayUpdateTableStatsStatus((TableStatsMeta) journal.getData());
break;
}
case OperationType.OP_PERSIST_AUTO_JOB: {
Expand Down Expand Up @@ -1981,7 +1981,7 @@ public void logUpdateAutoIncrementId(AutoIncrementIdUpdateLog log) {
logEdit(OperationType.OP_UPDATE_AUTO_INCREMENT_ID, log);
}

public void logCreateTableStats(TableStats tableStats) {
public void logCreateTableStats(TableStatsMeta tableStats) {
logEdit(OperationType.OP_UPDATE_TABLE_STATS, tableStats);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@
import org.apache.doris.statistics.ColumnStatistic;
import org.apache.doris.statistics.Histogram;
import org.apache.doris.statistics.StatisticsRepository;
import org.apache.doris.statistics.TableStats;
import org.apache.doris.statistics.TableStatsMeta;
import org.apache.doris.statistics.query.QueryStatsUtil;
import org.apache.doris.system.Backend;
import org.apache.doris.system.Diagnoser;
Expand Down Expand Up @@ -2454,7 +2454,7 @@ private void handleShowDataSkew() throws AnalysisException {
private void handleShowTableStats() {
ShowTableStatsStmt showTableStatsStmt = (ShowTableStatsStmt) stmt;
TableIf tableIf = showTableStatsStmt.getTable();
TableStats tableStats = Env.getCurrentEnv().getAnalysisManager().findTableStatsStatus(tableIf.getId());
TableStatsMeta tableStats = Env.getCurrentEnv().getAnalysisManager().findTableStatsStatus(tableIf.getId());
/*
HMSExternalTable table will fetch row count from HMS
or estimate with file size and schema if it's not analyzed.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ public class AnalysisManager extends Daemon implements Writable {
// Tracking and control sync analyze tasks, keep in mem only
private final ConcurrentMap<ConnectContext, SyncTaskCollection> ctxToSyncTask = new ConcurrentHashMap<>();

private final Map<Long, TableStats> idToTblStats = new ConcurrentHashMap<>();
private final Map<Long, TableStatsMeta> idToTblStats = new ConcurrentHashMap<>();

protected SimpleQueue<AnalysisInfo> autoJobs = createSimpleQueue(null, this);

Expand Down Expand Up @@ -511,6 +511,7 @@ public AnalysisInfo buildAnalysisJobInfo(AnalyzeTblStmt stmt) throws DdlExceptio
infoBuilder.setCatalogName(catalogName);
infoBuilder.setDbName(db);
infoBuilder.setTblName(tblName);
// TODO: Refactor later, DON'T MODIFY IT RIGHT NOW
StringJoiner stringJoiner = new StringJoiner(",", "[", "]");
for (String colName : columnNames) {
stringJoiner.add(colName);
Expand Down Expand Up @@ -643,8 +644,14 @@ public void updateTableStats(AnalysisInfo jobInfo) {
if (tbl instanceof ExternalTable) {
return;
}
// TODO: set updatedRows to 0, when loadedRows of transaction info is ready.
updateTableStatsStatus(new TableStats(tbl.getId(), tbl.estimatedRowCount(), jobInfo));
TableStatsMeta tableStats = findTableStatsStatus(tbl.getId());
if (tableStats == null) {
updateTableStatsStatus(new TableStatsMeta(tbl.getId(), tbl.estimatedRowCount(), jobInfo));
} else {
tableStats.updateByJob(jobInfo);
logCreateTableStats(tableStats);
}

}

public List<AnalysisInfo> showAnalysisJob(ShowAnalyzeStmt stmt) {
Expand Down Expand Up @@ -726,7 +733,7 @@ public void dropStats(DropStatsStmt dropStatsStmt) throws DdlException {

Set<String> cols = dropStatsStmt.getColumnNames();
long tblId = dropStatsStmt.getTblId();
TableStats tableStats = findTableStatsStatus(dropStatsStmt.getTblId());
TableStatsMeta tableStats = findTableStatsStatus(dropStatsStmt.getTblId());
if (tableStats == null) {
return;
}
Expand Down Expand Up @@ -949,10 +956,10 @@ public static boolean needAbandon(AnalysisInfo analysisInfo) {
return false;
}

private static void readIdToTblStats(DataInput in, Map<Long, TableStats> map) throws IOException {
private static void readIdToTblStats(DataInput in, Map<Long, TableStatsMeta> map) throws IOException {
int size = in.readInt();
for (int i = 0; i < size; i++) {
TableStats tableStats = TableStats.read(in);
TableStatsMeta tableStats = TableStatsMeta.read(in);
map.put(tableStats.tblId, tableStats);
}
}
Expand Down Expand Up @@ -980,7 +987,7 @@ private void writeJobInfo(DataOutput out, Map<Long, AnalysisInfo> infoMap) throw

private void writeTableStats(DataOutput out) throws IOException {
out.writeInt(idToTblStats.size());
for (Entry<Long, TableStats> entry : idToTblStats.entrySet()) {
for (Entry<Long, TableStatsMeta> entry : idToTblStats.entrySet()) {
entry.getValue().write(out);
}
}
Expand All @@ -996,29 +1003,29 @@ public void addToJobIdTasksMap(long jobId, Map<Long, BaseAnalysisTask> tasks) {
analysisJobIdToTaskMap.put(jobId, tasks);
}

public TableStats findTableStatsStatus(long tblId) {
public TableStatsMeta findTableStatsStatus(long tblId) {
return idToTblStats.get(tblId);
}

// Invoke this when load transaction finished.
public void updateUpdatedRows(long tblId, long rows) {
TableStats statsStatus = idToTblStats.get(tblId);
TableStatsMeta statsStatus = idToTblStats.get(tblId);
if (statsStatus != null) {
statsStatus.updatedRows.addAndGet(rows);
logCreateTableStats(statsStatus);
}
}

public void updateTableStatsStatus(TableStats tableStats) {
public void updateTableStatsStatus(TableStatsMeta tableStats) {
replayUpdateTableStatsStatus(tableStats);
logCreateTableStats(tableStats);
}

public void replayUpdateTableStatsStatus(TableStats tableStats) {
public void replayUpdateTableStatsStatus(TableStatsMeta tableStats) {
idToTblStats.put(tableStats.tblId, tableStats);
}

public void logCreateTableStats(TableStats tableStats) {
public void logCreateTableStats(TableStatsMeta tableStats) {
Env.getCurrentEnv().getEditLog().logCreateTableStats(tableStats);
}

Expand All @@ -1030,7 +1037,7 @@ public void registerSysJob(AnalysisInfo jobInfo, Map<Long, BaseAnalysisTask> tas

@VisibleForTesting
protected Set<String> findReAnalyzeNeededPartitions(TableIf table) {
TableStats tableStats = findTableStatsStatus(table.getId());
TableStatsMeta tableStats = findTableStatsStatus(table.getId());
if (tableStats == null) {
return table.getPartitionNames().stream().map(table::getPartition)
.filter(Partition::hasData).map(Partition::getName).collect(Collectors.toSet());
Expand Down Expand Up @@ -1071,7 +1078,7 @@ protected SimpleQueue<AnalysisInfo> createSimpleQueue(Collection<AnalysisInfo> c
// Remove col stats status from TableStats if failed load some col stats after analyze corresponding column so that
// we could make sure it would be analyzed again soon if user or system submit job for that column again.
public void removeColStatsStatus(long tblId, String colName) {
TableStats tableStats = findTableStatsStatus(tblId);
TableStatsMeta tableStats = findTableStatsStatus(tblId);
if (tableStats != null) {
tableStats.removeColumn(colName);
}
Expand All @@ -1089,4 +1096,12 @@ public void removeTableStats(long tblId) {
public void replayTableStatsDeletion(TableStatsDeletionLog log) {
idToTblStats.remove(log.id);
}

public ColStatsMeta findColStatsMeta(long tblId, String colName) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not used?

Copy link
Contributor Author

@Kikyou1997 Kikyou1997 Sep 22, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need by column stats display

TableStatsMeta tableStats = findTableStatsStatus(tblId);
if (tableStats == null) {
return null;
}
return tableStats.findColumnStatsMeta(colName);
}
}
Loading