This is an automated email from the ASF dual-hosted git repository.
morrysnow 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 f6b47c34b3 [improvement](stats) show stats with updated time (#21377)
f6b47c34b3 is described below
commit f6b47c34b3825bbc223bc51a307ef014b5755e81
Author: AKIRA <[email protected]>
AuthorDate: Tue Jul 25 11:22:08 2023 +0800
[improvement](stats) show stats with updated time (#21377)
Support to view the stats updated time.
After
```sql
mysql> show column stats t1;
+-------------+-------+------+----------+-----------+---------------+------+------+---------------------+
| column_name | count | ndv | num_null | data_size | avg_size_byte | min
| max | updated_time |
+-------------+-------+------+----------+-----------+---------------+------+------+---------------------+
| col2 | 2.0 | 2.0 | 0.0 | 0.0 | 0.0 | 2
| 5 | 2023-06-30 15:50:24 |
| col3 | 2.0 | 2.0 | 0.0 | 0.0 | 0.0 | 3
| 6 | 2023-06-30 15:50:48 |
| col1 | 2.0 | 2.0 | 0.0 | 0.0 | 0.0 | '1'
| '4' | 2023-06-30 15:50:48 |
+-------------+-------+------+----------+-----------+---------------+------+------+---------------------+
```
Before
```sql
mysql> show column stats t1;
+-------------+-------+------+----------+-----------+---------------+------+------+
| column_name | count | ndv | num_null | data_size | avg_size_byte | min
| max |
+-------------+-------+------+----------+-----------+---------------+------+------+
| col2 | 2.0 | 2.0 | 0.0 | 0.0 | 0.0 | 2
| 5 |
| col3 | 2.0 | 2.0 | 0.0 | 0.0 | 0.0 | 3
| 6 |
| col1 | 2.0 | 2.0 | 0.0 | 0.0 | 0.0 | '1'
| '4' |
+-------------+-------+------+----------+-----------+---------------+------+------+
```
---
.../org/apache/doris/analysis/ShowColumnStatsStmt.java | 2 ++
.../org/apache/doris/statistics/ColumnStatistic.java | 10 ++++++++--
.../apache/doris/statistics/ColumnStatisticBuilder.java | 16 ++++++++++++++--
.../doris/statistics/util/InternalQueryResult.java | 4 ++--
.../org/apache/doris/nereids/util/HyperGraphBuilder.java | 4 +++-
.../test/java/org/apache/doris/statistics/CacheTest.java | 10 ++++++++--
.../apache/doris/statistics/StatsDeriveResultTest.java | 4 +++-
7 files changed, 40 insertions(+), 10 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowColumnStatsStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowColumnStatsStmt.java
index 0ebf2050ed..982480cb00 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowColumnStatsStmt.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowColumnStatsStmt.java
@@ -56,6 +56,7 @@ public class ShowColumnStatsStmt extends ShowStmt {
.add("avg_size_byte")
.add("min")
.add("max")
+ .add("updated_time")
.build();
private final TableName tableName;
@@ -148,6 +149,7 @@ public class ShowColumnStatsStmt extends ShowStmt {
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()));
+ row.add(String.valueOf(p.second.updatedTime));
result.add(row);
});
return new ShowResultSet(getMetaData(), result);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStatistic.java
b/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStatistic.java
index e60d7d8697..4d9a4ecf20 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStatistic.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStatistic.java
@@ -121,9 +121,12 @@ public class ColumnStatistic {
public final Map<Long, ColumnStatistic> partitionIdToColStats = new
HashMap<>();
+ public final String updatedTime;
+
public ColumnStatistic(double count, double ndv, ColumnStatistic original,
double avgSizeByte,
double numNulls, double dataSize, double minValue, double maxValue,
- double selectivity, LiteralExpr minExpr, LiteralExpr maxExpr,
boolean isUnKnown, Histogram histogram) {
+ double selectivity, LiteralExpr minExpr, LiteralExpr maxExpr,
boolean isUnKnown, Histogram histogram,
+ String updatedTime) {
this.count = count;
this.ndv = ndv;
this.original = original;
@@ -137,6 +140,7 @@ public class ColumnStatistic {
this.maxExpr = maxExpr;
this.isUnKnown = isUnKnown;
this.histogram = histogram;
+ this.updatedTime = updatedTime;
}
public static ColumnStatistic fromResultRow(List<ResultRow> resultRows) {
@@ -205,6 +209,7 @@ public class ColumnStatistic {
Histogram histogram =
Env.getCurrentEnv().getStatisticsCache().getHistogram(tblId, idxId, colName)
.orElse(null);
columnStatisticBuilder.setHistogram(histogram);
+
columnStatisticBuilder.setUpdatedTime(resultRow.getColumnValue("update_time"));
return columnStatisticBuilder.build();
} catch (Exception e) {
LOG.warn("Failed to deserialize column statistics, column not
exists", e);
@@ -393,7 +398,8 @@ public class ColumnStatistic {
null,
null,
stat.getBoolean("IsUnKnown"),
- Histogram.deserializeFromJson(stat.getString("Histogram"))
+ Histogram.deserializeFromJson(stat.getString("Histogram")),
+ stat.getString("lastUpdatedTine")
);
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStatisticBuilder.java
b/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStatisticBuilder.java
index f69ab56815..df1ddb50fe 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStatisticBuilder.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStatisticBuilder.java
@@ -37,6 +37,8 @@ public class ColumnStatisticBuilder {
private ColumnStatistic original;
+ private String updatedTime;
+
public ColumnStatisticBuilder() {
}
@@ -54,6 +56,7 @@ public class ColumnStatisticBuilder {
this.isUnknown = columnStatistic.isUnKnown;
this.histogram = columnStatistic.histogram;
this.original = columnStatistic.original;
+ this.updatedTime = columnStatistic.updatedTime;
}
public ColumnStatisticBuilder setCount(double count) {
@@ -169,13 +172,22 @@ public class ColumnStatisticBuilder {
return this;
}
+ public String getUpdatedTime() {
+ return updatedTime;
+ }
+
+ public void setUpdatedTime(String updatedTime) {
+ this.updatedTime = updatedTime;
+ }
+
public ColumnStatistic build() {
dataSize = Math.max((count - numNulls + 1) * avgSizeByte, 0);
if (original == null && !isUnknown) {
original = new ColumnStatistic(count, ndv, null, avgSizeByte,
numNulls,
- dataSize, minValue, maxValue, selectivity, minExpr,
maxExpr, false, histogram);
+ dataSize, minValue, maxValue, selectivity, minExpr,
maxExpr, false,
+ histogram, updatedTime);
}
return new ColumnStatistic(count, ndv, original, avgSizeByte, numNulls,
- dataSize, minValue, maxValue, selectivity, minExpr, maxExpr,
isUnknown, histogram);
+ dataSize, minValue, maxValue, selectivity, minExpr, maxExpr,
isUnknown, histogram, updatedTime);
}
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/statistics/util/InternalQueryResult.java
b/fe/fe-core/src/main/java/org/apache/doris/statistics/util/InternalQueryResult.java
index 422f7af4a9..e791986010 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/statistics/util/InternalQueryResult.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/statistics/util/InternalQueryResult.java
@@ -100,7 +100,7 @@ public class InternalQueryResult {
List<PrimitiveType> types = getTypes();
int index = getColumnIndex(columnName);
if (index == -1) {
- throw new DdlException("The column name does not exist.");
+ throw new DdlException(String.format("The column name:[%s]
does not exist.", columnName));
}
return types.get(index);
}
@@ -117,7 +117,7 @@ public class InternalQueryResult {
public String getColumnValue(String columnName) throws DdlException {
int index = getColumnIndex(columnName);
if (index == -1) {
- throw new DdlException("The column name does not exist.");
+ throw new DdlException(String.format("The column name:[%s]
does not exist.", columnName));
}
return values.get(index);
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/HyperGraphBuilder.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/HyperGraphBuilder.java
index ce76b58183..7fe8b97977 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/HyperGraphBuilder.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/HyperGraphBuilder.java
@@ -42,6 +42,7 @@ import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.BitSet;
+import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -312,7 +313,8 @@ public class HyperGraphBuilder {
for (Slot slot : scanPlan.getOutput()) {
slotIdToColumnStats.put(slot,
new ColumnStatistic(count, count, null, 1, 0, 0, 0,
- count, 1, null, null, true, null));
+ count, 1, null, null, true, null,
+ new Date().toString()));
}
return new Statistics(count, slotIdToColumnStats);
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/statistics/CacheTest.java
b/fe/fe-core/src/test/java/org/apache/doris/statistics/CacheTest.java
index 6ac8c7432a..d6570ecebc 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/statistics/CacheTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/statistics/CacheTest.java
@@ -44,6 +44,7 @@ import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.Date;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
@@ -102,6 +103,7 @@ public class CacheTest extends TestWithFeService {
colNames.add("min");
colNames.add("max");
colNames.add("part_id");
+ colNames.add("update_time");
List<PrimitiveType> primitiveTypes = new ArrayList<>();
primitiveTypes.add(PrimitiveType.BIGINT);
primitiveTypes.add(PrimitiveType.BIGINT);
@@ -114,7 +116,8 @@ public class CacheTest extends TestWithFeService {
primitiveTypes.add(PrimitiveType.VARCHAR);
primitiveTypes.add(PrimitiveType.VARCHAR);
primitiveTypes.add(PrimitiveType.VARCHAR);
- primitiveTypes.add(PrimitiveType.BIGINT);
+ primitiveTypes.add(PrimitiveType.VARCHAR);
+ primitiveTypes.add(PrimitiveType.VARCHAR);
List<String> values = new ArrayList<>();
values.add("1");
values.add("2");
@@ -128,6 +131,7 @@ public class CacheTest extends TestWithFeService {
values.add("9");
values.add("10");
values.add(null);
+ values.add(new Date().toString());
ResultRow resultRow = new ResultRow(colNames, primitiveTypes,
values);
return Arrays.asList(resultRow);
}
@@ -285,7 +289,9 @@ public class CacheTest extends TestWithFeService {
result = table;
table.getColumnStatistic("col");
- result = new ColumnStatistic(1, 2, null, 3, 4, 5, 6, 7, 8,
null, null, false, null);
+ result = new ColumnStatistic(1, 2,
+ null, 3, 4, 5, 6, 7, 8,
+ null, null, false, null, new Date().toString());
}
};
StatisticsCache statisticsCache = new StatisticsCache();
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/statistics/StatsDeriveResultTest.java
b/fe/fe-core/src/test/java/org/apache/doris/statistics/StatsDeriveResultTest.java
index 6c157bece6..78872a547d 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/statistics/StatsDeriveResultTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/statistics/StatsDeriveResultTest.java
@@ -22,12 +22,14 @@ import org.apache.doris.common.Id;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
+import java.util.Date;
+
public class StatsDeriveResultTest {
@Test
public void testUpdateRowCountByLimit() {
StatsDeriveResult stats = new StatsDeriveResult(100);
ColumnStatistic a = new ColumnStatistic(100, 10, null, 1, 5, 10,
- 1, 100, 0.5, null, null, false, null);
+ 1, 100, 0.5, null, null, false, null, new Date().toString());
Id id = new Id(1);
stats.addColumnStats(id, a);
StatsDeriveResult res = stats.updateByLimit(0);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]