You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2024/02/04 14:22:01 UTC
(doris) branch branch-2.1 updated (e891a095e7e -> 48aaaa80058)
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a change to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
from e891a095e7e check segment num when build rowset meta (#30803)
new 9e76592297d Support analyze materialized view. (#30540)
new ccbcf879b58 [test](mtmv) Add materialized view availability regression test (#30769)
new d32292b2925 [regression-test][conf] add master_sync_policy = WRITE_NO_SYNC replica_sync_policy = WRITE_NO_SYNC (#30494)
new 25f6a733fe3 [fix](stats) keep threads in pool alive to maintain reasonable parallelism (#30451)
new 27f65f44638 [Feature](executor)Stream load support workload group (#30763)
new 88ff9c06cf6 [test](mtmv)fix table name duplicate (#30808)
new aed858a4420 [improve](log) print query_id when fold constant on BE (#30802)
new 48aaaa80058 [Enhancement](fuction) change function REPEAT nullable mode (#30743)
The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
be/src/runtime/fold_constant_executor.cpp | 2 +
be/src/vec/exec/vpartition_sort_node.cpp | 22 +-
be/src/vec/functions/function_string.cpp | 1 +
be/src/vec/functions/function_string.h | 123 +++++-
.../org/apache/doris/analysis/AnalyzeTblStmt.java | 44 +-
.../org/apache/doris/analysis/DropStatsStmt.java | 2 +-
.../doris/analysis/ShowAnalyzeTaskStatus.java | 1 +
.../apache/doris/analysis/ShowColumnStatsStmt.java | 8 +-
.../java/org/apache/doris/catalog/OlapTable.java | 60 ++-
.../main/java/org/apache/doris/catalog/Table.java | 5 +
.../java/org/apache/doris/catalog/TableIf.java | 2 +
.../doris/catalog/external/ExternalTable.java | 5 +
.../org/apache/doris/common/ThreadPoolManager.java | 2 +-
.../doris/nereids/minidump/MinidumpUtils.java | 3 +-
.../doris/nereids/rules/analysis/BindRelation.java | 8 +-
.../nereids/rules/exploration/mv/StructInfo.java | 5 +-
.../doris/nereids/stats/StatsCalculator.java | 3 +-
.../trees/expressions/functions/scalar/Repeat.java | 4 +-
.../trees/plans/logical/LogicalOlapScan.java | 5 +-
.../java/org/apache/doris/qe/ShowExecutor.java | 66 ++-
.../apache/doris/service/FrontendServiceImpl.java | 16 +
.../org/apache/doris/statistics/AnalysisInfo.java | 17 +-
.../org/apache/doris/statistics/AnalysisJob.java | 3 +
.../apache/doris/statistics/AnalysisManager.java | 57 ++-
.../apache/doris/statistics/BaseAnalysisTask.java | 6 +-
.../doris/statistics/ExternalAnalysisTask.java | 1 +
.../apache/doris/statistics/OlapAnalysisTask.java | 82 +++-
.../doris/statistics/OlapScanStatsDerive.java | 4 +-
.../doris/statistics/StatisticsAutoCollector.java | 5 +-
.../apache/doris/statistics/StatisticsCache.java | 13 +-
.../doris/statistics/StatisticsCacheKey.java | 8 -
.../apache/doris/statistics/StatisticsCleaner.java | 2 +-
.../doris/statistics/StatisticsRepository.java | 20 +-
.../doris/statistics/util/StatisticsUtil.java | 20 +
.../org/apache/doris/statistics/CacheTest.java | 12 +-
.../doris/statistics/HMSAnalysisTaskTest.java | 2 +-
.../doris/statistics/OlapAnalysisTaskTest.java | 6 +-
.../statistics/StatisticsAutoCollectorTest.java | 21 +-
gensrc/script/doris_builtins_functions.py | 4 +-
.../org/apache/doris/regression/suite/Suite.groovy | 38 ++
regression-test/pipeline/p0/conf/fe.conf | 3 +
.../hive/test_hive_statistics_all_type_p0.groovy | 112 ++---
.../hive/test_hive_statistics_p0.groovy | 166 +++----
.../jdbc/test_mysql_jdbc_statistics.groovy | 24 +-
.../hive/test_hive_statistic.groovy | 266 +++++------
.../hive/test_hive_statistic_auto.groovy | 36 +-
.../hive/test_hive_statistic_cache.groovy | 226 +++++-----
.../hive/test_hive_statistic_clean.groovy | 84 ++--
.../hive/test_hive_statistic_sample.groovy | 108 ++---
.../hive/test_hive_statistics_from_hms.groovy | 208 ++++-----
.../agg_with_roll_up/aggregate_with_roll_up.groovy | 92 ++--
.../aggregate_without_roll_up.groovy | 90 ++--
.../mv/availability/grace_period.groovy | 489 +++++++++++++++++++++
.../availability/materialized_view_switch.groovy | 155 +++++++
.../mv/dimension/dimension_2_4.groovy | 16 +-
.../mv/dimension/dimension_2_5.groovy | 14 +-
.../mv/dimension/dimension_2_6.groovy | 8 +-
.../mv/join/dphyp_inner/inner_join_dphyp.groovy | 78 +---
.../mv/join/dphyp_outer/outer_join_dphyp.groovy | 76 +---
.../mv/join/inner/inner_join.groovy | 78 +---
.../mv/join/left_outer/outer_join.groovy | 80 +---
.../nereids_rules_p0/mv/ssb/mv_ssb_test.groovy | 65 +--
.../suites/statistics/analyze_stats.groovy | 147 +++----
.../suites/statistics/test_agg_complex_type.groovy | 14 +-
.../suites/statistics/test_analyze_mv.groovy | 256 +++++++++++
.../suites/statistics/test_basic_statistics.groovy | 36 +-
66 files changed, 2290 insertions(+), 1345 deletions(-)
create mode 100644 regression-test/suites/nereids_rules_p0/mv/availability/grace_period.groovy
create mode 100644 regression-test/suites/nereids_rules_p0/mv/availability/materialized_view_switch.groovy
create mode 100644 regression-test/suites/statistics/test_analyze_mv.groovy
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org
(doris) 07/08: [improve](log) print query_id when fold constant on BE (#30802)
Posted by yi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
commit aed858a44207162132c6a20afd7e1f27c7b54e58
Author: zhangstar333 <87...@users.noreply.github.com>
AuthorDate: Sun Feb 4 22:01:50 2024 +0800
[improve](log) print query_id when fold constant on BE (#30802)
---
be/src/runtime/fold_constant_executor.cpp | 2 ++
be/src/vec/exec/vpartition_sort_node.cpp | 22 ++++++++++++----------
2 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/be/src/runtime/fold_constant_executor.cpp b/be/src/runtime/fold_constant_executor.cpp
index 0a501b979b5..33fb034b60a 100644
--- a/be/src/runtime/fold_constant_executor.cpp
+++ b/be/src/runtime/fold_constant_executor.cpp
@@ -46,6 +46,7 @@
#include "util/binary_cast.hpp"
#include "util/defer_op.h"
#include "util/runtime_profile.h"
+#include "util/uid_util.h"
#include "vec/columns/column.h"
#include "vec/columns/column_vector.h"
#include "vec/columns/columns_number.h"
@@ -69,6 +70,7 @@ Status FoldConstantExecutor::fold_constant_vexpr(const TFoldConstantParams& para
TQueryGlobals query_globals = params.query_globals;
_query_id = params.query_id;
+ LOG(INFO) << "fold_query_id: " << print_id(_query_id);
// init
RETURN_IF_ERROR(_init(query_globals, params.query_options));
// only after init operation, _mem_tracker is ready
diff --git a/be/src/vec/exec/vpartition_sort_node.cpp b/be/src/vec/exec/vpartition_sort_node.cpp
index 772156b9880..f1a2341ac86 100644
--- a/be/src/vec/exec/vpartition_sort_node.cpp
+++ b/be/src/vec/exec/vpartition_sort_node.cpp
@@ -205,17 +205,19 @@ Status VPartitionSortNode::_emplace_into_hash_table(const ColumnRawPtrs& key_col
_value_places.push_back(mapped);
_num_partition++;
};
-
- SCOPED_TIMER(_emplace_key_timer);
- for (size_t row = 0; row < num_rows; ++row) {
- auto& mapped =
- agg_method.lazy_emplace(state, row, creator, creator_for_null_key);
- mapped->add_row_idx(row);
+ {
+ SCOPED_TIMER(_emplace_key_timer);
+ for (size_t row = 0; row < num_rows; ++row) {
+ auto& mapped =
+ agg_method.lazy_emplace(state, row, creator, creator_for_null_key);
+ mapped->add_row_idx(row);
+ }
}
-
- SCOPED_TIMER(_selector_block_timer);
- for (auto* place : _value_places) {
- RETURN_IF_ERROR(place->append_block_by_selector(input_block, eos));
+ {
+ SCOPED_TIMER(_selector_block_timer);
+ for (auto* place : _value_places) {
+ RETURN_IF_ERROR(place->append_block_by_selector(input_block, eos));
+ }
}
return Status::OK();
},
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org
(doris) 03/08: [regression-test][conf] add master_sync_policy = WRITE_NO_SYNC replica_sync_policy = WRITE_NO_SYNC (#30494)
Posted by yi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
commit d32292b2925acf0cbdbc3682fededee3707df721
Author: shuke <37...@users.noreply.github.com>
AuthorDate: Sun Feb 4 14:40:14 2024 +0800
[regression-test][conf] add master_sync_policy = WRITE_NO_SYNC replica_sync_policy = WRITE_NO_SYNC (#30494)
There is no power off scene in regression-test, so add these two configure has no side-effect.
---
regression-test/pipeline/p0/conf/fe.conf | 3 +++
1 file changed, 3 insertions(+)
diff --git a/regression-test/pipeline/p0/conf/fe.conf b/regression-test/pipeline/p0/conf/fe.conf
index 655aac0ba2f..0b9c904ffa6 100644
--- a/regression-test/pipeline/p0/conf/fe.conf
+++ b/regression-test/pipeline/p0/conf/fe.conf
@@ -112,3 +112,6 @@ enable_workload_group = true
sys_log_verbose_modules = org.apache.doris.persist.EditLog,org.apache.doris.journal.bdbje.BDBJEJournal
+master_sync_policy = WRITE_NO_SYNC
+replica_sync_policy = WRITE_NO_SYNC
+
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org
(doris) 01/08: Support analyze materialized view. (#30540)
Posted by yi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
commit 9e76592297d7d20d6b46e9531b00cbd9d220e5c8
Author: Jibing-Li <64...@users.noreply.github.com>
AuthorDate: Sun Feb 4 14:27:09 2024 +0800
Support analyze materialized view. (#30540)
---
.../org/apache/doris/analysis/AnalyzeTblStmt.java | 44 ++--
.../org/apache/doris/analysis/DropStatsStmt.java | 2 +-
.../doris/analysis/ShowAnalyzeTaskStatus.java | 1 +
.../apache/doris/analysis/ShowColumnStatsStmt.java | 8 +-
.../java/org/apache/doris/catalog/OlapTable.java | 60 ++++-
.../main/java/org/apache/doris/catalog/Table.java | 5 +
.../java/org/apache/doris/catalog/TableIf.java | 2 +
.../doris/catalog/external/ExternalTable.java | 5 +
.../doris/nereids/minidump/MinidumpUtils.java | 3 +-
.../doris/nereids/rules/analysis/BindRelation.java | 8 +-
.../doris/nereids/stats/StatsCalculator.java | 3 +-
.../trees/plans/logical/LogicalOlapScan.java | 5 +-
.../java/org/apache/doris/qe/ShowExecutor.java | 66 +++--
.../org/apache/doris/statistics/AnalysisInfo.java | 17 +-
.../org/apache/doris/statistics/AnalysisJob.java | 3 +
.../apache/doris/statistics/AnalysisManager.java | 53 ++--
.../apache/doris/statistics/BaseAnalysisTask.java | 6 +-
.../doris/statistics/ExternalAnalysisTask.java | 1 +
.../apache/doris/statistics/OlapAnalysisTask.java | 82 +++++--
.../doris/statistics/OlapScanStatsDerive.java | 4 +-
.../doris/statistics/StatisticsAutoCollector.java | 5 +-
.../apache/doris/statistics/StatisticsCache.java | 13 +-
.../doris/statistics/StatisticsCacheKey.java | 8 -
.../apache/doris/statistics/StatisticsCleaner.java | 2 +-
.../doris/statistics/StatisticsRepository.java | 20 +-
.../doris/statistics/util/StatisticsUtil.java | 20 ++
.../org/apache/doris/statistics/CacheTest.java | 12 +-
.../doris/statistics/HMSAnalysisTaskTest.java | 2 +-
.../doris/statistics/OlapAnalysisTaskTest.java | 6 +-
.../statistics/StatisticsAutoCollectorTest.java | 21 +-
.../hive/test_hive_statistics_all_type_p0.groovy | 112 ++++-----
.../hive/test_hive_statistics_p0.groovy | 166 ++++++-------
.../jdbc/test_mysql_jdbc_statistics.groovy | 24 +-
.../hive/test_hive_statistic.groovy | 266 ++++++++++-----------
.../hive/test_hive_statistic_auto.groovy | 36 +--
.../hive/test_hive_statistic_cache.groovy | 226 ++++++++---------
.../hive/test_hive_statistic_clean.groovy | 84 +++----
.../hive/test_hive_statistic_sample.groovy | 108 ++++-----
.../hive/test_hive_statistics_from_hms.groovy | 208 ++++++++--------
.../suites/statistics/analyze_stats.groovy | 147 ++++++------
.../suites/statistics/test_agg_complex_type.groovy | 14 +-
.../suites/statistics/test_analyze_mv.groovy | 256 ++++++++++++++++++++
.../suites/statistics/test_basic_statistics.groovy | 36 +--
43 files changed, 1291 insertions(+), 879 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/AnalyzeTblStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/AnalyzeTblStmt.java
index a88cd137ad5..fe4d17ea84c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/AnalyzeTblStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/AnalyzeTblStmt.java
@@ -21,6 +21,7 @@ import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.Database;
import org.apache.doris.catalog.DatabaseIf;
import org.apache.doris.catalog.Env;
+import org.apache.doris.catalog.OlapTable;
import org.apache.doris.catalog.TableIf;
import org.apache.doris.catalog.View;
import org.apache.doris.catalog.external.ExternalTable;
@@ -147,26 +148,26 @@ public class AnalyzeTblStmt extends AnalyzeStmt {
}
checkAnalyzePriv(tableName.getDb(), tableName.getTbl());
if (columnNames == null) {
- // Filter unsupported type columns.
- columnNames = table.getBaseSchema(false).stream()
+ columnNames = table.getSchemaAllIndexes(false).stream()
+ // Filter unsupported type columns.
.filter(c -> !StatisticsUtil.isUnsupportedType(c.getType()))
.map(Column::getName)
.collect(Collectors.toList());
- }
- table.readLock();
- try {
- List<String> baseSchema = table.getBaseSchema(false)
- .stream().map(Column::getName).collect(Collectors.toList());
- Optional<String> optional = columnNames.stream()
- .filter(entity -> !baseSchema.contains(entity)).findFirst();
- if (optional.isPresent()) {
- String columnName = optional.get();
- ErrorReport.reportAnalysisException(ErrorCode.ERR_WRONG_COLUMN_NAME,
- columnName, FeNameFormat.getColumnNameRegex());
+ } else {
+ table.readLock();
+ try {
+ List<String> baseSchema = table.getSchemaAllIndexes(false)
+ .stream().map(Column::getName).collect(Collectors.toList());
+ Optional<String> optional = columnNames.stream()
+ .filter(entity -> !baseSchema.contains(entity)).findFirst();
+ if (optional.isPresent()) {
+ String columnName = optional.get();
+ ErrorReport.reportAnalysisException(ErrorCode.ERR_BAD_FIELD_ERROR, columnName, tableName.getTbl());
+ }
+ checkColumn();
+ } finally {
+ table.readUnlock();
}
- checkColumn();
- } finally {
- table.readUnlock();
}
analyzeProperties.check();
@@ -187,7 +188,9 @@ public class AnalyzeTblStmt extends AnalyzeStmt {
private void checkColumn() throws AnalysisException {
boolean containsUnsupportedTytpe = false;
for (String colName : columnNames) {
- Column column = table.getColumn(colName);
+ Column column = table instanceof OlapTable
+ ? ((OlapTable) table).getVisibleColumn(colName)
+ : table.getColumn(colName);
if (column == null) {
ErrorReport.reportAnalysisException(ErrorCode.ERR_WRONG_COLUMN_NAME,
colName, FeNameFormat.getColumnNameRegex());
@@ -200,7 +203,9 @@ public class AnalyzeTblStmt extends AnalyzeStmt {
if (ConnectContext.get() == null
|| !ConnectContext.get().getSessionVariable().enableAnalyzeComplexTypeColumn) {
columnNames = columnNames.stream()
- .filter(c -> !StatisticsUtil.isUnsupportedType(table.getColumn(c).getType()))
+ .filter(c -> !StatisticsUtil.isUnsupportedType(table instanceof OlapTable
+ ? ((OlapTable) table).getVisibleColumn(c).getType()
+ : table.getColumn(c).getType()))
.collect(Collectors.toList());
} else {
throw new AnalysisException(
@@ -233,8 +238,7 @@ public class AnalyzeTblStmt extends AnalyzeStmt {
}
public Set<String> getColumnNames() {
- return columnNames == null ? table.getBaseSchema(false)
- .stream().map(Column::getName).collect(Collectors.toSet()) : Sets.newHashSet(columnNames);
+ return Sets.newHashSet(columnNames);
}
public Set<String> getPartitionNames() {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/DropStatsStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/DropStatsStmt.java
index 5e3bd20c0f1..c0ba720c130 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/DropStatsStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/DropStatsStmt.java
@@ -122,7 +122,7 @@ public class DropStatsStmt extends DdlStmt {
}
} else {
isAllColumns = true;
- columnNames = table.getColumns().stream().map(Column::getName).collect(Collectors.toSet());
+ columnNames = table.getSchemaAllIndexes(false).stream().map(Column::getName).collect(Collectors.toSet());
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowAnalyzeTaskStatus.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowAnalyzeTaskStatus.java
index e5e5cde7344..364e3d0a4f3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowAnalyzeTaskStatus.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowAnalyzeTaskStatus.java
@@ -32,6 +32,7 @@ public class ShowAnalyzeTaskStatus extends ShowStmt {
ShowResultSetMetaData.builder()
.addColumn(new Column("task_id", ScalarType.createVarchar(100)))
.addColumn(new Column("col_name", ScalarType.createVarchar(1000)))
+ .addColumn(new Column("index_name", ScalarType.createVarchar(1000)))
.addColumn(new Column("message", ScalarType.createVarchar(1000)))
.addColumn(new Column("last_state_change_time", ScalarType.createVarchar(1000)))
.addColumn(new Column("time_cost_in_ms", ScalarType.createVarchar(1000)))
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 f974d8f5722..f858263b9df 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
@@ -48,6 +48,7 @@ public class ShowColumnStatsStmt extends ShowStmt {
private static final ImmutableList<String> TITLE_NAMES =
new ImmutableList.Builder<String>()
.add("column_name")
+ .add("index_name")
.add("count")
.add("ndv")
.add("num_null")
@@ -135,7 +136,7 @@ public class ShowColumnStatsStmt extends ShowStmt {
return table;
}
- public ShowResultSet constructResultSet(List<Pair<String, ColumnStatistic>> columnStatistics) {
+ public ShowResultSet constructResultSet(List<Pair<Pair<String, String>, ColumnStatistic>> columnStatistics) {
List<List<String>> result = Lists.newArrayList();
columnStatistics.forEach(p -> {
if (p.second.isUnKnown) {
@@ -143,7 +144,8 @@ public class ShowColumnStatsStmt extends ShowStmt {
}
List<String> row = Lists.newArrayList();
- row.add(p.first);
+ row.add(p.first.first);
+ row.add(p.first.second);
row.add(String.valueOf(p.second.count));
row.add(String.valueOf(p.second.ndv));
row.add(String.valueOf(p.second.numNulls));
@@ -152,7 +154,7 @@ public class ShowColumnStatsStmt extends ShowStmt {
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);
+ p.first.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));
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 ee47d7616e8..bc847dd22c4 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
@@ -21,6 +21,7 @@ import org.apache.doris.alter.MaterializedViewHandler;
import org.apache.doris.analysis.AggregateInfo;
import org.apache.doris.analysis.Analyzer;
import org.apache.doris.analysis.ColumnDef;
+import org.apache.doris.analysis.CreateMaterializedViewStmt;
import org.apache.doris.analysis.DataSortInfo;
import org.apache.doris.analysis.Expr;
import org.apache.doris.analysis.SlotDescriptor;
@@ -492,6 +493,17 @@ public class OlapTable extends Table implements MTMVRelatedTableIf {
return null;
}
+ public List<Long> getMvColumnIndexIds(String columnName) {
+ List<Long> ids = Lists.newArrayList();
+ for (MaterializedIndexMeta meta : getVisibleIndexIdToMeta().values()) {
+ Column target = meta.getColumnByDefineName(columnName);
+ if (target != null) {
+ ids.add(meta.getIndexId());
+ }
+ }
+ return ids;
+ }
+
@Override
public long getUpdateTime() {
long updateTime = tempPartitions.getUpdateTime();
@@ -698,6 +710,15 @@ public class OlapTable extends Table implements MTMVRelatedTableIf {
}
}
+ @Override
+ public List<Column> getSchemaAllIndexes(boolean full) {
+ List<Column> columns = Lists.newArrayList();
+ for (Long indexId : indexIdToMeta.keySet()) {
+ columns.addAll(getSchemaByIndexId(indexId, full));
+ }
+ return columns;
+ }
+
public List<Column> getBaseSchemaKeyColumns() {
return getKeyColumnsByIndexId(baseIndexId);
}
@@ -1207,25 +1228,29 @@ public class OlapTable extends Table implements MTMVRelatedTableIf {
@Override
public Map<String, Set<String>> findReAnalyzeNeededPartitions() {
- TableIf table = this;
- TableStatsMeta tableStats = Env.getCurrentEnv().getAnalysisManager().findTableStatsStatus(table.getId());
- Set<String> allPartitions = table.getPartitionNames().stream().map(table::getPartition)
+ TableStatsMeta tableStats = Env.getCurrentEnv().getAnalysisManager().findTableStatsStatus(getId());
+ Set<String> allPartitions = getPartitionNames().stream().map(this::getPartition)
.filter(Partition::hasData).map(Partition::getName).collect(Collectors.toSet());
if (tableStats == null) {
- return table.getBaseSchema().stream().filter(c -> !StatisticsUtil.isUnsupportedType(c.getType()))
- .collect(Collectors.toMap(Column::getName, v -> allPartitions));
+ Map<String, Set<String>> ret = Maps.newHashMap();
+ for (Column col : getSchemaAllIndexes(false)) {
+ if (StatisticsUtil.isUnsupportedType(col.getType())) {
+ continue;
+ }
+ ret.put(col.getName(), allPartitions);
+ }
+ return ret;
}
Map<String, Set<String>> colToPart = new HashMap<>();
- for (Column col : table.getBaseSchema()) {
+ for (Column col : getSchemaAllIndexes(false)) {
if (StatisticsUtil.isUnsupportedType(col.getType())) {
continue;
}
long lastUpdateTime = tableStats.findColumnLastUpdateTime(col.getName());
- Set<String> partitions = table.getPartitionNames().stream()
- .map(table::getPartition)
+ Set<String> partitions = getPartitionNames().stream()
+ .map(this::getPartition)
.filter(Partition::hasData)
- .filter(partition ->
- partition.getVisibleVersionTime() >= lastUpdateTime).map(Partition::getName)
+ .filter(partition -> partition.getVisibleVersionTime() >= lastUpdateTime).map(Partition::getName)
.collect(Collectors.toSet());
colToPart.put(col.getName(), partitions);
}
@@ -1241,6 +1266,15 @@ public class OlapTable extends Table implements MTMVRelatedTableIf {
return rowCount;
}
+ public long getRowCountForIndex(long indexId) {
+ long rowCount = 0;
+ for (Map.Entry<Long, Partition> entry : idToPartition.entrySet()) {
+ MaterializedIndex index = entry.getValue().getIndex(indexId);
+ rowCount += index == null ? 0 : index.getRowCount();
+ }
+ return rowCount;
+ }
+
@Override
public long getCacheRowCount() {
return getRowCount();
@@ -2472,8 +2506,12 @@ public class OlapTable extends Table implements MTMVRelatedTableIf {
@Override
public boolean isPartitionColumn(String columnName) {
+ if (columnName.startsWith(CreateMaterializedViewStmt.MATERIALIZED_VIEW_NAME_PREFIX)) {
+ columnName = columnName.substring(CreateMaterializedViewStmt.MATERIALIZED_VIEW_NAME_PREFIX.length());
+ }
+ String finalColumnName = columnName;
return getPartitionInfo().getPartitionColumns().stream()
- .anyMatch(c -> c.getName().equalsIgnoreCase(columnName));
+ .anyMatch(c -> c.getName().equalsIgnoreCase(finalColumnName));
}
/**
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 7294577fc5a..a5f2a9e55e7 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
@@ -356,6 +356,11 @@ public abstract class Table extends MetaObject implements Writable, TableIf {
return getBaseSchema(Util.showHiddenColumns());
}
+ @Override
+ public List<Column> getSchemaAllIndexes(boolean full) {
+ return getBaseSchema();
+ }
+
public List<Column> getBaseSchema(boolean full) {
if (full) {
return fullSchema;
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 67efd98fec6..d0985aa6925 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
@@ -94,6 +94,8 @@ public interface TableIf {
List<Column> getBaseSchema();
+ List<Column> getSchemaAllIndexes(boolean full);
+
default List<Column> getBaseSchemaOrEmpty() {
try {
return getBaseSchema();
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 1af013fcbfe..d8e89aab485 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
@@ -256,6 +256,11 @@ public class ExternalTable implements TableIf, Writable, GsonPostProcessable {
return getFullSchema();
}
+ @Override
+ public List<Column> getSchemaAllIndexes(boolean full) {
+ return getBaseSchema();
+ }
+
@Override
public List<Column> getBaseSchema(boolean full) {
return getFullSchema();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/minidump/MinidumpUtils.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/minidump/MinidumpUtils.java
index 4187e1fc4ce..327b0aa6ffa 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/minidump/MinidumpUtils.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/minidump/MinidumpUtils.java
@@ -241,8 +241,9 @@ public class MinidumpUtils {
}
private static ColumnStatistic getColumnStatistic(TableIf table, String colName) {
+ // TODO. Get index id for materialized view.
return Env.getCurrentEnv().getStatisticsCache().getColumnStatistics(
- table.getDatabase().getCatalog().getId(), table.getDatabase().getId(), table.getId(), colName);
+ table.getDatabase().getCatalog().getId(), table.getDatabase().getId(), table.getId(), -1, colName);
}
private static Histogram getColumnHistogram(TableIf table, String colName) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java
index c955aa5b17e..04bac9915b0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java
@@ -18,6 +18,7 @@
package org.apache.doris.nereids.rules.analysis;
import org.apache.doris.catalog.Column;
+import org.apache.doris.catalog.KeysType;
import org.apache.doris.catalog.OlapTable;
import org.apache.doris.catalog.Partition;
import org.apache.doris.catalog.TableIf;
@@ -197,9 +198,14 @@ public class BindRelation extends OneAnalysisRuleFactory {
throw new AnalysisException("Table " + olapTable.getName()
+ " doesn't have materialized view " + indexName.get());
}
+ PreAggStatus preAggStatus
+ = olapTable.getIndexMetaByIndexId(indexId).getKeysType().equals(KeysType.DUP_KEYS)
+ ? PreAggStatus.on()
+ : PreAggStatus.off("For direct index scan.");
+
scan = new LogicalOlapScan(unboundRelation.getRelationId(),
(OlapTable) table, ImmutableList.of(tableQualifier.get(1)), tabletIds, indexId,
- unboundRelation.getHints(), unboundRelation.getTableSample());
+ preAggStatus, unboundRelation.getHints(), unboundRelation.getTableSample());
} else {
scan = new LogicalOlapScan(unboundRelation.getRelationId(),
(OlapTable) table, ImmutableList.of(tableQualifier.get(1)), tabletIds, unboundRelation.getHints(),
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
index 76587bcffb5..cf1803705c2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
@@ -633,8 +633,9 @@ public class StatsCalculator extends DefaultPlanVisitor<Statistics, Void> {
return ColumnStatistic.UNKNOWN;
}
} else {
+ // TODO. Get index id for materialized view.
return Env.getCurrentEnv().getStatisticsCache().getColumnStatistics(
- catalogId, dbId, table.getId(), colName);
+ catalogId, dbId, table.getId(), -1, colName);
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
index bcf80fd899a..9adef45345a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
@@ -145,10 +145,11 @@ public class LogicalOlapScan extends LogicalCatalogRelation implements OlapScan
}
public LogicalOlapScan(RelationId id, OlapTable table, List<String> qualifier, List<Long> tabletIds,
- long selectedIndexId, List<String> hints, Optional<TableSample> tableSample) {
+ long selectedIndexId, PreAggStatus preAggStatus, List<String> hints,
+ Optional<TableSample> tableSample) {
this(id, table, qualifier, Optional.empty(), Optional.empty(),
table.getPartitionIds(), false, tabletIds,
- selectedIndexId, true, PreAggStatus.off("For direct index scan."),
+ selectedIndexId, true, preAggStatus,
ImmutableList.of(), hints, Maps.newHashMap(), tableSample, true, false);
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
index c6cb9dcb055..66e155a2e8f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
@@ -2502,43 +2502,54 @@ public class ShowExecutor {
ShowColumnStatsStmt showColumnStatsStmt = (ShowColumnStatsStmt) stmt;
TableName tableName = showColumnStatsStmt.getTableName();
TableIf tableIf = showColumnStatsStmt.getTable();
- List<Pair<String, ColumnStatistic>> columnStatistics = new ArrayList<>();
+ List<Pair<Pair<String, String>, ColumnStatistic>> columnStatistics = new ArrayList<>();
Set<String> columnNames = showColumnStatsStmt.getColumnNames();
PartitionNames partitionNames = showColumnStatsStmt.getPartitionNames();
boolean showCache = showColumnStatsStmt.isCached();
for (String colName : columnNames) {
- // Show column statistics in columnStatisticsCache. For validation.
- if (showCache) {
- ColumnStatistic columnStatistic = Env.getCurrentEnv().getStatisticsCache().getColumnStatistics(
- tableIf.getDatabase().getCatalog().getId(),
- tableIf.getDatabase().getId(), tableIf.getId(), colName);
- columnStatistics.add(Pair.of(colName, columnStatistic));
- } else if (partitionNames == null) {
- ColumnStatistic columnStatistic =
- StatisticsRepository.queryColumnStatisticsByName(tableIf.getId(), colName);
- columnStatistics.add(Pair.of(colName, columnStatistic));
+ // Olap base index use -1 as index id.
+ List<Long> indexIds = Lists.newArrayList();
+ if (StatisticsUtil.isMvColumn(tableIf, colName)) {
+ OlapTable olapTable = (OlapTable) tableIf;
+ indexIds = olapTable.getMvColumnIndexIds(colName);
} else {
- columnStatistics.addAll(StatisticsRepository.queryColumnStatisticsByPartitions(tableName,
- colName, showColumnStatsStmt.getPartitionNames().getPartitionNames())
- .stream().map(s -> Pair.of(colName, s))
- .collect(Collectors.toList()));
+ indexIds.add(-1L);
+ }
+ for (long indexId : indexIds) {
+ String indexName = "N/A";
+ if (indexId != -1) {
+ indexName = ((OlapTable) tableIf).getIndexNameById(indexId);
+ if (indexName == null) {
+ continue;
+ }
+ }
+ // Show column statistics in columnStatisticsCache.
+ if (showCache) {
+ ColumnStatistic columnStatistic = Env.getCurrentEnv().getStatisticsCache().getColumnStatistics(
+ tableIf.getDatabase().getCatalog().getId(),
+ tableIf.getDatabase().getId(), tableIf.getId(), indexId, colName);
+ columnStatistics.add(Pair.of(Pair.of(colName, indexName), columnStatistic));
+ } else if (partitionNames == null) {
+ ColumnStatistic columnStatistic =
+ StatisticsRepository.queryColumnStatisticsByName(tableIf.getId(), indexId, colName);
+ columnStatistics.add(Pair.of(Pair.of(colName, indexName), columnStatistic));
+ } else {
+ String finalIndexName = indexName;
+ columnStatistics.addAll(StatisticsRepository.queryColumnStatisticsByPartitions(tableName,
+ colName, showColumnStatsStmt.getPartitionNames().getPartitionNames())
+ .stream().map(s -> Pair.of(Pair.of(colName, finalIndexName), s))
+ .collect(Collectors.toList()));
+ }
}
-
}
resultSet = showColumnStatsStmt.constructResultSet(columnStatistics);
}
public void handleShowColumnHist() {
+ // TODO: support histogram in the future.
ShowColumnHistStmt showColumnHistStmt = (ShowColumnHistStmt) stmt;
- TableIf tableIf = showColumnHistStmt.getTable();
- Set<String> columnNames = showColumnHistStmt.getColumnNames();
-
- List<Pair<String, Histogram>> columnStatistics = columnNames.stream()
- .map(colName -> Pair.of(colName,
- StatisticsRepository.queryColumnHistogramByName(tableIf.getId(), colName)))
- .collect(Collectors.toList());
-
+ List<Pair<String, Histogram>> columnStatistics = Lists.newArrayList();
resultSet = showColumnHistStmt.constructResultSet(columnStatistics);
}
@@ -2921,12 +2932,19 @@ public class ShowExecutor {
private void handleShowAnalyzeTaskStatus() {
ShowAnalyzeTaskStatus showStmt = (ShowAnalyzeTaskStatus) stmt;
+ AnalysisInfo jobInfo = Env.getCurrentEnv().getAnalysisManager().findJobInfo(showStmt.getJobId());
+ TableIf table = StatisticsUtil.findTable(jobInfo.catalogId, jobInfo.dbId, jobInfo.tblId);
List<AnalysisInfo> analysisInfos = Env.getCurrentEnv().getAnalysisManager().findTasks(showStmt.getJobId());
List<List<String>> rows = new ArrayList<>();
for (AnalysisInfo analysisInfo : analysisInfos) {
List<String> row = new ArrayList<>();
row.add(String.valueOf(analysisInfo.taskId));
row.add(analysisInfo.colName);
+ if (StatisticsUtil.isMvColumn(table, analysisInfo.colName)) {
+ row.add(((OlapTable) table).getIndexNameById(analysisInfo.indexId));
+ } else {
+ row.add("N/A");
+ }
row.add(analysisInfo.message);
row.add(TimeUtils.DATETIME_FORMAT.format(
LocalDateTime.ofInstant(Instant.ofEpochMilli(analysisInfo.lastExecTimeInMs),
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisInfo.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisInfo.java
index 97788174e69..c707107e0e0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisInfo.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisInfo.java
@@ -17,6 +17,7 @@
package org.apache.doris.statistics;
+import org.apache.doris.catalog.TableIf;
import org.apache.doris.common.io.Text;
import org.apache.doris.common.io.Writable;
import org.apache.doris.persist.gson.GsonUtils;
@@ -24,7 +25,6 @@ import org.apache.doris.statistics.util.StatisticsUtil;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
-import com.google.gson.reflect.TypeToken;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -33,7 +33,6 @@ import org.apache.logging.log4j.core.util.CronExpression;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
-import java.lang.reflect.Type;
import java.text.ParseException;
import java.util.List;
import java.util.Map;
@@ -310,16 +309,6 @@ public class AnalysisInfo implements Writable {
return gson.toJson(colToPartitions);
}
- private static Map<String, Set<String>> getColToPartition(String colToPartitionStr) {
- if (colToPartitionStr == null || colToPartitionStr.isEmpty()) {
- return null;
- }
- Gson gson = new Gson();
- Type type = new TypeToken<Map<String, Set<String>>>() {
- }.getType();
- return gson.fromJson(colToPartitionStr, type);
- }
-
@Override
public void write(DataOutput out) throws IOException {
String json = GsonUtils.GSON.toJson(this);
@@ -352,4 +341,8 @@ public class AnalysisInfo implements Writable {
state = AnalysisState.FAILED;
endTime = System.currentTimeMillis();
}
+
+ public TableIf getTable() {
+ return StatisticsUtil.findTable(catalogId, dbId, tblId);
+ }
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisJob.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisJob.java
index 19dda4934d4..c747b0da14e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisJob.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisJob.java
@@ -191,4 +191,7 @@ public class AnalysisJob {
}
}
+ public AnalysisInfo getJobInfo() {
+ return jobInfo;
+ }
}
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 a1a6dd962eb..051dcfbb1b5 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
@@ -417,10 +417,17 @@ public class AnalysisManager implements Writable {
public void createTaskForEachColumns(AnalysisInfo jobInfo, Map<Long, BaseAnalysisTask> analysisTasks,
boolean isSync) throws DdlException {
Map<String, Set<String>> columnToPartitions = jobInfo.colToPartitions;
+ TableIf table = jobInfo.getTable();
for (Entry<String, Set<String>> entry : columnToPartitions.entrySet()) {
- long indexId = -1;
- long taskId = Env.getCurrentEnv().getNextId();
String colName = entry.getKey();
+ List<Long> indexIds = Lists.newArrayList();
+ // Get index id this column belongs to for OlapTable. Set it to -1 for baseIndex id.
+ if (StatisticsUtil.isMvColumn(table, colName)) {
+ OlapTable olapTable = (OlapTable) table;
+ indexIds = olapTable.getMvColumnIndexIds(colName);
+ } else {
+ indexIds.add(-1L);
+ }
AnalysisInfoBuilder colTaskInfoBuilder = new AnalysisInfoBuilder(jobInfo);
if (jobInfo.analysisType != AnalysisType.HISTOGRAM) {
colTaskInfoBuilder.setAnalysisType(AnalysisType.FUNDAMENTALS);
@@ -428,14 +435,17 @@ public class AnalysisManager implements Writable {
colToParts.put(colName, entry.getValue());
colTaskInfoBuilder.setColToPartitions(colToParts);
}
- AnalysisInfo analysisInfo = colTaskInfoBuilder.setColName(colName).setIndexId(indexId)
- .setTaskId(taskId).setLastExecTimeInMs(System.currentTimeMillis()).build();
- analysisTasks.put(taskId, createTask(analysisInfo));
- jobInfo.addTaskId(taskId);
- if (isSync) {
- continue;
+ for (long indexId : indexIds) {
+ long taskId = Env.getCurrentEnv().getNextId();
+ AnalysisInfo analysisInfo = colTaskInfoBuilder.setColName(colName).setIndexId(indexId)
+ .setTaskId(taskId).setLastExecTimeInMs(System.currentTimeMillis()).build();
+ analysisTasks.put(taskId, createTask(analysisInfo));
+ jobInfo.addTaskId(taskId);
+ if (isSync) {
+ continue;
+ }
+ replayCreateAnalysisTask(analysisInfo);
}
- replayCreateAnalysisTask(analysisInfo);
}
}
@@ -670,7 +680,7 @@ public class AnalysisManager implements Writable {
long catalogId = table.getDatabase().getCatalog().getId();
long dbId = table.getDatabase().getId();
long tableId = table.getId();
- Set<String> cols = table.getBaseSchema().stream().map(Column::getName).collect(Collectors.toSet());
+ Set<String> cols = table.getSchemaAllIndexes(false).stream().map(Column::getName).collect(Collectors.toSet());
invalidateLocalStats(catalogId, dbId, tableId, cols, tableStats);
// Drop stats ddl is master only operation.
invalidateRemoteStats(catalogId, dbId, tableId, cols, true);
@@ -682,14 +692,25 @@ public class AnalysisManager implements Writable {
if (tableStats == null) {
return;
}
+ TableIf table = StatisticsUtil.findTable(catalogId, dbId, tableId);
StatisticsCache statisticsCache = Env.getCurrentEnv().getStatisticsCache();
if (columns == null) {
- TableIf table = StatisticsUtil.findTable(catalogId, dbId, tableId);
- columns = table.getBaseSchema().stream().map(Column::getName).collect(Collectors.toSet());
+ columns = table.getSchemaAllIndexes(false)
+ .stream().map(Column::getName).collect(Collectors.toSet());
}
+
for (String column : columns) {
- tableStats.removeColumn(column);
- statisticsCache.invalidate(tableId, -1, column);
+ List<Long> indexIds = Lists.newArrayList();
+ if (StatisticsUtil.isMvColumn(table, column)) {
+ OlapTable olapTable = (OlapTable) table;
+ indexIds = olapTable.getMvColumnIndexIds(column);
+ } else {
+ indexIds.add(-1L);
+ }
+ for (long indexId : indexIds) {
+ tableStats.removeColumn(column);
+ statisticsCache.invalidate(tableId, indexId, column);
+ }
}
tableStats.updatedTime = 0;
tableStats.userInjected = false;
@@ -1036,6 +1057,10 @@ public class AnalysisManager implements Writable {
return idToAnalysisJob.get(id);
}
+ public AnalysisInfo findJobInfo(long id) {
+ return analysisJobInfoMap.get(id);
+ }
+
public void constructJob(AnalysisInfo jobInfo, Collection<? extends BaseAnalysisTask> tasks) {
AnalysisJob job = new AnalysisJob(jobInfo, tasks);
idToAnalysisJob.put(jobInfo.jobId, job);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/BaseAnalysisTask.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/BaseAnalysisTask.java
index 6a8bc2602e4..5b8f64a5db0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/BaseAnalysisTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/BaseAnalysisTask.java
@@ -63,7 +63,7 @@ public abstract class BaseAnalysisTask {
+ " SUBSTRING(CAST(MAX(`${colName}`) AS STRING), 1, 1024) AS `max`, "
+ " ${dataSizeFunction} AS `data_size`, "
+ " NOW() AS `update_time` "
- + " FROM `${catalogName}`.`${dbName}`.`${tblName}`";
+ + " FROM `${catalogName}`.`${dbName}`.`${tblName}` ${index}";
protected static final String LINEAR_ANALYZE_TEMPLATE = " SELECT "
+ "CONCAT(${tblId}, '-', ${idxId}, '-', '${colId}') AS `id`, "
@@ -80,7 +80,7 @@ public abstract class BaseAnalysisTask {
+ "SUBSTRING(CAST(${max} AS STRING), 1, 1024) AS `max`, "
+ "${dataSizeFunction} * ${scaleFactor} AS `data_size`, "
+ "NOW() "
- + "FROM `${catalogName}`.`${dbName}`.`${tblName}` ${sampleHints} ${limit}";
+ + "FROM `${catalogName}`.`${dbName}`.`${tblName}` ${index} ${sampleHints} ${limit}";
protected static final String DUJ1_ANALYZE_TEMPLATE = "SELECT "
+ "CONCAT('${tblId}', '-', '${idxId}', '-', '${colId}') AS `id`, "
@@ -100,7 +100,7 @@ public abstract class BaseAnalysisTask {
+ "FROM ( "
+ " SELECT t0.`${colName}` as `column_key`, COUNT(1) as `count` "
+ " FROM "
- + " (SELECT `${colName}` FROM `${catalogName}`.`${dbName}`.`${tblName}` "
+ + " (SELECT `${colName}` FROM `${catalogName}`.`${dbName}`.`${tblName}` ${index} "
+ " ${sampleHints} ${limit}) as `t0` "
+ " GROUP BY `t0`.`${colName}` "
+ ") as `t1` ";
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 b9ce541d55f..98c844a046f 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
@@ -164,6 +164,7 @@ public class ExternalAnalysisTask extends BaseAnalysisTask {
commonParams.put("sampleHints", getSampleHint());
commonParams.put("limit", "");
commonParams.put("scaleFactor", "1");
+ commonParams.put("index", "");
if (col != null) {
commonParams.put("type", col.getType().toString());
}
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 f9ac408825d..577dac1c6b6 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
@@ -17,8 +17,11 @@
package org.apache.doris.statistics;
+import org.apache.doris.analysis.CreateMaterializedViewStmt;
+import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.KeysType;
import org.apache.doris.catalog.MaterializedIndex;
+import org.apache.doris.catalog.MaterializedIndexMeta;
import org.apache.doris.catalog.OlapTable;
import org.apache.doris.catalog.Partition;
import org.apache.doris.common.FeConstants;
@@ -49,7 +52,7 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
private static final String BASIC_STATS_TEMPLATE = "SELECT "
+ "SUBSTRING(CAST(MIN(`${colName}`) AS STRING), 1, 1024) as min, "
+ "SUBSTRING(CAST(MAX(`${colName}`) AS STRING), 1, 1024) as max "
- + "FROM `${dbName}`.`${tblName}`";
+ + "FROM `${dbName}`.`${tblName}` ${index}";
@VisibleForTesting
public OlapAnalysisTask() {
@@ -89,13 +92,16 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
Pair<List<Long>, Long> pair = calcActualSampleTablets(tbl.isPartitionColumn(col.getName()));
LOG.info("Number of tablets selected {}, rows in tablets {}", pair.first.size(), pair.second);
List<Long> tabletIds = pair.first;
- double scaleFactor = (double) tbl.getRowCount() / (double) pair.second;
+ long totalRowCount = info.indexId == -1
+ ? tbl.getRowCount()
+ : ((OlapTable) tbl).getRowCountForIndex(info.indexId);
+ double scaleFactor = (double) totalRowCount / (double) pair.second;
// might happen if row count in fe metadata hasn't been updated yet
if (Double.isInfinite(scaleFactor) || Double.isNaN(scaleFactor)) {
LOG.warn("Scale factor is infinite or Nan, will set scale factor to 1.");
scaleFactor = 1;
tabletIds = Collections.emptyList();
- pair.second = tbl.getRowCount();
+ pair.second = totalRowCount;
}
String tabletStr = tabletIds.stream()
.map(Object::toString)
@@ -103,7 +109,6 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
try (AutoCloseConnectContext r = StatisticsUtil.buildConnectContext(info.jobType.equals(JobType.SYSTEM))) {
// Get basic stats, including min and max.
ResultRow basicStats = collectBasicStat(r);
- long rowCount = tbl.getRowCount();
String min = StatisticsUtil.escapeSQL(basicStats != null && basicStats.getValues().size() > 0
? basicStats.get(0) : null);
String max = StatisticsUtil.escapeSQL(basicStats != null && basicStats.getValues().size() > 1
@@ -122,16 +127,17 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
params.put("colId", StatisticsUtil.escapeSQL(String.valueOf(info.colName)));
params.put("dataSizeFunction", getDataSizeFunction(col, false));
params.put("dbName", db.getFullName());
- params.put("colName", info.colName);
+ params.put("colName", StatisticsUtil.escapeColumnName(info.colName));
params.put("tblName", tbl.getName());
params.put("scaleFactor", String.valueOf(scaleFactor));
params.put("sampleHints", tabletStr.isEmpty() ? "" : String.format("TABLET(%s)", tabletStr));
- params.put("ndvFunction", getNdvFunction(String.valueOf(rowCount)));
+ params.put("ndvFunction", getNdvFunction(String.valueOf(totalRowCount)));
params.put("min", StatisticsUtil.quote(min));
params.put("max", StatisticsUtil.quote(max));
- params.put("rowCount", String.valueOf(rowCount));
+ params.put("rowCount", String.valueOf(totalRowCount));
params.put("type", col.getType().toString());
params.put("limit", "");
+ params.put("index", getIndex());
if (needLimit()) {
// If the tablets to be sampled are too large, use limit to control the rows to read, and re-calculate
// the scaleFactor.
@@ -148,7 +154,7 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
if (useLinearAnalyzeTemplate()) {
// For single unique key, use count as ndv.
if (isSingleUniqueKey()) {
- params.put("ndvFunction", String.valueOf(rowCount));
+ params.put("ndvFunction", String.valueOf(totalRowCount));
} else {
params.put("ndvFunction", "ROUND(NDV(`${colName}`) * ${scaleFactor})");
}
@@ -177,8 +183,9 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
}
Map<String, String> params = new HashMap<>();
params.put("dbName", db.getFullName());
- params.put("colName", info.colName);
+ params.put("colName", StatisticsUtil.escapeColumnName(info.colName));
params.put("tblName", tbl.getName());
+ params.put("index", getIndex());
StringSubstitutor stringSubstitutor = new StringSubstitutor(params);
stmtExecutor = new StmtExecutor(context.connectContext, stringSubstitutor.replace(BASIC_STATS_TEMPLATE));
return stmtExecutor.executeInternalQuery().get(0);
@@ -202,14 +209,24 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
params.put("dataSizeFunction", getDataSizeFunction(col, false));
params.put("catalogName", catalog.getName());
params.put("dbName", db.getFullName());
- params.put("colName", String.valueOf(info.colName));
+ params.put("colName", StatisticsUtil.escapeColumnName(String.valueOf(info.colName)));
params.put("tblName", String.valueOf(tbl.getName()));
+ params.put("index", getIndex());
StringSubstitutor stringSubstitutor = new StringSubstitutor(params);
String collectColStats = stringSubstitutor.replace(COLLECT_COL_STATISTICS);
runQuery(collectColStats);
}
- // Get sample tablets id and scale up scaleFactor
+ protected String getIndex() {
+ if (info.indexId == -1) {
+ return "";
+ } else {
+ OlapTable olapTable = (OlapTable) this.tbl;
+ return "index `" + olapTable.getIndexNameById(info.indexId) + "`";
+ }
+ }
+
+ // Get sample tablets id and sample row count
protected Pair<List<Long>, Long> calcActualSampleTablets(boolean forPartitionColumn) {
// Below code copied from OlapScanNode.java
long sampleRows; // The total number of sample rows
@@ -224,8 +241,11 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
long actualSampledRowCount = 0;
boolean enough = false;
for (Partition p : olapTable.getPartitions()) {
- List<Long> ids = p.getBaseIndex().getTabletIdsInOrder();
-
+ MaterializedIndex materializedIndex = info.indexId == -1 ? p.getBaseIndex() : p.getIndex(info.indexId);
+ if (materializedIndex == null) {
+ continue;
+ }
+ List<Long> ids = materializedIndex.getTabletIdsInOrder();
if (ids.isEmpty()) {
continue;
}
@@ -233,11 +253,10 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
// Skip partitions with row count < row count / 2 expected to be sampled per partition.
// It can be expected to sample a smaller number of partitions to avoid uneven distribution
// of sampling results.
- if (p.getBaseIndex().getRowCount() < (avgRowsPerPartition / 2)) {
+ if (materializedIndex.getRowCount() < (avgRowsPerPartition / 2)) {
continue;
}
- MaterializedIndex baseIndex = p.getBaseIndex();
- long avgRowsPerTablet = Math.max(baseIndex.getRowCount() / ids.size(), 1);
+ long avgRowsPerTablet = Math.max(materializedIndex.getRowCount() / ids.size(), 1);
long tabletCounts = Math.max(
avgRowsPerPartition / avgRowsPerTablet + (avgRowsPerPartition % avgRowsPerTablet != 0 ? 1 : 0), 1);
tabletCounts = Math.min(tabletCounts, ids.size());
@@ -247,13 +266,13 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
int seekTid = (int) ((i + seek) % ids.size());
long tabletId = ids.get(seekTid);
sampleTabletIds.add(tabletId);
- actualSampledRowCount += baseIndex.getTablet(tabletId).getRowCount(true);
+ actualSampledRowCount += materializedIndex.getTablet(tabletId).getRowCount(true);
if (actualSampledRowCount >= sampleRows && !forPartitionColumn) {
enough = true;
break;
}
}
- totalRows += p.getBaseIndex().getRowCount();
+ totalRows += materializedIndex.getRowCount();
totalTablet += ids.size();
if (enough) {
break;
@@ -308,8 +327,12 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
if (isSingleUniqueKey()) {
return true;
}
+ String columnName = col.getName();
+ if (columnName.startsWith(CreateMaterializedViewStmt.MATERIALIZED_VIEW_NAME_PREFIX)) {
+ columnName = columnName.substring(CreateMaterializedViewStmt.MATERIALIZED_VIEW_NAME_PREFIX.length());
+ }
Set<String> distributionColumns = tbl.getDistributionColumnNames();
- return distributionColumns.size() == 1 && distributionColumns.contains(col.getName().toLowerCase());
+ return distributionColumns.size() == 1 && distributionColumns.contains(columnName.toLowerCase());
}
/**
@@ -317,8 +340,25 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
* @return True if the table has a single unique/agg key. False otherwise.
*/
protected boolean isSingleUniqueKey() {
- int keysNum = ((OlapTable) tbl).getKeysNum();
- KeysType keysType = ((OlapTable) tbl).getKeysType();
+ OlapTable olapTable = (OlapTable) this.tbl;
+ List<Column> schema;
+ KeysType keysType;
+ if (info.indexId == -1) {
+ schema = olapTable.getBaseSchema();
+ keysType = olapTable.getKeysType();
+ } else {
+ MaterializedIndexMeta materializedIndexMeta = olapTable.getIndexIdToMeta().get(info.indexId);
+ schema = materializedIndexMeta.getSchema();
+ keysType = materializedIndexMeta.getKeysType();
+ }
+
+ int keysNum = 0;
+ for (Column column : schema) {
+ if (column.isKey()) {
+ keysNum += 1;
+ }
+ }
+
return col.isKey()
&& keysNum == 1
&& (keysType.equals(KeysType.UNIQUE_KEYS) || keysType.equals(KeysType.AGG_KEYS));
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapScanStatsDerive.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapScanStatsDerive.java
index 7833da4b58b..b65678d1859 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapScanStatsDerive.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapScanStatsDerive.java
@@ -62,9 +62,11 @@ public class OlapScanStatsDerive extends BaseStatsDerive {
double rowCount = table.estimatedRowCount();
for (Map.Entry<Id, String> entry : slotIdToTableIdAndColumnName.entrySet()) {
String colName = entry.getValue();
+ // TODO. Get index id for materialized view.
ColumnStatistic statistic =
Env.getCurrentEnv().getStatisticsCache().getColumnStatistics(
- table.getDatabase().getCatalog().getId(), table.getDatabase().getId(), table.getId(), colName);
+ table.getDatabase().getCatalog().getId(),
+ table.getDatabase().getId(), table.getId(), -1, colName);
if (!statistic.isUnKnown) {
rowCount = statistic.count;
}
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 a09b56acfcc..d69ea0cf43f 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
@@ -187,8 +187,9 @@ public class StatisticsAutoCollector extends StatisticsCollector {
.setDBId(db.getId())
.setTblId(table.getId())
.setColName(
- table.getBaseSchema().stream().filter(c -> !StatisticsUtil.isUnsupportedType(c.getType()))
- .map(Column::getName).collect(Collectors.joining(","))
+ table.getSchemaAllIndexes(false).stream()
+ .filter(c -> !StatisticsUtil.isUnsupportedType(c.getType()))
+ .map(Column::getName).collect(Collectors.joining(","))
)
.setAnalysisType(AnalysisInfo.AnalysisType.FUNDAMENTALS)
.setAnalysisMode(AnalysisInfo.AnalysisMode.INCREMENTAL)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsCache.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsCache.java
index 73eaaaff1c8..20f25eb3e96 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsCache.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsCache.java
@@ -90,26 +90,21 @@ public class StatisticsCache {
});
}
- public ColumnStatistic getColumnStatistics(long catalogId, long dbId, long tblId, String colName) {
- return getColumnStatistics(catalogId, dbId, tblId, -1, colName).orElse(ColumnStatistic.UNKNOWN);
- }
-
- public Optional<ColumnStatistic> getColumnStatistics(long catalogId, long dbId,
- long tblId, long idxId, String colName) {
+ public ColumnStatistic getColumnStatistics(long catalogId, long dbId, long tblId, long idxId, String colName) {
ConnectContext ctx = ConnectContext.get();
if (ctx != null && ctx.getSessionVariable().internalSession) {
- return Optional.empty();
+ return ColumnStatistic.UNKNOWN;
}
StatisticsCacheKey k = new StatisticsCacheKey(catalogId, dbId, tblId, idxId, colName);
try {
CompletableFuture<Optional<ColumnStatistic>> f = columnStatisticsCache.get(k);
if (f.isDone()) {
- return f.get();
+ return f.get().orElse(ColumnStatistic.UNKNOWN);
}
} catch (Exception e) {
LOG.warn("Unexpected exception while returning ColumnStatistic", e);
}
- return Optional.empty();
+ return ColumnStatistic.UNKNOWN;
}
public Histogram getHistogram(long tblId, String colName) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsCacheKey.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsCacheKey.java
index e254adf4e9b..055dd128bef 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsCacheKey.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsCacheKey.java
@@ -41,18 +41,10 @@ public class StatisticsCacheKey {
private static final String DELIMITER = "-";
- public StatisticsCacheKey(long tableId, String colName) {
- this(tableId, -1, colName);
- }
-
public StatisticsCacheKey(long tableId, long idxId, String colName) {
this(-1, -1, tableId, idxId, colName);
}
- public StatisticsCacheKey(long catalogId, long dbId, long tableId) {
- this(catalogId, dbId, tableId, -1, "");
- }
-
public StatisticsCacheKey(long catalogId, long dbId, long tableId, long idxId, String colName) {
this.catalogId = catalogId;
this.dbId = dbId;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsCleaner.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsCleaner.java
index 3a142351a28..2879991c925 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsCleaner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsCleaner.java
@@ -231,7 +231,7 @@ public class StatisticsCleaner extends MasterDaemon {
TableIf t = idToTbl.get(tblId);
String colId = statsId.colId;
- if (t.getColumn(colId) == null) {
+ if (!StatisticsUtil.isMvColumn(t, colId) && t.getColumn(colId) == null) {
expiredStats.ids.add(id);
continue;
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java
index b406faa4be1..92ff3cd42b4 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java
@@ -102,8 +102,8 @@ public class StatisticsRepository {
+ " ${inPredicate}"
+ " AND part_id IS NOT NULL";
- public static ColumnStatistic queryColumnStatisticsByName(long tableId, String colName) {
- ResultRow resultRow = queryColumnStatisticById(tableId, colName);
+ public static ColumnStatistic queryColumnStatisticsByName(long tableId, long indexId, String colName) {
+ ResultRow resultRow = queryColumnStatisticById(tableId, indexId, colName);
if (resultRow == null) {
return ColumnStatistic.UNKNOWN;
}
@@ -126,17 +126,17 @@ public class StatisticsRepository {
Collectors.toList());
}
- public static ResultRow queryColumnStatisticById(long tblId, String colName) {
- return queryColumnStatisticById(tblId, colName, false);
+ public static ResultRow queryColumnStatisticById(long tblId, long indexId, String colName) {
+ return queryColumnStatisticById(tblId, indexId, colName, false);
}
- public static ResultRow queryColumnHistogramById(long tblId, String colName) {
- return queryColumnStatisticById(tblId, colName, true);
+ public static ResultRow queryColumnHistogramById(long tblId, long indexId, String colName) {
+ return queryColumnStatisticById(tblId, indexId, colName, true);
}
- private static ResultRow queryColumnStatisticById(long tblId, String colName, boolean isHistogram) {
+ private static ResultRow queryColumnStatisticById(long tblId, long indexId, String colName, boolean isHistogram) {
Map<String, String> map = new HashMap<>();
- String id = constructId(tblId, -1, colName);
+ String id = constructId(tblId, indexId, colName);
map.put("id", StatisticsUtil.escapeSQL(id));
List<ResultRow> rows = isHistogram ? StatisticsUtil.executeQuery(FETCH_COLUMN_HISTOGRAM_TEMPLATE, map) :
StatisticsUtil.executeQuery(FETCH_COLUMN_STATISTIC_TEMPLATE, map);
@@ -158,8 +158,8 @@ public class StatisticsRepository {
return rows == null ? Collections.emptyList() : rows;
}
- public static Histogram queryColumnHistogramByName(long tableId, String colName) {
- ResultRow resultRow = queryColumnHistogramById(tableId, colName);
+ public static Histogram queryColumnHistogramByName(long tableId, long indexId, String colName) {
+ ResultRow resultRow = queryColumnHistogramById(tableId, indexId, colName);
if (resultRow == null) {
return Histogram.UNKNOWN;
}
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 65c4800c585..50dd416cc21 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
@@ -19,6 +19,7 @@ package org.apache.doris.statistics.util;
import org.apache.doris.analysis.Analyzer;
import org.apache.doris.analysis.BoolLiteral;
+import org.apache.doris.analysis.CreateMaterializedViewStmt;
import org.apache.doris.analysis.DateLiteral;
import org.apache.doris.analysis.DecimalLiteral;
import org.apache.doris.analysis.FloatLiteral;
@@ -808,6 +809,13 @@ public class StatisticsUtil {
.replace("\\", "\\\\");
}
+ public static String escapeColumnName(String str) {
+ if (str == null) {
+ return null;
+ }
+ return str.replace("`", "``");
+ }
+
public static boolean isExternalTable(String catalogName, String dbName, String tblName) {
TableIf table;
try {
@@ -981,4 +989,16 @@ public class StatisticsUtil {
}
}
+ /**
+ * Check if the given column name is a materialized view column.
+ * @param table
+ * @param columnName
+ * @return True for mv column.
+ */
+ public static boolean isMvColumn(TableIf table, String columnName) {
+ return table instanceof OlapTable
+ && columnName.startsWith(CreateMaterializedViewStmt.MATERIALIZED_VIEW_NAME_PREFIX)
+ || columnName.startsWith(CreateMaterializedViewStmt.MATERIALIZED_VIEW_AGGREGATE_NAME_PREFIX);
+ }
+
}
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 6b3b09c4968..93ec2770c8e 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
@@ -78,10 +78,10 @@ public class CacheTest extends TestWithFeService {
}
};
StatisticsCache statisticsCache = new StatisticsCache();
- ColumnStatistic c = statisticsCache.getColumnStatistics(-1, -1, 1, "col");
+ ColumnStatistic c = statisticsCache.getColumnStatistics(-1, -1, 1, -1, "col");
Assertions.assertTrue(c.isUnKnown);
Thread.sleep(100);
- c = statisticsCache.getColumnStatistics(-1, -1, 1, "col");
+ c = statisticsCache.getColumnStatistics(-1, -1, 1, -1, "col");
Assertions.assertTrue(c.isUnKnown);
}
@@ -105,13 +105,13 @@ public class CacheTest extends TestWithFeService {
}
};
StatisticsCache statisticsCache = new StatisticsCache();
- ColumnStatistic columnStatistic = statisticsCache.getColumnStatistics(-1, -1, 0, "col");
+ ColumnStatistic columnStatistic = statisticsCache.getColumnStatistics(-1, -1, 0, -1, "col");
// load not finished yet, should return unknown
Assertions.assertTrue(columnStatistic.isUnKnown);
// wait 1 sec to ensure `execStatisticQuery` is finished as much as possible.
Thread.sleep(1000);
// load has finished, return corresponding stats.
- columnStatistic = statisticsCache.getColumnStatistics(-1, -1, 0, "col");
+ columnStatistic = statisticsCache.getColumnStatistics(-1, -1, 0, -1, "col");
Assertions.assertEquals(7, columnStatistic.count);
Assertions.assertEquals(8, columnStatistic.ndv);
Assertions.assertEquals(11, columnStatistic.maxValue);
@@ -248,9 +248,9 @@ public class CacheTest extends TestWithFeService {
try {
StatisticsCache statisticsCache = new StatisticsCache();
- ColumnStatistic columnStatistic = statisticsCache.getColumnStatistics(1, 1, 1, "col");
+ ColumnStatistic columnStatistic = statisticsCache.getColumnStatistics(1, 1, 1, -1, "col");
Thread.sleep(3000);
- columnStatistic = statisticsCache.getColumnStatistics(1, 1, 1, "col");
+ columnStatistic = statisticsCache.getColumnStatistics(1, 1, 1, -1, "col");
Assertions.assertEquals(1, columnStatistic.count);
Assertions.assertEquals(2, columnStatistic.ndv);
Assertions.assertEquals(3, columnStatistic.avgSizeByte);
diff --git a/fe/fe-core/src/test/java/org/apache/doris/statistics/HMSAnalysisTaskTest.java b/fe/fe-core/src/test/java/org/apache/doris/statistics/HMSAnalysisTaskTest.java
index e1016864525..c8b42fcb343 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/statistics/HMSAnalysisTaskTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/statistics/HMSAnalysisTaskTest.java
@@ -235,7 +235,7 @@ public class HMSAnalysisTaskTest {
+ " SUBSTRING(CAST(MAX(`hour`) AS STRING), 1, 1024) AS `max`,"
+ " COUNT(1) * 4 AS `data_size`,"
+ " NOW() AS `update_time`"
- + " FROM `hms`.`default`.`test`", sql);
+ + " FROM `hms`.`default`.`test` ", sql);
}
};
diff --git a/fe/fe-core/src/test/java/org/apache/doris/statistics/OlapAnalysisTaskTest.java b/fe/fe-core/src/test/java/org/apache/doris/statistics/OlapAnalysisTaskTest.java
index fe695ecebce..5d9d57406a3 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/statistics/OlapAnalysisTaskTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/statistics/OlapAnalysisTaskTest.java
@@ -162,7 +162,7 @@ public class OlapAnalysisTaskTest {
+ "SUM(LENGTH(`column_key`) * count) * 5.0 AS `data_size`, NOW() "
+ "FROM ( SELECT t0.`${colName}` as `column_key`, COUNT(1) "
+ "as `count` FROM (SELECT `${colName}` FROM "
- + "`catalogName`.`${dbName}`.`${tblName}` "
+ + "`catalogName`.`${dbName}`.`${tblName}` "
+ " limit 100) as `t0` GROUP BY `t0`.`${colName}` ) as `t1` ", sql);
return;
}
@@ -238,7 +238,7 @@ public class OlapAnalysisTaskTest {
+ "AS `null_count`, SUBSTRING(CAST('1' AS STRING), 1, 1024) AS `min`, "
+ "SUBSTRING(CAST('2' AS STRING), 1, 1024) AS `max`, "
+ "SUM(LENGTH(`${colName}`)) * 5.0 AS `data_size`, NOW() "
- + "FROM `catalogName`.`${dbName}`.`${tblName}` limit 100", sql);
+ + "FROM `catalogName`.`${dbName}`.`${tblName}` limit 100", sql);
return;
}
};
@@ -322,7 +322,7 @@ public class OlapAnalysisTaskTest {
+ "SUBSTRING(CAST('1' AS STRING), 1, 1024) AS `min`, "
+ "SUBSTRING(CAST('2' AS STRING), 1, 1024) AS `max`, "
+ "SUM(LENGTH(`column_key`) * count) * 5.0 AS `data_size`, NOW() "
- + "FROM ( SELECT t0.`${colName}` as `column_key`, COUNT(1) as `count` FROM (SELECT `${colName}` FROM `catalogName`.`${dbName}`.`${tblName}` limit 100) as `t0` GROUP BY `t0`.`${colName}` ) as `t1` ", sql);
+ + "FROM ( SELECT t0.`${colName}` as `column_key`, COUNT(1) as `count` FROM (SELECT `${colName}` FROM `catalogName`.`${dbName}`.`${tblName}` limit 100) as `t0` GROUP BY `t0`.`${colName}` ) as `t1` ", sql);
return;
}
};
diff --git a/fe/fe-core/src/test/java/org/apache/doris/statistics/StatisticsAutoCollectorTest.java b/fe/fe-core/src/test/java/org/apache/doris/statistics/StatisticsAutoCollectorTest.java
index 2455581c29c..a85a1e5f1d9 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/statistics/StatisticsAutoCollectorTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/statistics/StatisticsAutoCollectorTest.java
@@ -38,6 +38,8 @@ import org.apache.doris.statistics.AnalysisInfo.JobType;
import org.apache.doris.statistics.util.StatisticsUtil;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
import mockit.Expectations;
import mockit.Injectable;
import mockit.Mock;
@@ -131,7 +133,7 @@ public class StatisticsAutoCollectorTest {
}
@Mock
- public List<Column> getBaseSchema() {
+ public List<Column> getSchemaAllIndexes(boolean full) {
List<Column> columns = new ArrayList<>();
columns.add(new Column("c1", PrimitiveType.INT));
columns.add(new Column("c2", PrimitiveType.HLL));
@@ -139,10 +141,9 @@ public class StatisticsAutoCollectorTest {
}
};
StatisticsAutoCollector saa = new StatisticsAutoCollector();
- List<AnalysisInfo> analysisInfos =
- saa.constructAnalysisInfo(new Database(1, "anydb"));
- Assertions.assertEquals(1, analysisInfos.size());
- Assertions.assertEquals("c1", analysisInfos.get(0).colName.split(",")[0]);
+ List<AnalysisInfo> analysisInfoList = saa.constructAnalysisInfo(new Database(1, "anydb"));
+ Assertions.assertEquals(1, analysisInfoList.size());
+ Assertions.assertEquals("c1", analysisInfoList.get(0).colName.split(",")[0]);
}
@Test
@@ -243,6 +244,16 @@ public class StatisticsAutoCollectorTest {
return thresholds[count++];
}
};
+
+ new MockUp<OlapTable>() {
+ @Mock
+ public Map<String, Set<String>> findReAnalyzeNeededPartitions() {
+ HashMap<String, Set<String>> ret = Maps.newHashMap();
+ ret.put("key1", Sets.newHashSet());
+ return ret;
+ }
+ };
+
AnalysisInfo analysisInfo = new AnalysisInfoBuilder().build();
StatisticsAutoCollector statisticsAutoCollector = new StatisticsAutoCollector();
Assertions.assertNull(statisticsAutoCollector.getReAnalyzeRequiredPart(analysisInfo));
diff --git a/regression-test/suites/external_table_p0/hive/test_hive_statistics_all_type_p0.groovy b/regression-test/suites/external_table_p0/hive/test_hive_statistics_all_type_p0.groovy
index 741103b3ecf..a37a5535116 100644
--- a/regression-test/suites/external_table_p0/hive/test_hive_statistics_all_type_p0.groovy
+++ b/regression-test/suites/external_table_p0/hive/test_hive_statistics_all_type_p0.groovy
@@ -35,101 +35,101 @@ suite("test_hive_statistics_all_type_p0", "all_types,p0,external,hive,external_d
result = sql """show column stats orc_all_types (int_col);"""
assertEquals("int_col", result[0][0])
- assertEquals("3600.0", result[0][1])
- assertEquals("3256.0", result[0][2])
- assertEquals("361.0", result[0][3])
- assertEquals("14400.0", result[0][4])
+ assertEquals("3600.0", result[0][2])
+ assertEquals("3256.0", result[0][3])
+ assertEquals("361.0", result[0][4])
+ assertEquals("14400.0", result[0][5])
result = sql """show column stats orc_all_types (char_col);"""
assertEquals("char_col", result[0][0])
- assertEquals("3600.0", result[0][1])
- assertEquals("3.0", result[0][2])
- assertEquals("0.0", result[0][3])
- assertEquals("25273.0", result[0][4])
+ assertEquals("3600.0", result[0][2])
+ assertEquals("3.0", result[0][3])
+ assertEquals("0.0", result[0][4])
+ assertEquals("25273.0", result[0][5])
result = sql """show column stats orc_all_types (binary_col);"""
assertEquals("binary_col", result[0][0])
- assertEquals("3600.0", result[0][1])
- assertEquals("3240.0", result[0][2])
- assertEquals("362.0", result[0][3])
- assertEquals("85788.0", result[0][4])
+ assertEquals("3600.0", result[0][2])
+ assertEquals("3240.0", result[0][3])
+ assertEquals("362.0", result[0][4])
+ assertEquals("85788.0", result[0][5])
result = sql """show column stats orc_all_types (bigint_col);"""
assertEquals("bigint_col", result[0][0])
- assertEquals("3600.0", result[0][1])
- assertEquals("3209.0", result[0][2])
- assertEquals("377.0", result[0][3])
- assertEquals("28800.0", result[0][4])
+ assertEquals("3600.0", result[0][2])
+ assertEquals("3209.0", result[0][3])
+ assertEquals("377.0", result[0][4])
+ assertEquals("28800.0", result[0][5])
result = sql """show column stats orc_all_types (boolean_col);"""
assertEquals("boolean_col", result[0][0])
- assertEquals("3600.0", result[0][1])
- assertEquals("2.0", result[0][2])
- assertEquals("369.0", result[0][3])
- assertEquals("3600.0", result[0][4])
+ assertEquals("3600.0", result[0][2])
+ assertEquals("2.0", result[0][3])
+ assertEquals("369.0", result[0][4])
+ assertEquals("3600.0", result[0][5])
result = sql """show column stats orc_all_types (date_col);"""
assertEquals("date_col", result[0][0])
- assertEquals("3600.0", result[0][1])
- assertEquals("2148.0", result[0][2])
- assertEquals("378.0", result[0][3])
- assertEquals("14400.0", result[0][4])
+ assertEquals("3600.0", result[0][2])
+ assertEquals("2148.0", result[0][3])
+ assertEquals("378.0", result[0][4])
+ assertEquals("14400.0", result[0][5])
result = sql """show column stats orc_all_types (float_col);"""
assertEquals("float_col", result[0][0])
- assertEquals("3600.0", result[0][1])
- assertEquals("3274.0", result[0][2])
- assertEquals("340.0", result[0][3])
- assertEquals("14400.0", result[0][4])
+ assertEquals("3600.0", result[0][2])
+ assertEquals("3274.0", result[0][3])
+ assertEquals("340.0", result[0][4])
+ assertEquals("14400.0", result[0][5])
result = sql """show column stats orc_all_types (string_col);"""
assertEquals("string_col", result[0][0])
- assertEquals("3600.0", result[0][1])
- assertEquals("3261.0", result[0][2])
- assertEquals("347.0", result[0][3])
- assertEquals("453634.0", result[0][4])
+ assertEquals("3600.0", result[0][2])
+ assertEquals("3261.0", result[0][3])
+ assertEquals("347.0", result[0][4])
+ assertEquals("453634.0", result[0][5])
result = sql """show column stats orc_all_types (varchar_col);"""
assertEquals("varchar_col", result[0][0])
- assertEquals("3600.0", result[0][1])
- assertEquals("6.0", result[0][2])
- assertEquals("0.0", result[0][3])
- assertEquals("35950.0", result[0][4])
+ assertEquals("3600.0", result[0][2])
+ assertEquals("6.0", result[0][3])
+ assertEquals("0.0", result[0][4])
+ assertEquals("35950.0", result[0][5])
result = sql """show column stats orc_all_types (smallint_col);"""
assertEquals("smallint_col", result[0][0])
- assertEquals("3600.0", result[0][1])
- assertEquals("90.0", result[0][2])
- assertEquals("359.0", result[0][3])
- assertEquals("7200.0", result[0][4])
+ assertEquals("3600.0", result[0][2])
+ assertEquals("90.0", result[0][3])
+ assertEquals("359.0", result[0][4])
+ assertEquals("7200.0", result[0][5])
result = sql """show column stats orc_all_types (timestamp_col);"""
assertEquals("timestamp_col", result[0][0])
- assertEquals("3600.0", result[0][1])
- assertEquals("3243.0", result[0][2])
- assertEquals("339.0", result[0][3])
- assertEquals("28800.0", result[0][4])
+ assertEquals("3600.0", result[0][2])
+ assertEquals("3243.0", result[0][3])
+ assertEquals("339.0", result[0][4])
+ assertEquals("28800.0", result[0][5])
result = sql """show column stats orc_all_types (tinyint_col);"""
assertEquals("tinyint_col", result[0][0])
- assertEquals("3600.0", result[0][1])
- assertEquals("9.0", result[0][2])
- assertEquals("366.0", result[0][3])
- assertEquals("3600.0", result[0][4])
+ assertEquals("3600.0", result[0][2])
+ assertEquals("9.0", result[0][3])
+ assertEquals("366.0", result[0][4])
+ assertEquals("3600.0", result[0][5])
result = sql """show column stats orc_all_types (double_col);"""
assertEquals("double_col", result[0][0])
- assertEquals("3600.0", result[0][1])
- assertEquals("3200.0", result[0][2])
- assertEquals("395.0", result[0][3])
- assertEquals("28800.0", result[0][4])
+ assertEquals("3600.0", result[0][2])
+ assertEquals("3200.0", result[0][3])
+ assertEquals("395.0", result[0][4])
+ assertEquals("28800.0", result[0][5])
result = sql """show column stats orc_all_types (decimal_col);"""
assertEquals("decimal_col", result[0][0])
- assertEquals("3600.0", result[0][1])
- assertEquals("3218.0", result[0][2])
- assertEquals("367.0", result[0][3])
- assertEquals("28800.0", result[0][4])
+ assertEquals("3600.0", result[0][2])
+ assertEquals("3218.0", result[0][3])
+ assertEquals("367.0", result[0][4])
+ assertEquals("28800.0", result[0][5])
sql """drop catalog if exists ${catalog_name}"""
} finally {
diff --git a/regression-test/suites/external_table_p0/hive/test_hive_statistics_p0.groovy b/regression-test/suites/external_table_p0/hive/test_hive_statistics_p0.groovy
index ec96eb0560f..09fc1809604 100644
--- a/regression-test/suites/external_table_p0/hive/test_hive_statistics_p0.groovy
+++ b/regression-test/suites/external_table_p0/hive/test_hive_statistics_p0.groovy
@@ -59,62 +59,62 @@ suite("test_hive_statistics_p0", "all_types,p0,external,hive,external_docker,ext
result = sql """show column stats stats_test1(id);"""
assertEquals(1, result.size())
assertEquals("id", result[0][0])
- assertEquals("3.0", result[0][1])
assertEquals("3.0", result[0][2])
- assertEquals("0.0", result[0][3])
- assertEquals("12.0", result[0][4])
- assertEquals("4.0", result[0][5])
- assertEquals("1", result[0][6])
- assertEquals("3", result[0][7])
- assertEquals("FULL" , result[0][8])
- assertEquals("FUNDAMENTALS" , result[0][9])
- assertEquals("MANUAL" , result[0][10])
- assertEquals("0" , result[0][11])
+ assertEquals("3.0", result[0][3])
+ assertEquals("0.0", result[0][4])
+ assertEquals("12.0", result[0][5])
+ assertEquals("4.0", result[0][6])
+ assertEquals("1", result[0][7])
+ assertEquals("3", result[0][8])
+ assertEquals("FULL" , result[0][9])
+ assertEquals("FUNDAMENTALS" , result[0][10])
+ assertEquals("MANUAL" , result[0][11])
+ assertEquals("0" , result[0][12])
result = sql """show column stats stats_test1(value);"""
assertEquals(1, result.size())
assertEquals("value", result[0][0])
- assertEquals("3.0", result[0][1])
assertEquals("3.0", result[0][2])
- assertEquals("0.0", result[0][3])
- assertEquals("15.0", result[0][4])
- assertEquals("5.0", result[0][5])
- assertEquals("\'name1\'" , result[0][6])
- assertEquals("\'name3\'" , result[0][7])
- assertEquals("FULL" , result[0][8])
- assertEquals("FUNDAMENTALS" , result[0][9])
- assertEquals("MANUAL" , result[0][10])
- assertEquals("0" , result[0][11])
+ assertEquals("3.0", result[0][3])
+ assertEquals("0.0", result[0][4])
+ assertEquals("15.0", result[0][5])
+ assertEquals("5.0", result[0][6])
+ assertEquals("\'name1\'" , result[0][7])
+ assertEquals("\'name3\'" , result[0][8])
+ assertEquals("FULL" , result[0][9])
+ assertEquals("FUNDAMENTALS" , result[0][10])
+ assertEquals("MANUAL" , result[0][11])
+ assertEquals("0" , result[0][12])
result = sql """show column stats stats_test2(id);"""
assertEquals(1, result.size())
assertEquals("id", result[0][0])
- assertEquals("2.0", result[0][1])
assertEquals("2.0", result[0][2])
- assertEquals("0.0", result[0][3])
- assertEquals("8.0", result[0][4])
- assertEquals("4.0", result[0][5])
- assertEquals("1", result[0][6])
- assertEquals("2", result[0][7])
- assertEquals("FULL" , result[0][8])
- assertEquals("FUNDAMENTALS" , result[0][9])
- assertEquals("MANUAL" , result[0][10])
- assertEquals("0" , result[0][11])
+ assertEquals("2.0", result[0][3])
+ assertEquals("0.0", result[0][4])
+ assertEquals("8.0", result[0][5])
+ assertEquals("4.0", result[0][6])
+ assertEquals("1", result[0][7])
+ assertEquals("2", result[0][8])
+ assertEquals("FULL" , result[0][9])
+ assertEquals("FUNDAMENTALS" , result[0][10])
+ assertEquals("MANUAL" , result[0][11])
+ assertEquals("0" , result[0][12])
result = sql """show column stats stats_test2(value);"""
assertEquals(1, result.size())
assertEquals("value", result[0][0])
- assertEquals("2.0", result[0][1])
assertEquals("2.0", result[0][2])
- assertEquals("0.0", result[0][3])
- assertEquals("2.0", result[0][4])
- assertEquals("1.0", result[0][5])
- assertEquals("\'*\'", result[0][6])
- assertEquals("\';\'", result[0][7])
- assertEquals("FULL" , result[0][8])
- assertEquals("FUNDAMENTALS" , result[0][9])
- assertEquals("MANUAL" , result[0][10])
- assertEquals("0" , result[0][11])
+ assertEquals("2.0", result[0][3])
+ assertEquals("0.0", result[0][4])
+ assertEquals("2.0", result[0][5])
+ assertEquals("1.0", result[0][6])
+ assertEquals("\'*\'", result[0][7])
+ assertEquals("\';\'", result[0][8])
+ assertEquals("FULL" , result[0][9])
+ assertEquals("FUNDAMENTALS" , result[0][10])
+ assertEquals("MANUAL" , result[0][11])
+ assertEquals("0" , result[0][12])
sql """drop catalog if exists ${catalog_name}"""
@@ -127,17 +127,17 @@ suite("test_hive_statistics_p0", "all_types,p0,external,hive,external_docker,ext
result = sql """show column stats stats_test1(value);"""
assertEquals(1, result.size())
assertEquals("value", result[0][0])
- assertEquals("3.0", result[0][1])
assertEquals("3.0", result[0][2])
- assertEquals("0.0", result[0][3])
- assertEquals("15.0", result[0][4])
- assertEquals("5.0", result[0][5])
- assertEquals("\'name1\'" , result[0][6])
- assertEquals("\'name3\'" , result[0][7])
- assertEquals("FULL" , result[0][8])
- assertEquals("FUNDAMENTALS" , result[0][9])
- assertEquals("MANUAL" , result[0][10])
- assertEquals("0" , result[0][11])
+ assertEquals("3.0", result[0][3])
+ assertEquals("0.0", result[0][4])
+ assertEquals("15.0", result[0][5])
+ assertEquals("5.0", result[0][6])
+ assertEquals("\'name1\'" , result[0][7])
+ assertEquals("\'name3\'" , result[0][8])
+ assertEquals("FULL" , result[0][9])
+ assertEquals("FUNDAMENTALS" , result[0][10])
+ assertEquals("MANUAL" , result[0][11])
+ assertEquals("0" , result[0][12])
result = sql """show column stats stats_test1(id);"""
assertEquals(0, result.size())
@@ -146,72 +146,72 @@ suite("test_hive_statistics_p0", "all_types,p0,external,hive,external_docker,ext
result = sql """show column stats stats_test1(id);"""
assertEquals(1, result.size())
assertEquals("id", result[0][0])
- assertEquals("3.0", result[0][1])
assertEquals("3.0", result[0][2])
- assertEquals("0.0", result[0][3])
- assertEquals("12.0", result[0][4])
- assertEquals("4.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("3.0", result[0][3])
+ assertEquals("0.0", result[0][4])
+ assertEquals("12.0", result[0][5])
+ assertEquals("4.0", result[0][6])
assertEquals("N/A", result[0][7])
- assertEquals("SAMPLE" , result[0][8])
- assertEquals("FUNDAMENTALS" , result[0][9])
- assertEquals("MANUAL" , result[0][10])
- assertEquals("0" , result[0][11])
+ assertEquals("N/A", result[0][8])
+ assertEquals("SAMPLE" , result[0][9])
+ assertEquals("FUNDAMENTALS" , result[0][10])
+ assertEquals("MANUAL" , result[0][11])
+ assertEquals("0" , result[0][12])
sql """analyze table stats_test2 with sync;"""
result = sql """show column stats stats_test2(id);"""
assertEquals(1, result.size())
assertEquals("id", result[0][0])
- assertEquals("2.0", result[0][1])
assertEquals("2.0", result[0][2])
- assertEquals("0.0", result[0][3])
- assertEquals("8.0", result[0][4])
- assertEquals("4.0", result[0][5])
- assertEquals("1", result[0][6])
- assertEquals("2", result[0][7])
- assertEquals("FULL" , result[0][8])
- assertEquals("FUNDAMENTALS" , result[0][9])
- assertEquals("MANUAL" , result[0][10])
- assertEquals("0" , result[0][11])
+ assertEquals("2.0", result[0][3])
+ assertEquals("0.0", result[0][4])
+ assertEquals("8.0", result[0][5])
+ assertEquals("4.0", result[0][6])
+ assertEquals("1", result[0][7])
+ assertEquals("2", result[0][8])
+ assertEquals("FULL" , result[0][9])
+ assertEquals("FUNDAMENTALS" , result[0][10])
+ assertEquals("MANUAL" , result[0][11])
+ assertEquals("0" , result[0][12])
result = sql """show column stats stats_test2(value);"""
assertEquals(1, result.size())
assertEquals("value", result[0][0])
- assertEquals("2.0", result[0][1])
assertEquals("2.0", result[0][2])
- assertEquals("0.0", result[0][3])
- assertEquals("2.0", result[0][4])
- assertEquals("1.0", result[0][5])
- assertEquals("\'*\'", result[0][6])
- assertEquals("\';\'", result[0][7])
- assertEquals("FULL" , result[0][8])
- assertEquals("FUNDAMENTALS" , result[0][9])
- assertEquals("MANUAL" , result[0][10])
- assertEquals("0" , result[0][11])
+ assertEquals("2.0", result[0][3])
+ assertEquals("0.0", result[0][4])
+ assertEquals("2.0", result[0][5])
+ assertEquals("1.0", result[0][6])
+ assertEquals("\'*\'", result[0][7])
+ assertEquals("\';\'", result[0][8])
+ assertEquals("FULL" , result[0][9])
+ assertEquals("FUNDAMENTALS" , result[0][10])
+ assertEquals("MANUAL" , result[0][11])
+ assertEquals("0" , result[0][12])
sql """analyze table stats_test3 with sync"""
result = sql """show column stats stats_test3(id);"""
assertEquals(1, result.size())
assertEquals("id", result[0][0])
- assertEquals("0.0", result[0][1])
assertEquals("0.0", result[0][2])
assertEquals("0.0", result[0][3])
assertEquals("0.0", result[0][4])
assertEquals("0.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("0.0", result[0][6])
assertEquals("N/A", result[0][7])
+ assertEquals("N/A", result[0][8])
result = sql """show column stats stats_test3(value);"""
assertEquals(1, result.size())
assertEquals("value", result[0][0])
- assertEquals("0.0", result[0][1])
assertEquals("0.0", result[0][2])
assertEquals("0.0", result[0][3])
assertEquals("0.0", result[0][4])
assertEquals("0.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("0.0", result[0][6])
assertEquals("N/A", result[0][7])
+ assertEquals("N/A", result[0][8])
sql """drop catalog if exists ${catalog_name}"""
diff --git a/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_statistics.groovy b/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_statistics.groovy
index f73ab3aaad9..66b04ebd513 100644
--- a/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_statistics.groovy
+++ b/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_statistics.groovy
@@ -39,24 +39,24 @@ suite("test_mysql_jdbc_statistics", "p0,external,mysql,external_docker,external_
def result = sql """show column stats ex_tb0 (name)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "name")
- assertTrue(result[0][1] == "5.0")
assertTrue(result[0][2] == "5.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "15.0")
- assertTrue(result[0][5] == "3.0")
- assertEquals(result[0][6], "'abc'")
- assertEquals(result[0][7], "'abg'")
+ assertTrue(result[0][3] == "5.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "15.0")
+ assertTrue(result[0][6] == "3.0")
+ assertEquals(result[0][7], "'abc'")
+ assertEquals(result[0][8], "'abg'")
result = sql """show column stats ex_tb0 (id)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "id")
- assertTrue(result[0][1] == "5.0")
assertTrue(result[0][2] == "5.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "20.0")
- assertTrue(result[0][5] == "4.0")
- assertTrue(result[0][6] == "111")
- assertTrue(result[0][7] == "115")
+ assertTrue(result[0][3] == "5.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "20.0")
+ assertTrue(result[0][6] == "4.0")
+ assertTrue(result[0][7] == "111")
+ assertTrue(result[0][8] == "115")
sql """drop catalog ${catalog_name}"""
}
diff --git a/regression-test/suites/external_table_p2/hive/test_hive_statistic.groovy b/regression-test/suites/external_table_p2/hive/test_hive_statistic.groovy
index 81071398834..4fcd70fe732 100644
--- a/regression-test/suites/external_table_p2/hive/test_hive_statistic.groovy
+++ b/regression-test/suites/external_table_p2/hive/test_hive_statistic.groovy
@@ -41,195 +41,195 @@ suite("test_hive_statistic", "p2,external,hive,external_remote,external_remote_h
def result = sql """show column stats `statistics` (lo_quantity)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_quantity")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "46.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "1")
- assertEquals(result[0][7], "50")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "46.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "1")
+ assertEquals(result[0][8], "50")
result = sql """show column stats `statistics` (lo_orderkey)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_orderkey")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "26.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "1")
- assertEquals(result[0][7], "98")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "26.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "1")
+ assertEquals(result[0][8], "98")
result = sql """show column stats `statistics` (lo_linenumber)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_linenumber")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "7.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "1")
- assertEquals(result[0][7], "7")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "7.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "1")
+ assertEquals(result[0][8], "7")
result = sql """show column stats `statistics` (lo_custkey)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_custkey")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "26.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "67423")
- assertEquals(result[0][7], "2735521")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "26.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "67423")
+ assertEquals(result[0][8], "2735521")
result = sql """show column stats `statistics` (lo_partkey)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_partkey")
- assertEquals(result[0][1], "100.0")
assertEquals(result[0][2], "100.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "2250")
- assertEquals(result[0][7], "989601")
+ assertEquals(result[0][3], "100.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "2250")
+ assertEquals(result[0][8], "989601")
result = sql """show column stats `statistics` (lo_suppkey)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_suppkey")
- assertEquals(result[0][1], "100.0")
assertEquals(result[0][2], "100.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "4167")
- assertEquals(result[0][7], "195845")
+ assertEquals(result[0][3], "100.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "4167")
+ assertEquals(result[0][8], "195845")
result = sql """show column stats `statistics` (lo_orderdate)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_orderdate")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "26.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "19920221")
- assertEquals(result[0][7], "19980721")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "26.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "19920221")
+ assertEquals(result[0][8], "19980721")
result = sql """show column stats `statistics` (lo_orderpriority)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_orderpriority")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "5.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "880.0")
- assertEquals(result[0][5], "8.8")
- assertEquals(result[0][6], "'1-URGENT'")
- assertEquals(result[0][7], "'5-LOW'")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "5.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "880.0")
+ assertEquals(result[0][6], "8.8")
+ assertEquals(result[0][7], "'1-URGENT'")
+ assertEquals(result[0][8], "'5-LOW'")
result = sql """show column stats `statistics` (lo_shippriority)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_shippriority")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "1.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "0")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "1.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
assertEquals(result[0][7], "0")
+ assertEquals(result[0][8], "0")
result = sql """show column stats `statistics` (lo_extendedprice)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_extendedprice")
- assertEquals(result[0][1], "100.0")
assertEquals(result[0][2], "100.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "104300")
- assertEquals(result[0][7], "9066094")
+ assertEquals(result[0][3], "100.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "104300")
+ assertEquals(result[0][8], "9066094")
result = sql """show column stats `statistics` (lo_ordtotalprice)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_ordtotalprice")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "26.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "3428256")
- assertEquals(result[0][7], "36771805")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "26.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "3428256")
+ assertEquals(result[0][8], "36771805")
result = sql """show column stats `statistics` (lo_discount)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_discount")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "11.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "0")
- assertEquals(result[0][7], "10")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "11.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "0")
+ assertEquals(result[0][8], "10")
result = sql """show column stats `statistics` (lo_revenue)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_revenue")
- assertEquals(result[0][1], "100.0")
assertEquals(result[0][2], "100.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "101171")
- assertEquals(result[0][7], "8703450")
+ assertEquals(result[0][3], "100.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "101171")
+ assertEquals(result[0][8], "8703450")
result = sql """show column stats `statistics` (lo_supplycost)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_supplycost")
- assertEquals(result[0][1], "100.0")
assertEquals(result[0][2], "100.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "58023")
- assertEquals(result[0][7], "121374")
+ assertEquals(result[0][3], "100.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "58023")
+ assertEquals(result[0][8], "121374")
result = sql """show column stats `statistics` (lo_tax)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_tax")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "9.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "0")
- assertEquals(result[0][7], "8")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "9.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "0")
+ assertEquals(result[0][8], "8")
result = sql """show column stats `statistics` (lo_commitdate)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_commitdate")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "95.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "19920515")
- assertEquals(result[0][7], "19981016")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "95.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "19920515")
+ assertEquals(result[0][8], "19981016")
result = sql """show column stats `statistics` (lo_shipmode)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_shipmode")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "7.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "421.0")
- assertEquals(result[0][5], "4.21")
- assertEquals(result[0][6], "'AIR'")
- assertEquals(result[0][7], "'TRUCK'")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "7.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "421.0")
+ assertEquals(result[0][6], "4.21")
+ assertEquals(result[0][7], "'AIR'")
+ assertEquals(result[0][8], "'TRUCK'")
sql """ALTER TABLE statistics MODIFY COLUMN lo_shipmode SET STATS ('row_count'='6001215')"""
result = sql "show column stats `statistics` (lo_shipmode)"
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_shipmode")
- assertEquals(result[0][1], "6001215.0")
+ assertEquals(result[0][2], "6001215.0")
sql """drop stats statistics"""
result = sql """show column stats statistics"""
@@ -291,8 +291,8 @@ suite("test_hive_statistic", "p2,external,hive,external_remote,external_remote_h
result = sql """show column stats logs1_parquet (log_time)"""
assertEquals(result.size(), 1)
- assertEquals(result[0][6], "N/A")
assertEquals(result[0][7], "N/A")
+ assertEquals(result[0][8], "N/A")
sql """use tpch1_parquet;"""
sql """drop stats region"""
@@ -302,35 +302,35 @@ suite("test_hive_statistic", "p2,external,hive,external_remote,external_remote_h
result = sql """show column stats region(r_regionkey)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "r_regionkey")
- assertEquals(result[0][1], "5.0")
assertEquals(result[0][2], "5.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "20.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "0")
- assertEquals(result[0][7], "4")
+ assertEquals(result[0][3], "5.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "20.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "0")
+ assertEquals(result[0][8], "4")
result = sql """show column stats region(r_comment)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "r_comment")
- assertEquals(result[0][1], "5.0")
assertEquals(result[0][2], "5.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "330.0")
- assertEquals(result[0][5], "66.0")
- assertEquals(result[0][6], "\'ges. thinly even pinto beans ca\'")
- assertEquals(result[0][7], "\'uickly special accounts cajole carefully blithely close requests. carefully final asymptotes haggle furiousl\'")
+ assertEquals(result[0][3], "5.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "330.0")
+ assertEquals(result[0][6], "66.0")
+ assertEquals(result[0][7], "\'ges. thinly even pinto beans ca\'")
+ assertEquals(result[0][8], "\'uickly special accounts cajole carefully blithely close requests. carefully final asymptotes haggle furiousl\'")
result = sql """show column stats region(r_name)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "r_name")
- assertEquals(result[0][1], "5.0")
assertEquals(result[0][2], "5.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "34.0")
- assertEquals(result[0][5], "6.8")
- assertEquals(result[0][6], "\'AFRICA\'")
- assertEquals(result[0][7], "\'MIDDLE EAST\'")
+ assertEquals(result[0][3], "5.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "34.0")
+ assertEquals(result[0][6], "6.8")
+ assertEquals(result[0][7], "\'AFRICA\'")
+ assertEquals(result[0][8], "\'MIDDLE EAST\'")
sql """drop catalog ${catalog_name}"""
}
diff --git a/regression-test/suites/external_table_p2/hive/test_hive_statistic_auto.groovy b/regression-test/suites/external_table_p2/hive/test_hive_statistic_auto.groovy
index 4a6c33f3518..8a7591daeb1 100644
--- a/regression-test/suites/external_table_p2/hive/test_hive_statistic_auto.groovy
+++ b/regression-test/suites/external_table_p2/hive/test_hive_statistic_auto.groovy
@@ -43,13 +43,13 @@ suite("test_hive_statistic_auto", "p2,external,hive,external_remote,external_rem
}
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_quantity")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "46.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "N/A")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "46.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
assertEquals(result[0][7], "N/A")
+ assertEquals(result[0][8], "N/A")
result = sql """show column stats `statistics` (lo_orderkey)"""
if (result.size <= 0) {
@@ -57,13 +57,13 @@ suite("test_hive_statistic_auto", "p2,external,hive,external_remote,external_rem
}
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_orderkey")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "26.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "N/A")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "26.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
assertEquals(result[0][7], "N/A")
+ assertEquals(result[0][8], "N/A")
result = sql """show column stats `statistics` (lo_linenumber)"""
if (result.size <= 0) {
@@ -71,13 +71,13 @@ suite("test_hive_statistic_auto", "p2,external,hive,external_remote,external_rem
}
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_linenumber")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "7.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "N/A")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "7.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
assertEquals(result[0][7], "N/A")
+ assertEquals(result[0][8], "N/A")
}
sql """drop catalog ${catalog_name}"""
diff --git a/regression-test/suites/external_table_p2/hive/test_hive_statistic_cache.groovy b/regression-test/suites/external_table_p2/hive/test_hive_statistic_cache.groovy
index 74ce33ace40..3b18f2a7254 100644
--- a/regression-test/suites/external_table_p2/hive/test_hive_statistic_cache.groovy
+++ b/regression-test/suites/external_table_p2/hive/test_hive_statistic_cache.groovy
@@ -73,173 +73,173 @@ suite("test_hive_statistic_cache", "p2,external,hive,external_remote,external_re
Thread.sleep(5000);
result = sql """show column cached stats `stats` (lo_orderkey)"""
assertEquals(result[0][0], "lo_orderkey")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "26.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "1")
- assertEquals(result[0][7], "98")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "26.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "1")
+ assertEquals(result[0][8], "98")
result = sql """show column cached stats `stats` (lo_linenumber)"""
assertEquals(result[0][0], "lo_linenumber")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "7.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "1")
- assertEquals(result[0][7], "7")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "7.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "1")
+ assertEquals(result[0][8], "7")
result = sql """show column cached stats `stats` (lo_custkey)"""
assertEquals(result[0][0], "lo_custkey")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "26.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "67423")
- assertEquals(result[0][7], "2735521")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "26.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "67423")
+ assertEquals(result[0][8], "2735521")
result = sql """show column cached stats `stats` (lo_partkey)"""
assertEquals(result[0][0], "lo_partkey")
- assertEquals(result[0][1], "100.0")
assertEquals(result[0][2], "100.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "2250")
- assertEquals(result[0][7], "989601")
+ assertEquals(result[0][3], "100.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "2250")
+ assertEquals(result[0][8], "989601")
result = sql """show column cached stats `stats` (lo_suppkey)"""
assertEquals(result[0][0], "lo_suppkey")
- assertEquals(result[0][1], "100.0")
assertEquals(result[0][2], "100.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "4167")
- assertEquals(result[0][7], "195845")
+ assertEquals(result[0][3], "100.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "4167")
+ assertEquals(result[0][8], "195845")
result = sql """show column cached stats `stats` (lo_orderdate)"""
assertEquals(result[0][0], "lo_orderdate")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "26.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "19920221")
- assertEquals(result[0][7], "19980721")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "26.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "19920221")
+ assertEquals(result[0][8], "19980721")
result = sql """show column cached stats `stats` (lo_orderpriority)"""
assertEquals(result[0][0], "lo_orderpriority")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "5.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "880.0")
- assertEquals(result[0][5], "8.8")
- assertEquals(result[0][6], "'1-URGENT'")
- assertEquals(result[0][7], "'5-LOW'")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "5.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "880.0")
+ assertEquals(result[0][6], "8.0")
+ assertEquals(result[0][7], "'1-URGENT'")
+ assertEquals(result[0][8], "'5-LOW'")
result = sql """show column cached stats `stats` (lo_shippriority)"""
assertEquals(result[0][0], "lo_shippriority")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "1.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "0")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "1.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
assertEquals(result[0][7], "0")
+ assertEquals(result[0][8], "0")
result = sql """show column cached stats `stats` (lo_extendedprice)"""
assertEquals(result[0][0], "lo_extendedprice")
- assertEquals(result[0][1], "100.0")
assertEquals(result[0][2], "100.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "104300")
- assertEquals(result[0][7], "9066094")
+ assertEquals(result[0][3], "100.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "104300")
+ assertEquals(result[0][8], "9066094")
result = sql """show column cached stats `stats` (lo_ordtotalprice)"""
assertEquals(result[0][0], "lo_ordtotalprice")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "26.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "3428256")
- assertEquals(result[0][7], "36771805")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "26.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "3428256")
+ assertEquals(result[0][8], "36771805")
result = sql """show column cached stats `stats` (lo_discount)"""
assertEquals(result[0][0], "lo_discount")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "11.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "0")
- assertEquals(result[0][7], "10")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "11.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "0")
+ assertEquals(result[0][8], "10")
result = sql """show column cached stats `stats` (lo_revenue)"""
assertEquals(result[0][0], "lo_revenue")
- assertEquals(result[0][1], "100.0")
assertEquals(result[0][2], "100.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "101171")
- assertEquals(result[0][7], "8703450")
+ assertEquals(result[0][3], "100.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "101171")
+ assertEquals(result[0][8], "8703450")
result = sql """show column cached stats `stats` (lo_supplycost)"""
assertEquals(result[0][0], "lo_supplycost")
- assertEquals(result[0][1], "100.0")
assertEquals(result[0][2], "100.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "58023")
- assertEquals(result[0][7], "121374")
+ assertEquals(result[0][3], "100.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "58023")
+ assertEquals(result[0][8], "121374")
result = sql """show column cached stats `stats` (lo_tax)"""
assertEquals(result[0][0], "lo_tax")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "9.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "0")
- assertEquals(result[0][7], "8")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "9.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "0")
+ assertEquals(result[0][8], "8")
result = sql """show column cached stats `stats` (lo_commitdate)"""
assertEquals(result[0][0], "lo_commitdate")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "95.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "19920515")
- assertEquals(result[0][7], "19981016")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "95.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "19920515")
+ assertEquals(result[0][8], "19981016")
result = sql """show column cached stats `stats` (lo_shipmode)"""
assertEquals(result[0][0], "lo_shipmode")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "7.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "421.0")
- assertEquals(result[0][5], "4.21")
- assertEquals(result[0][6], "'AIR'")
- assertEquals(result[0][7], "'TRUCK'")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "7.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "421.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "'AIR'")
+ assertEquals(result[0][8], "'TRUCK'")
result = sql """show column cached stats `stats` (lo_quantity)"""
assertEquals(result[0][0], "lo_quantity")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "46.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "1")
- assertEquals(result[0][7], "50")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "46.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "1")
+ assertEquals(result[0][8], "50")
}
}
diff --git a/regression-test/suites/external_table_p2/hive/test_hive_statistic_clean.groovy b/regression-test/suites/external_table_p2/hive/test_hive_statistic_clean.groovy
index bef2e448837..e04f9fbe884 100644
--- a/regression-test/suites/external_table_p2/hive/test_hive_statistic_clean.groovy
+++ b/regression-test/suites/external_table_p2/hive/test_hive_statistic_clean.groovy
@@ -38,69 +38,69 @@ suite("test_hive_statistic_clean", "p2,external,hive,external_remote,external_re
def result = sql """show column stats `statistics` (lo_quantity)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_quantity")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "46.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "1")
- assertEquals(result[0][7], "50")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "46.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "1")
+ assertEquals(result[0][8], "50")
result = sql """show column stats `statistics` (lo_orderkey)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_orderkey")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "26.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "1")
- assertEquals(result[0][7], "98")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "26.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "1")
+ assertEquals(result[0][8], "98")
result = sql """show column stats `statistics` (lo_linenumber)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_linenumber")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "7.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "1")
- assertEquals(result[0][7], "7")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "7.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "1")
+ assertEquals(result[0][8], "7")
sql """drop expired stats"""
result = sql """show column stats `statistics` (lo_quantity)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_quantity")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "46.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "1")
- assertEquals(result[0][7], "50")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "46.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "1")
+ assertEquals(result[0][8], "50")
result = sql """show column stats `statistics` (lo_orderkey)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_orderkey")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "26.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "1")
- assertEquals(result[0][7], "98")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "26.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "1")
+ assertEquals(result[0][8], "98")
result = sql """show column stats `statistics` (lo_linenumber)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "lo_linenumber")
- assertEquals(result[0][1], "100.0")
- assertEquals(result[0][2], "7.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "400.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "1")
- assertEquals(result[0][7], "7")
+ assertEquals(result[0][2], "100.0")
+ assertEquals(result[0][3], "7.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "400.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "1")
+ assertEquals(result[0][8], "7")
def ctlId
result = sql """show catalogs"""
diff --git a/regression-test/suites/external_table_p2/hive/test_hive_statistic_sample.groovy b/regression-test/suites/external_table_p2/hive/test_hive_statistic_sample.groovy
index 675a9409b33..3bd9594afd2 100644
--- a/regression-test/suites/external_table_p2/hive/test_hive_statistic_sample.groovy
+++ b/regression-test/suites/external_table_p2/hive/test_hive_statistic_sample.groovy
@@ -37,112 +37,112 @@ suite("test_hive_statistic_sample", "p2,external,hive,external_remote,external_r
def result = sql """show column stats region (r_regionkey)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "r_regionkey")
- assertEquals(result[0][1], "5.0")
assertEquals(result[0][2], "5.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "20.0")
- assertEquals(result[0][5], "4.0")
- assertEquals(result[0][6], "N/A")
+ assertEquals(result[0][3], "5.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "20.0")
+ assertEquals(result[0][6], "4.0")
assertEquals(result[0][7], "N/A")
+ assertEquals(result[0][8], "N/A")
result = sql """show column stats region (r_name)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "r_name")
- assertEquals(result[0][1], "5.0")
assertEquals(result[0][2], "5.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "34.0")
- assertEquals(result[0][5], "6.8")
- assertEquals(result[0][6], "N/A")
+ assertEquals(result[0][3], "5.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "34.0")
+ assertEquals(result[0][6], "6.8")
assertEquals(result[0][7], "N/A")
+ assertEquals(result[0][8], "N/A")
result = sql """show column stats region (r_comment)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "r_comment")
- assertEquals(result[0][1], "5.0")
assertEquals(result[0][2], "5.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "330.0")
- assertEquals(result[0][5], "66.0")
- assertEquals(result[0][6], "N/A")
+ assertEquals(result[0][3], "5.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "330.0")
+ assertEquals(result[0][6], "66.0")
assertEquals(result[0][7], "N/A")
+ assertEquals(result[0][8], "N/A")
result = sql """show column stats supplier (s_suppkey)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "s_suppkey")
- assertEquals(result[0][1], "9998799.0")
assertEquals(result[0][2], "9998799.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "3.9995194E7")
- assertEquals(result[0][5], "3.9999997999759773")
- assertEquals(result[0][6], "N/A")
+ assertEquals(result[0][3], "9998799.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "3.9995194E7")
+ assertEquals(result[0][6], "3.9999997999759773")
assertEquals(result[0][7], "N/A")
+ assertEquals(result[0][8], "N/A")
result = sql """show column stats supplier (s_name)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "s_name")
- assertEquals(result[0][1], "9998799.0")
assertEquals(result[0][2], "9998799.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "1.79978374E8")
- assertEquals(result[0][5], "17.999999199903908")
- assertEquals(result[0][6], "N/A")
+ assertEquals(result[0][3], "9998799.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "1.79978374E8")
+ assertEquals(result[0][6], "17.999999199903908")
assertEquals(result[0][7], "N/A")
+ assertEquals(result[0][8], "N/A")
result = sql """show column stats supplier (s_address)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "s_address")
- assertEquals(result[0][1], "9998799.0")
assertEquals(result[0][2], "9998799.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "2.50070604E8")
- assertEquals(result[0][5], "25.010064108699456")
- assertEquals(result[0][6], "N/A")
+ assertEquals(result[0][3], "9998799.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "2.50070604E8")
+ assertEquals(result[0][6], "25.010064108699456")
assertEquals(result[0][7], "N/A")
+ assertEquals(result[0][8], "N/A")
result = sql """show column stats supplier (s_nationkey)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "s_nationkey")
- assertEquals(result[0][1], "9998799.0")
- assertEquals(result[0][2], "25.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "3.9995194E7")
- assertEquals(result[0][5], "3.9999997999759773")
- assertEquals(result[0][6], "N/A")
+ assertEquals(result[0][2], "9998799.0")
+ assertEquals(result[0][3], "25.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "3.9995194E7")
+ assertEquals(result[0][6], "3.9999997999759773")
assertEquals(result[0][7], "N/A")
+ assertEquals(result[0][8], "N/A")
result = sql """show column stats supplier (s_phone)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "s_phone")
- assertEquals(result[0][1], "9998799.0")
- assertEquals(result[0][2], "9996537.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "1.49981978E8")
- assertEquals(result[0][5], "14.99999929991592")
- assertEquals(result[0][6], "N/A")
+ assertEquals(result[0][2], "9998799.0")
+ assertEquals(result[0][3], "9996537.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "1.49981978E8")
+ assertEquals(result[0][6], "14.99999929991592")
assertEquals(result[0][7], "N/A")
+ assertEquals(result[0][8], "N/A")
result = sql """show column stats supplier (s_acctbal)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "s_acctbal")
- assertEquals(result[0][1], "9998799.0")
- assertEquals(result[0][2], "1054512.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "7.9990388E7")
- assertEquals(result[0][5], "7.999999599951955")
- assertEquals(result[0][6], "N/A")
+ assertEquals(result[0][2], "9998799.0")
+ assertEquals(result[0][3], "58727.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "7.9990388E7")
+ assertEquals(result[0][6], "7.999999599951955")
assertEquals(result[0][7], "N/A")
+ assertEquals(result[0][8], "N/A")
result = sql """show column stats supplier (s_comment)"""
assertEquals(result.size(), 1)
assertEquals(result[0][0], "s_comment")
- assertEquals(result[0][1], "9998799.0")
- assertEquals(result[0][2], "9630165.0")
- assertEquals(result[0][3], "0.0")
- assertEquals(result[0][4], "6.24883849E8")
- assertEquals(result[0][5], "62.49589065646784")
- assertEquals(result[0][6], "N/A")
+ assertEquals(result[0][2], "9998799.0")
+ assertEquals(result[0][3], "9630165.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "6.24883849E8")
+ assertEquals(result[0][6], "62.49589065646784")
assertEquals(result[0][7], "N/A")
+ assertEquals(result[0][8], "N/A")
sql """drop catalog ${catalog_name}"""
}
diff --git a/regression-test/suites/external_table_p2/hive/test_hive_statistics_from_hms.groovy b/regression-test/suites/external_table_p2/hive/test_hive_statistics_from_hms.groovy
index 14426e5c2b4..b25102f2278 100644
--- a/regression-test/suites/external_table_p2/hive/test_hive_statistics_from_hms.groovy
+++ b/regression-test/suites/external_table_p2/hive/test_hive_statistics_from_hms.groovy
@@ -41,169 +41,169 @@ suite("test_hive_statistics_from_hms", "p2,external,hive,external_remote,externa
def result = sql """show column cached stats lineitem (l_returnflag)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "l_returnflag")
- assertTrue(result[0][1] == "6001215.0")
- assertTrue(result[0][2] == "2.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "6001215.0")
- assertTrue(result[0][5] == "1.0")
+ assertTrue(result[0][2] == "6001215.0")
+ assertTrue(result[0][3] == "2.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "6001215.0")
+ assertTrue(result[0][6] == "1.0")
result = sql """show column cached stats lineitem (l_receiptdate)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "l_receiptdate")
- assertTrue(result[0][1] == "6001215.0")
- assertTrue(result[0][2] == "2535.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "2.400486E7")
- assertTrue(result[0][5] == "4.0")
- assertTrue(result[0][6] == "\'1992-01-04\'")
- assertTrue(result[0][7] == "\'1998-12-31\'")
+ assertTrue(result[0][2] == "6001215.0")
+ assertTrue(result[0][3] == "2535.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "2.400486E7")
+ assertTrue(result[0][6] == "4.0")
+ assertTrue(result[0][7] == "\'1992-01-04\'")
+ assertTrue(result[0][8] == "\'1998-12-31\'")
result = sql """show column cached stats lineitem (l_tax)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "l_tax")
- assertTrue(result[0][1] == "6001215.0")
- assertTrue(result[0][2] == "8.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "4.800972E7")
- assertTrue(result[0][5] == "8.0")
- assertTrue(result[0][6] == "0")
- assertTrue(result[0][7] == "0.08")
+ assertTrue(result[0][2] == "6001215.0")
+ assertTrue(result[0][3] == "8.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "4.800972E7")
+ assertTrue(result[0][6] == "8.0")
+ assertTrue(result[0][7] == "0")
+ assertTrue(result[0][8] == "0.08")
result = sql """show column cached stats lineitem (l_shipmode)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "l_shipmode")
- assertTrue(result[0][1] == "6001215.0")
- assertTrue(result[0][2] == "7.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "2.5717007E7")
- assertTrue(result[0][5] == "4.285300060071169")
+ assertTrue(result[0][2] == "6001215.0")
+ assertTrue(result[0][3] == "7.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "2.5717007E7")
+ assertTrue(result[0][6] == "4.285300060071169")
result = sql """show column cached stats lineitem (l_suppkey)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "l_suppkey")
- assertTrue(result[0][1] == "6001215.0")
- assertTrue(result[0][2] == "6.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "2.400486E7")
- assertTrue(result[0][5] == "4.0")
- assertTrue(result[0][6] == "1")
- assertTrue(result[0][7] == "7")
+ assertTrue(result[0][2] == "6001215.0")
+ assertTrue(result[0][3] == "6.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "2.400486E7")
+ assertTrue(result[0][6] == "4.0")
+ assertTrue(result[0][7] == "1")
+ assertTrue(result[0][8] == "7")
result = sql """show column cached stats lineitem (l_shipdate)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "l_shipdate")
- assertTrue(result[0][1] == "6001215.0")
- assertTrue(result[0][2] == "2535.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "2.400486E7")
- assertTrue(result[0][5] == "4.0")
- assertTrue(result[0][6] == "\'1992-01-02\'")
- assertTrue(result[0][7] == "\'1998-12-01\'")
+ assertTrue(result[0][2] == "6001215.0")
+ assertTrue(result[0][3] == "2535.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "2.400486E7")
+ assertTrue(result[0][6] == "4.0")
+ assertTrue(result[0][7] == "\'1992-01-02\'")
+ assertTrue(result[0][8] == "\'1998-12-01\'")
result = sql """show column cached stats lineitem (l_commitdate)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "l_commitdate")
- assertTrue(result[0][1] == "6001215.0")
- assertTrue(result[0][2] == "2427.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "2.400486E7")
- assertTrue(result[0][5] == "4.0")
- assertTrue(result[0][6] == "\'1992-01-31\'")
- assertTrue(result[0][7] == "\'1998-10-31\'")
+ assertTrue(result[0][2] == "6001215.0")
+ assertTrue(result[0][3] == "2427.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "2.400486E7")
+ assertTrue(result[0][6] == "4.0")
+ assertTrue(result[0][7] == "\'1992-01-31\'")
+ assertTrue(result[0][8] == "\'1998-10-31\'")
result = sql """show column cached stats lineitem (l_partkey)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "l_partkey")
- assertTrue(result[0][1] == "6001215.0")
- assertTrue(result[0][2] == "13152.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "2.400486E7")
- assertTrue(result[0][5] == "4.0")
- assertTrue(result[0][6] == "1")
- assertTrue(result[0][7] == "10000")
+ assertTrue(result[0][2] == "6001215.0")
+ assertTrue(result[0][3] == "13152.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "2.400486E7")
+ assertTrue(result[0][6] == "4.0")
+ assertTrue(result[0][7] == "1")
+ assertTrue(result[0][8] == "10000")
result = sql """show column cached stats lineitem (l_orderkey)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "l_orderkey")
- assertTrue(result[0][1] == "6001215.0")
- assertTrue(result[0][2] == "1000998.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "2.400486E7")
- assertTrue(result[0][5] == "4.0")
- assertTrue(result[0][6] == "1")
- assertTrue(result[0][7] == "6000000")
+ assertTrue(result[0][2] == "6001215.0")
+ assertTrue(result[0][3] == "1000998.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "2.400486E7")
+ assertTrue(result[0][6] == "4.0")
+ assertTrue(result[0][7] == "1")
+ assertTrue(result[0][8] == "6000000")
result = sql """show column cached stats lineitem (l_quantity)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "l_quantity")
- assertTrue(result[0][1] == "6001215.0")
- assertTrue(result[0][2] == "31.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "4.800972E7")
- assertTrue(result[0][5] == "8.0")
- assertTrue(result[0][6] == "1")
- assertTrue(result[0][7] == "50")
+ assertTrue(result[0][2] == "6001215.0")
+ assertTrue(result[0][3] == "31.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "4.800972E7")
+ assertTrue(result[0][6] == "8.0")
+ assertTrue(result[0][7] == "1")
+ assertTrue(result[0][8] == "50")
result = sql """show column cached stats lineitem (l_linestatus)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "l_linestatus")
- assertTrue(result[0][1] == "6001215.0")
- assertTrue(result[0][2] == "2.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "6001215.0")
- assertTrue(result[0][5] == "1.0")
-
+ assertTrue(result[0][2] == "6001215.0")
+ assertTrue(result[0][3] == "2.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "6001215.0")
+ assertTrue(result[0][6] == "1.0")
+
result = sql """show column cached stats lineitem (l_comment)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "l_comment")
- assertTrue(result[0][1] == "6001215.0")
- assertTrue(result[0][2] == "3834237.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "1.5899739E8")
- assertTrue(result[0][5] == "26.494199924515286")
+ assertTrue(result[0][2] == "6001215.0")
+ assertTrue(result[0][3] == "3834237.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "1.5899739E8")
+ assertTrue(result[0][6] == "26.494199924515286")
result = sql """show column cached stats lineitem (l_extendedprice)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "l_extendedprice")
- assertTrue(result[0][1] == "6001215.0")
- assertTrue(result[0][2] == "1000998.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "4.800972E7")
- assertTrue(result[0][5] == "8.0")
- assertTrue(result[0][6] == "901")
- assertTrue(result[0][7] == "104949.5")
+ assertTrue(result[0][2] == "6001215.0")
+ assertTrue(result[0][3] == "1000998.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "4.800972E7")
+ assertTrue(result[0][6] == "8.0")
+ assertTrue(result[0][7] == "901")
+ assertTrue(result[0][8] == "104949.5")
result = sql """show column cached stats lineitem (l_linenumber)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "l_linenumber")
- assertTrue(result[0][1] == "6001215.0")
- assertTrue(result[0][2] == "261329.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "2.400486E7")
- assertTrue(result[0][5] == "4.0")
- assertTrue(result[0][6] == "1")
- assertTrue(result[0][7] == "200000")
+ assertTrue(result[0][2] == "6001215.0")
+ assertTrue(result[0][3] == "261329.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "2.400486E7")
+ assertTrue(result[0][6] == "4.0")
+ assertTrue(result[0][7] == "1")
+ assertTrue(result[0][8] == "200000")
result = sql """show column cached stats lineitem (l_discount)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "l_discount")
- assertTrue(result[0][1] == "6001215.0")
- assertTrue(result[0][2] == "15.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "4.800972E7")
- assertTrue(result[0][5] == "8.0")
- assertTrue(result[0][6] == "0")
- assertTrue(result[0][7] == "0.1")
+ assertTrue(result[0][2] == "6001215.0")
+ assertTrue(result[0][3] == "15.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "4.800972E7")
+ assertTrue(result[0][6] == "8.0")
+ assertTrue(result[0][7] == "0")
+ assertTrue(result[0][8] == "0.1")
result = sql """show column cached stats lineitem (l_shipinstruct)"""
assertTrue(result.size() == 1)
assertTrue(result[0][0] == "l_shipinstruct")
- assertTrue(result[0][1] == "6001215.0")
- assertTrue(result[0][2] == "4.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "7.2006178E7")
- assertTrue(result[0][5] == "11.998599950176756")
-
+ assertTrue(result[0][2] == "6001215.0")
+ assertTrue(result[0][3] == "4.0")
+ assertTrue(result[0][4] == "0.0")
+ assertTrue(result[0][5] == "7.2006178E7")
+ assertTrue(result[0][6] == "11.998599950176756")
+
result = sql """show table cached stats lineitem"""
assertTrue(result.size() == 1)
assertTrue(result[0][2] == "6001215")
diff --git a/regression-test/suites/statistics/analyze_stats.groovy b/regression-test/suites/statistics/analyze_stats.groovy
index 78a477f9ab5..c02fef4793e 100644
--- a/regression-test/suites/statistics/analyze_stats.groovy
+++ b/regression-test/suites/statistics/analyze_stats.groovy
@@ -250,7 +250,7 @@ suite("test_analyze") {
def expected_result = { r->
for(int i = 0; i < r.size; i++) {
- if ((int) Double.parseDouble(r[i][1]) == 6) {
+ if ((int) Double.parseDouble(r[i][2]) == 6) {
return true
} else {
return false
@@ -892,7 +892,7 @@ PARTITION `p599` VALUES IN (599)
sql """ANALYZE TABLE test_600_partition_table_analyze WITH SYNC"""
- // 0:column_name | 1:count | 2:ndv | 3:num_null | 4:data_size | 5:avg_size_byte | 6:min | 7:max | 8:updated_time
+ // 0:column_name | 1:index_name | 2:count | 3:ndv | 4:num_null | 5:data_size | 6:avg_size_byte | 7:min | 8:max | 9:method | 10:type | 11:trigger | 12:query_times | 13:updated_time
id_col_stats = sql """
SHOW COLUMN CACHED STATS test_600_partition_table_analyze(id);
"""
@@ -901,25 +901,14 @@ PARTITION `p599` VALUES IN (599)
return (int) Double.parseDouble(r[0][idx]) == expected_value
}
- assert expected_col_stats(id_col_stats, 600, 1)
- assert (int) Double.parseDouble(id_col_stats[0][2]) < 700
- && (int) Double.parseDouble(id_col_stats[0][2]) > 500
- assert expected_col_stats(id_col_stats, 0, 3)
- assert expected_col_stats(id_col_stats, 2400, 4)
- assert expected_col_stats(id_col_stats, 4, 5)
- assert expected_col_stats(id_col_stats, 0, 6)
- assert expected_col_stats(id_col_stats, 599, 7)
-
- def update_time = id_col_stats[0][8]
-
- sql """ANALYZE TABLE test_600_partition_table_analyze WITH SYNC"""
-
- // Data has no change, update time shouldn't be update since this table don't need to analyze again
- id_col_stats_2 = sql """
- SHOW COLUMN CACHED STATS test_600_partition_table_analyze(id);
- """
-
- assert update_time == id_col_stats_2[0][8]
+ assert expected_col_stats(id_col_stats, 600, 2)
+ assert (int) Double.parseDouble(id_col_stats[0][3]) < 700
+ && (int) Double.parseDouble(id_col_stats[0][3]) > 500
+ assert expected_col_stats(id_col_stats, 0, 4)
+ assert expected_col_stats(id_col_stats, 2400, 5)
+ assert expected_col_stats(id_col_stats, 4, 6)
+ assert expected_col_stats(id_col_stats, 0, 7)
+ assert expected_col_stats(id_col_stats, 599, 8)
sql """DROP TABLE IF EXISTS increment_analyze_test"""
sql """
@@ -947,7 +936,7 @@ PARTITION `p599` VALUES IN (599)
SHOW COLUMN CACHED STATS increment_analyze_test(id)
"""
- expected_col_stats(inc_res, 6, 1)
+ expected_col_stats(inc_res, 6, 2)
sql """
DROP TABLE increment_analyze_test;
@@ -987,12 +976,12 @@ PARTITION `p599` VALUES IN (599)
SHOW COLUMN CACHED STATS a_partitioned_table_for_analyze_test(val)
"""
- expected_col_stats(col_val_res, 3, 1)
+ expected_col_stats(col_val_res, 3, 2)
def col_id_res = sql """
SHOW COLUMN CACHED STATS a_partitioned_table_for_analyze_test(id)
"""
- expected_col_stats(col_id_res, 3, 1)
+ expected_col_stats(col_id_res, 3, 2)
sql """DROP TABLE IF EXISTS `some_complex_type_test`"""
@@ -1269,8 +1258,8 @@ PARTITION `p599` VALUES IN (599)
def truncate_test_result = sql """
SHOW COLUMN CACHED STATS ${tbl}(analyzetestlimitedk12)
"""
- assert "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 [...]
assert "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 [...]
+ assert "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 [...]
sql """TRUNCATE TABLE ${tbl}"""
result_after_truncate = sql """show column stats ${tbl}"""
@@ -1282,156 +1271,156 @@ PARTITION `p599` VALUES IN (599)
result = sql """show column stats ${tbl}(analyzetestlimitedk0);"""
assertEquals(1, result.size())
assertEquals("analyzetestlimitedk0", result[0][0])
- assertEquals("0.0", result[0][1])
assertEquals("0.0", result[0][2])
assertEquals("0.0", result[0][3])
assertEquals("0.0", result[0][4])
assertEquals("0.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("0.0", result[0][6])
assertEquals("N/A", result[0][7])
+ assertEquals("N/A", result[0][8])
result = sql """show column stats ${tbl}(analyzetestlimitedk1);"""
assertEquals(1, result.size())
assertEquals("analyzetestlimitedk1", result[0][0])
- assertEquals("0.0", result[0][1])
assertEquals("0.0", result[0][2])
assertEquals("0.0", result[0][3])
assertEquals("0.0", result[0][4])
assertEquals("0.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("0.0", result[0][6])
assertEquals("N/A", result[0][7])
+ assertEquals("N/A", result[0][8])
result = sql """show column stats ${tbl}(analyzetestlimitedk2);"""
assertEquals(1, result.size())
assertEquals("analyzetestlimitedk2", result[0][0])
- assertEquals("0.0", result[0][1])
assertEquals("0.0", result[0][2])
assertEquals("0.0", result[0][3])
assertEquals("0.0", result[0][4])
assertEquals("0.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("0.0", result[0][6])
assertEquals("N/A", result[0][7])
+ assertEquals("N/A", result[0][8])
result = sql """show column stats ${tbl}(analyzetestlimitedk3);"""
assertEquals(1, result.size())
assertEquals("analyzetestlimitedk3", result[0][0])
- assertEquals("0.0", result[0][1])
assertEquals("0.0", result[0][2])
assertEquals("0.0", result[0][3])
assertEquals("0.0", result[0][4])
assertEquals("0.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("0.0", result[0][6])
assertEquals("N/A", result[0][7])
+ assertEquals("N/A", result[0][8])
result = sql """show column stats ${tbl}(analyzetestlimitedk4);"""
assertEquals(1, result.size())
assertEquals("analyzetestlimitedk4", result[0][0])
- assertEquals("0.0", result[0][1])
assertEquals("0.0", result[0][2])
assertEquals("0.0", result[0][3])
assertEquals("0.0", result[0][4])
assertEquals("0.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("0.0", result[0][6])
assertEquals("N/A", result[0][7])
+ assertEquals("N/A", result[0][8])
result = sql """show column stats ${tbl}(analyzetestlimitedk5);"""
assertEquals(1, result.size())
assertEquals("analyzetestlimitedk5", result[0][0])
- assertEquals("0.0", result[0][1])
assertEquals("0.0", result[0][2])
assertEquals("0.0", result[0][3])
assertEquals("0.0", result[0][4])
assertEquals("0.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("0.0", result[0][6])
assertEquals("N/A", result[0][7])
+ assertEquals("N/A", result[0][8])
result = sql """show column stats ${tbl}(analyzetestlimitedk6);"""
assertEquals(1, result.size())
assertEquals("analyzetestlimitedk6", result[0][0])
- assertEquals("0.0", result[0][1])
assertEquals("0.0", result[0][2])
assertEquals("0.0", result[0][3])
assertEquals("0.0", result[0][4])
assertEquals("0.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("0.0", result[0][6])
assertEquals("N/A", result[0][7])
+ assertEquals("N/A", result[0][8])
result = sql """show column stats ${tbl}(analyzetestlimitedk7);"""
assertEquals(1, result.size())
assertEquals("analyzetestlimitedk7", result[0][0])
- assertEquals("0.0", result[0][1])
assertEquals("0.0", result[0][2])
assertEquals("0.0", result[0][3])
assertEquals("0.0", result[0][4])
assertEquals("0.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("0.0", result[0][6])
assertEquals("N/A", result[0][7])
+ assertEquals("N/A", result[0][8])
result = sql """show column stats ${tbl}(analyzetestlimitedk8);"""
assertEquals(1, result.size())
assertEquals("analyzetestlimitedk8", result[0][0])
- assertEquals("0.0", result[0][1])
assertEquals("0.0", result[0][2])
assertEquals("0.0", result[0][3])
assertEquals("0.0", result[0][4])
assertEquals("0.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("0.0", result[0][6])
assertEquals("N/A", result[0][7])
+ assertEquals("N/A", result[0][8])
result = sql """show column stats ${tbl}(analyzetestlimitedk9);"""
assertEquals(1, result.size())
assertEquals("analyzetestlimitedk9", result[0][0])
- assertEquals("0.0", result[0][1])
assertEquals("0.0", result[0][2])
assertEquals("0.0", result[0][3])
assertEquals("0.0", result[0][4])
assertEquals("0.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("0.0", result[0][6])
assertEquals("N/A", result[0][7])
+ assertEquals("N/A", result[0][8])
result = sql """show column stats ${tbl}(analyzetestlimitedk10);"""
assertEquals(1, result.size())
assertEquals("analyzetestlimitedk10", result[0][0])
- assertEquals("0.0", result[0][1])
assertEquals("0.0", result[0][2])
assertEquals("0.0", result[0][3])
assertEquals("0.0", result[0][4])
assertEquals("0.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("0.0", result[0][6])
assertEquals("N/A", result[0][7])
+ assertEquals("N/A", result[0][8])
result = sql """show column stats ${tbl}(analyzetestlimitedk11);"""
assertEquals(1, result.size())
assertEquals("analyzetestlimitedk11", result[0][0])
- assertEquals("0.0", result[0][1])
assertEquals("0.0", result[0][2])
assertEquals("0.0", result[0][3])
assertEquals("0.0", result[0][4])
assertEquals("0.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("0.0", result[0][6])
assertEquals("N/A", result[0][7])
+ assertEquals("N/A", result[0][8])
result = sql """show column stats ${tbl}(analyzetestlimitedk12);"""
assertEquals(1, result.size())
assertEquals("analyzetestlimitedk12", result[0][0])
- assertEquals("0.0", result[0][1])
assertEquals("0.0", result[0][2])
assertEquals("0.0", result[0][3])
assertEquals("0.0", result[0][4])
assertEquals("0.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("0.0", result[0][6])
assertEquals("N/A", result[0][7])
+ assertEquals("N/A", result[0][8])
result = sql """show column stats ${tbl}(analyzetestlimitedk13);"""
assertEquals(1, result.size())
assertEquals("analyzetestlimitedk13", result[0][0])
- assertEquals("0.0", result[0][1])
assertEquals("0.0", result[0][2])
assertEquals("0.0", result[0][3])
assertEquals("0.0", result[0][4])
assertEquals("0.0", result[0][5])
- assertEquals("N/A", result[0][6])
+ assertEquals("0.0", result[0][6])
assertEquals("N/A", result[0][7])
+ assertEquals("N/A", result[0][8])
// Test drop stats with more than 1024 columns.
sql """
@@ -2551,7 +2540,7 @@ PARTITION `p599` VALUES IN (599)
sql """
CREATE TABLE region (
`r_regionkey` int NOT NULL,
- `r'name` VARCHAR(25) NOT NULL,
+ `r%name` VARCHAR(25) NOT NULL,
`r_comment` VARCHAR(152)
)ENGINE=OLAP
DUPLICATE KEY(`r_regionkey`)
@@ -2565,14 +2554,14 @@ PARTITION `p599` VALUES IN (599)
sql """insert into region values(2,'name2', 'comment2') """
sql """insert into region values(3,'name3', 'comment3') """
sql """ANALYZE TABLE region WITH SYNC"""
- result = sql """show column stats region (`r'name`);"""
+ result = sql """show column stats region (`r%name`);"""
assertEquals(1, result.size())
- assertEquals("r'name", result[0][0])
- assertEquals("3.0", result[0][1])
+ assertEquals("r%name", result[0][0])
assertEquals("3.0", result[0][2])
- assertEquals("0.0", result[0][3])
- assertEquals("\'name1\'", result[0][6])
- assertEquals("\'name3\'", result[0][7])
+ assertEquals("3.0", result[0][3])
+ assertEquals("0.0", result[0][4])
+ assertEquals("\'name1\'", result[0][7])
+ assertEquals("\'name3\'", result[0][8])
// Test partititon load data for the first time.
sql """
@@ -2627,8 +2616,8 @@ PARTITION `p599` VALUES IN (599)
Thread.sleep(1000 * 60)
sql """analyze table agg_table_test with sample rows 100 with sync"""
def agg_result = sql """show column stats agg_table_test (name)"""
- assertEquals(agg_result[0][6], "N/A")
assertEquals(agg_result[0][7], "N/A")
+ assertEquals(agg_result[0][8], "N/A")
// Test sample string type min max
sql """
@@ -2703,19 +2692,19 @@ PARTITION `p599` VALUES IN (599)
def result_sample = sql """analyze table trigger_test with sample percent 10 with sync"""
result_sample = sql """show column stats trigger_test"""
assertEquals(2, result_sample.size())
- assertEquals("0.0", result_sample[0][1])
- assertEquals("SAMPLE", result_sample[0][8])
- assertEquals("0.0", result_sample[1][1])
- assertEquals("SAMPLE", result_sample[1][8])
+ assertEquals("0.0", result_sample[0][2])
+ assertEquals("SAMPLE", result_sample[0][9])
+ assertEquals("0.0", result_sample[1][2])
+ assertEquals("SAMPLE", result_sample[1][9])
sql """drop stats trigger_test"""
sql """analyze table trigger_test with sample rows 1000 with sync"""
result_sample = sql """show column stats trigger_test"""
assertEquals(2, result_sample.size())
- assertEquals("0.0", result_sample[0][1])
- assertEquals("SAMPLE", result_sample[0][8])
- assertEquals("0.0", result_sample[1][1])
- assertEquals("SAMPLE", result_sample[1][8])
+ assertEquals("0.0", result_sample[0][2])
+ assertEquals("SAMPLE", result_sample[0][9])
+ assertEquals("0.0", result_sample[1][2])
+ assertEquals("SAMPLE", result_sample[1][9])
// Test show task
result_sample = sql """analyze table trigger_test with sample percent 10"""
@@ -2740,34 +2729,34 @@ PARTITION `p599` VALUES IN (599)
Thread.sleep(1000)
continue;
}
- assertEquals(result[0][10], "SYSTEM")
- assertEquals(result[1][10], "SYSTEM")
+ assertEquals(result[0][11], "SYSTEM")
+ assertEquals(result[1][11], "SYSTEM")
break
}
if (i < 10) {
sql """analyze table trigger_test with sync"""
def result = sql """show column stats trigger_test"""
assertEquals(result.size(), 2)
- assertEquals(result[0][10], "MANUAL")
- assertEquals(result[1][10], "MANUAL")
+ assertEquals(result[0][11], "MANUAL")
+ assertEquals(result[1][11], "MANUAL")
}
// Test analyze default full.
sql """analyze table trigger_test with sync"""
def result = sql """show column stats trigger_test"""
assertEquals(2, result.size())
- assertEquals("4.0", result[0][1])
- assertEquals("FULL", result[0][8])
- assertEquals("4.0", result[1][1])
- assertEquals("FULL", result[1][8])
+ assertEquals("4.0", result[0][2])
+ assertEquals("FULL", result[0][9])
+ assertEquals("4.0", result[1][2])
+ assertEquals("FULL", result[1][9])
// Test analyze hive health value
sql """insert into trigger_test values(5,'name5') """
sql """analyze table trigger_test with sync"""
result = sql """show column stats trigger_test"""
assertEquals(2, result.size())
- assertEquals("5.0", result[0][1])
- assertEquals("5.0", result[1][1])
+ assertEquals("5.0", result[0][2])
+ assertEquals("5.0", result[1][2])
sql """DROP DATABASE IF EXISTS trigger"""
diff --git a/regression-test/suites/statistics/test_agg_complex_type.groovy b/regression-test/suites/statistics/test_agg_complex_type.groovy
index 4800959fe54..0f10234ae6a 100644
--- a/regression-test/suites/statistics/test_agg_complex_type.groovy
+++ b/regression-test/suites/statistics/test_agg_complex_type.groovy
@@ -46,10 +46,10 @@ suite("test_analyze_with_agg_complex_type") {
return (int) Double.parseDouble(r[0][idx]) == expected_value
}
- assert expected_col_stats(show_result, 2, 1)
- assert expected_col_stats(show_result, 0, 3)
- assert expected_col_stats(show_result, 8, 4)
- assert expected_col_stats(show_result, 4, 5)
- assert expected_col_stats(show_result, 1, 6)
- assert expected_col_stats(show_result, 2, 7)
-}
\ No newline at end of file
+ assert expected_col_stats(show_result, 2, 2)
+ assert expected_col_stats(show_result, 0, 4)
+ assert expected_col_stats(show_result, 8, 5)
+ assert expected_col_stats(show_result, 4, 6)
+ assert expected_col_stats(show_result, 1, 7)
+ assert expected_col_stats(show_result, 2, 8)
+}
diff --git a/regression-test/suites/statistics/test_analyze_mv.groovy b/regression-test/suites/statistics/test_analyze_mv.groovy
new file mode 100644
index 00000000000..91c4c24f70d
--- /dev/null
+++ b/regression-test/suites/statistics/test_analyze_mv.groovy
@@ -0,0 +1,256 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("test_analyze_mv") {
+
+ sql """drop database if exists test_analyze_mv"""
+ sql """create database test_analyze_mv"""
+ sql """use test_analyze_mv"""
+
+ sql """CREATE TABLE mvTestDup (
+ key1 bigint NOT NULL,
+ key2 bigint NOT NULL,
+ value1 int NOT NULL,
+ value2 int NOT NULL,
+ value3 int NOT NULL
+ )ENGINE=OLAP
+ DUPLICATE KEY(`key1`, `key2`)
+ COMMENT "OLAP"
+ DISTRIBUTED BY HASH(`key1`) BUCKETS 2
+ PROPERTIES (
+ "replication_num" = "1"
+ )
+ """
+ sql """create materialized view mv1 as select key1 from mvTestDup;"""
+ Thread.sleep(1500)
+ sql """create materialized view mv2 as select key2 from mvTestDup;"""
+ Thread.sleep(1500)
+ sql """create materialized view mv3 as select key1, key2, sum(value1), max(value2), min(value3) from mvTestDup group by key1, key2;"""
+ Thread.sleep(1500)
+ sql """insert into mvTestDup values (1, 2, 3, 4, 5), (1, 2, 3, 4, 5), (10, 20, 30, 40, 50), (10, 20, 30, 40, 50), (100, 200, 300, 400, 500), (1001, 2001, 3001, 4001, 5001);"""
+
+ sql """analyze table mvTestDup with sync;"""
+
+ def result_sample = sql """show column stats mvTestDup"""
+ assertEquals(12, result_sample.size())
+
+ result_sample = sql """show column stats mvTestDup(key1)"""
+ assertEquals(1, result_sample.size())
+ assertEquals("key1", result_sample[0][0])
+ assertEquals("N/A", result_sample[0][1])
+ assertEquals("6.0", result_sample[0][2])
+ assertEquals("4.0", result_sample[0][3])
+ assertEquals("1", result_sample[0][7])
+ assertEquals("1001", result_sample[0][8])
+ assertEquals("FULL", result_sample[0][9])
+
+ result_sample = sql """show column stats mvTestDup(value1)"""
+ assertEquals(1, result_sample.size())
+ assertEquals("value1", result_sample[0][0])
+ assertEquals("N/A", result_sample[0][1])
+ assertEquals("6.0", result_sample[0][2])
+ assertEquals("4.0", result_sample[0][3])
+ assertEquals("3", result_sample[0][7])
+ assertEquals("3001", result_sample[0][8])
+ assertEquals("FULL", result_sample[0][9])
+
+ result_sample = sql """show column stats mvTestDup(mv_key1)"""
+ assertEquals(2, result_sample.size())
+ assertEquals("mv_key1", result_sample[0][0])
+ assertTrue(result_sample[0][1] == 'mv1' && result_sample[1][1] == 'mv3' || result_sample[0][1] == 'mv3' && result_sample[1][1] == 'mv1')
+ if (result_sample[0][1] == 'mv1') {
+ assertEquals("6.0", result_sample[0][2])
+ } else {
+ assertEquals("4.0", result_sample[0][2])
+ }
+ assertEquals("4.0", result_sample[0][3])
+ assertEquals("1", result_sample[0][7])
+ assertEquals("1001", result_sample[0][8])
+ assertEquals("FULL", result_sample[0][9])
+
+ result_sample = sql """show column stats mvTestDup(`mva_SUM__CAST(``value1`` AS BIGINT)`)"""
+ assertEquals(1, result_sample.size())
+ assertEquals("mva_SUM__CAST(`value1` AS BIGINT)", result_sample[0][0])
+ assertEquals("mv3", result_sample[0][1])
+ assertEquals("4.0", result_sample[0][2])
+ assertEquals("4.0", result_sample[0][3])
+ assertEquals("6", result_sample[0][7])
+ assertEquals("3001", result_sample[0][8])
+ assertEquals("FULL", result_sample[0][9])
+
+ result_sample = sql """show column stats mvTestDup(`mva_MAX__``value2```)"""
+ assertEquals(1, result_sample.size())
+ assertEquals("mva_MAX__`value2`", result_sample[0][0])
+ assertEquals("mv3", result_sample[0][1])
+ assertEquals("4.0", result_sample[0][2])
+ assertEquals("4.0", result_sample[0][3])
+ assertEquals("4", result_sample[0][7])
+ assertEquals("4001", result_sample[0][8])
+ assertEquals("FULL", result_sample[0][9])
+
+ result_sample = sql """show column stats mvTestDup(`mva_MIN__``value3```)"""
+ assertEquals(1, result_sample.size())
+ assertEquals("mva_MIN__`value3`", result_sample[0][0])
+ assertEquals("mv3", result_sample[0][1])
+ assertEquals("4.0", result_sample[0][2])
+ assertEquals("4.0", result_sample[0][3])
+ assertEquals("5", result_sample[0][7])
+ assertEquals("5001", result_sample[0][8])
+ assertEquals("FULL", result_sample[0][9])
+
+
+
+ sql """CREATE TABLE mvTestAgg (
+ key1 bigint NOT NULL,
+ key2 bigint NOT NULL,
+ value1 int SUM NOT NULL,
+ value2 int MAX NOT NULL,
+ value3 int MIN NOT NULL
+ )ENGINE=OLAP
+ AGGREGATE KEY(`key1`, `key2`)
+ COMMENT "OLAP"
+ DISTRIBUTED BY HASH(`key1`) BUCKETS 2
+ PROPERTIES (
+ "replication_num" = "1"
+ );
+ """
+
+ sql """create materialized view mv1 as select key2 from mvTestAgg;"""
+ Thread.sleep(1500)
+ sql """create materialized view mv3 as select key1, key2, sum(value1), max(value2), min(value3) from mvTestAgg group by key1, key2;"""
+ Thread.sleep(1500)
+ sql """create materialized view mv6 as select key1, sum(value1) from mvTestAgg group by key1;"""
+ Thread.sleep(1500)
+ sql """insert into mvTestAgg values (1, 2, 3, 4, 5), (1, 2, 3, 4, 5), (1, 11, 22, 33, 44), (10, 20, 30, 40, 50), (10, 20, 30, 40, 50), (100, 200, 300, 400, 500), (1001, 2001, 3001, 4001, 5001);"""
+
+ sql """analyze table mvTestAgg with sync;"""
+ result_sample = sql """show column stats mvTestAgg"""
+ assertEquals(13, result_sample.size())
+
+ result_sample = sql """show column stats mvTestAgg(key2)"""
+ assertEquals(1, result_sample.size())
+ assertEquals("key2", result_sample[0][0])
+ assertEquals("N/A", result_sample[0][1])
+ assertEquals("5.0", result_sample[0][2])
+ assertEquals("5.0", result_sample[0][3])
+ assertEquals("2", result_sample[0][7])
+ assertEquals("2001", result_sample[0][8])
+ assertEquals("FULL", result_sample[0][9])
+
+ result_sample = sql """show column stats mvTestAgg(value2)"""
+ assertEquals(1, result_sample.size())
+ assertEquals("value2", result_sample[0][0])
+ assertEquals("N/A", result_sample[0][1])
+ assertEquals("5.0", result_sample[0][2])
+ assertEquals("5.0", result_sample[0][3])
+ assertEquals("4", result_sample[0][7])
+ assertEquals("4001", result_sample[0][8])
+ assertEquals("FULL", result_sample[0][9])
+
+ result_sample = sql """show column stats mvTestAgg(mv_key2)"""
+ assertEquals(2, result_sample.size())
+ assertEquals("mv_key2", result_sample[0][0])
+ assertTrue(result_sample[0][1] == 'mv1' && result_sample[1][1] == 'mv3' || result_sample[0][1] == 'mv3' && result_sample[1][1] == 'mv1')
+ assertEquals("5.0", result_sample[0][2])
+ assertEquals("5.0", result_sample[0][3])
+ assertEquals("2", result_sample[0][7])
+ assertEquals("2001", result_sample[0][8])
+ assertEquals("FULL", result_sample[0][9])
+
+ result_sample = sql """show column stats mvTestAgg(`mva_MAX__``value2```)"""
+ assertEquals(1, result_sample.size())
+ assertEquals("mva_MAX__`value2`", result_sample[0][0])
+ assertEquals("mv3", result_sample[0][1])
+ assertEquals("5.0", result_sample[0][2])
+ assertEquals("5.0", result_sample[0][3])
+ assertEquals("4", result_sample[0][7])
+ assertEquals("4001", result_sample[0][8])
+ assertEquals("FULL", result_sample[0][9])
+
+ result_sample = sql """show column stats mvTestAgg(`mva_MIN__``value3```)"""
+ assertEquals(1, result_sample.size())
+ assertEquals("mva_MIN__`value3`", result_sample[0][0])
+ assertEquals("mv3", result_sample[0][1])
+ assertEquals("5.0", result_sample[0][2])
+ assertEquals("5.0", result_sample[0][3])
+ assertEquals("5", result_sample[0][7])
+ assertEquals("5001", result_sample[0][8])
+ assertEquals("FULL", result_sample[0][9])
+
+
+ sql """
+ CREATE TABLE mvTestUni (
+ key1 bigint NOT NULL,
+ key2 bigint NOT NULL,
+ value1 int NOT NULL,
+ value2 int NOT NULL,
+ value3 int NOT NULL
+ )ENGINE=OLAP
+ UNIQUE KEY(`key1`, `key2`)
+ COMMENT "OLAP"
+ DISTRIBUTED BY HASH(`key1`) BUCKETS 2
+ PROPERTIES (
+ "enable_unique_key_merge_on_write" = false,
+ "replication_num" = "1"
+ );
+ """
+
+ sql """create materialized view mv1 as select key1 from mvTestUni;"""
+ Thread.sleep(1000)
+ sql """create materialized view mv6 as select key2, value2, value3 from mvTestUni;"""
+ Thread.sleep(1000)
+ sql """insert into mvTestUni values (1, 2, 3, 4, 5), (1, 2, 3, 7, 8), (1, 11, 22, 33, 44), (10, 20, 30, 40, 50), (10, 20, 30, 40, 50), (100, 200, 300, 400, 500), (1001, 2001, 3001, 4001, 5001);"""
+
+ sql """analyze table mvTestUni with sync;"""
+
+ sql """analyze table mvTestUni with sync;"""
+ result_sample = sql """show column stats mvTestUni"""
+ assertEquals(9, result_sample.size())
+
+ result_sample = sql """show column stats mvTestUni(key1)"""
+ assertEquals(1, result_sample.size())
+ assertEquals("key1", result_sample[0][0])
+ assertEquals("N/A", result_sample[0][1])
+ assertEquals("5.0", result_sample[0][2])
+ assertEquals("4.0", result_sample[0][3])
+ assertEquals("1", result_sample[0][7])
+ assertEquals("1001", result_sample[0][8])
+ assertEquals("FULL", result_sample[0][9])
+
+ result_sample = sql """show column stats mvTestUni(mv_key1)"""
+ assertEquals(1, result_sample.size())
+ assertEquals("mv_key1", result_sample[0][0])
+ assertEquals("mv1", result_sample[0][1])
+ assertEquals("4.0", result_sample[0][2])
+ assertEquals("4.0", result_sample[0][3])
+ assertEquals("1", result_sample[0][7])
+ assertEquals("1001", result_sample[0][8])
+ assertEquals("FULL", result_sample[0][9])
+
+ result_sample = sql """show column stats mvTestUni(mv_value2)"""
+ assertEquals(1, result_sample.size())
+ assertEquals("mv_value2", result_sample[0][0])
+ assertEquals("mv6", result_sample[0][1])
+ assertEquals("5.0", result_sample[0][2])
+ assertEquals("5.0", result_sample[0][3])
+ assertEquals("7", result_sample[0][7])
+ assertEquals("4001", result_sample[0][8])
+ assertEquals("FULL", result_sample[0][9])
+
+ sql """drop database if exists test_analyze_mv"""
+}
+
diff --git a/regression-test/suites/statistics/test_basic_statistics.groovy b/regression-test/suites/statistics/test_basic_statistics.groovy
index 6ee54baa942..b6cbc25cc8b 100644
--- a/regression-test/suites/statistics/test_basic_statistics.groovy
+++ b/regression-test/suites/statistics/test_basic_statistics.groovy
@@ -48,26 +48,26 @@ suite("test_basic_statistics") {
sql """ analyze table ${tbl} with sync"""
def result = sql """show column stats ${tbl} (id)"""
- assertTrue(result.size() == 1)
- assertTrue(result[0][0] == "id")
- assertTrue(result[0][1] == "9.0")
- assertTrue(result[0][2] == "9.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "36.0")
- assertTrue(result[0][5] == "4.0")
- assertTrue(result[0][6] == "1")
- assertTrue(result[0][7] == "9")
+ assertEquals(result.size(), 1)
+ assertEquals(result[0][0], "id")
+ assertEquals(result[0][2], "9.0")
+ assertEquals(result[0][3], "9.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "36.0")
+ assertEquals(result[0][6], "4.0")
+ assertEquals(result[0][7], "1")
+ assertEquals(result[0][8], "9")
result = sql """show column stats ${tbl} (name)"""
- assertTrue(result.size() == 1)
- assertTrue(result[0][0] == "name")
- assertTrue(result[0][1] == "9.0")
- assertTrue(result[0][2] == "9.0")
- assertTrue(result[0][3] == "0.0")
- assertTrue(result[0][4] == "45.0")
- assertTrue(result[0][5] == "5.0")
- assertTrue(result[0][6] == "\'name1\'")
- assertTrue(result[0][7] == "\'name9\'")
+ assertEquals(result.size(), 1)
+ assertEquals(result[0][0], "name")
+ assertEquals(result[0][2], "9.0")
+ assertEquals(result[0][3], "9.0")
+ assertEquals(result[0][4], "0.0")
+ assertEquals(result[0][5], "45.0")
+ assertEquals(result[0][6], "5.0")
+ assertEquals(result[0][7], "\'name1\'")
+ assertEquals(result[0][8], "\'name9\'")
sql """drop stats ${tbl}"""
sql """drop table ${tbl}"""
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org
(doris) 08/08: [Enhancement](fuction) change function REPEAT nullable mode (#30743)
Posted by yi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
commit 48aaaa80058a86ce93eefed28803123dfb19a88b
Author: koarz <66...@users.noreply.github.com>
AuthorDate: Sun Feb 4 22:19:30 2024 +0800
[Enhancement](fuction) change function REPEAT nullable mode (#30743)
---
be/src/vec/functions/function_string.cpp | 1 +
be/src/vec/functions/function_string.h | 123 ++++++++++++++++++---
.../trees/expressions/functions/scalar/Repeat.java | 4 +-
gensrc/script/doris_builtins_functions.py | 4 +-
4 files changed, 112 insertions(+), 20 deletions(-)
diff --git a/be/src/vec/functions/function_string.cpp b/be/src/vec/functions/function_string.cpp
index 6965139a1c8..c5ce208d26f 100644
--- a/be/src/vec/functions/function_string.cpp
+++ b/be/src/vec/functions/function_string.cpp
@@ -1021,6 +1021,7 @@ void register_function_string(SimpleFunctionFactory& factory) {
factory.register_alternative_function<FunctionLeftOld>();
factory.register_alternative_function<FunctionRightOld>();
factory.register_alternative_function<FunctionSubstringIndexOld>();
+ factory.register_alternative_function<FunctionStringRepeatOld>();
factory.register_alias(FunctionLeft::name, "strleft");
factory.register_alias(FunctionRight::name, "strright");
diff --git a/be/src/vec/functions/function_string.h b/be/src/vec/functions/function_string.h
index 6fc84074ddb..4794d28e0e0 100644
--- a/be/src/vec/functions/function_string.h
+++ b/be/src/vec/functions/function_string.h
@@ -1031,7 +1031,6 @@ public:
DataTypePtr get_return_type_impl(const DataTypes& arguments) const override {
return std::make_shared<DataTypeString>();
}
- bool use_default_implementation_for_nulls() const override { return true; }
Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
size_t result, size_t input_rows_count) const override {
@@ -1051,7 +1050,7 @@ public:
for (int i = 0; i < argument_size; ++i) {
argument_columns[i] =
block.get_by_position(arguments[i]).column->convert_to_full_column_if_const();
- auto col_str = assert_cast<const ColumnString*>(argument_columns[i].get());
+ const auto* col_str = assert_cast<const ColumnString*>(argument_columns[i].get());
offsets_list[i] = &col_str->get_offsets();
chars_list[i] = &col_str->get_chars();
}
@@ -1084,8 +1083,8 @@ public:
for (size_t i = 0; i < input_rows_count; ++i) {
int current_length = 0;
for (size_t j = 0; j < offsets_list.size(); ++j) {
- auto& current_offsets = *offsets_list[j];
- auto& current_chars = *chars_list[j];
+ const auto& current_offsets = *offsets_list[j];
+ const auto& current_chars = *chars_list[j];
int size = current_offsets[i] - current_offsets[i - 1];
if (size > 0) {
@@ -1431,6 +1430,103 @@ public:
String get_name() const override { return name; }
size_t get_number_of_arguments() const override { return 2; }
+ DataTypePtr get_return_type_impl(const DataTypes& arguments) const override {
+ return std::make_shared<DataTypeString>();
+ }
+ Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
+ size_t result, size_t input_rows_count) const override {
+ DCHECK_EQ(arguments.size(), 2);
+ auto res = ColumnString::create();
+
+ ColumnPtr argument_ptr[2];
+ argument_ptr[0] =
+ block.get_by_position(arguments[0]).column->convert_to_full_column_if_const();
+ argument_ptr[1] = block.get_by_position(arguments[1]).column;
+
+ if (auto* col1 = check_and_get_column<ColumnString>(*argument_ptr[0])) {
+ if (auto* col2 = check_and_get_column<ColumnInt32>(*argument_ptr[1])) {
+ vector_vector(col1->get_chars(), col1->get_offsets(), col2->get_data(),
+ res->get_chars(), res->get_offsets(),
+ context->state()->repeat_max_num());
+ block.replace_by_position(result, std::move(res));
+ return Status::OK();
+ } else if (auto* col2_const = check_and_get_column<ColumnConst>(*argument_ptr[1])) {
+ DCHECK(check_and_get_column<ColumnInt32>(col2_const->get_data_column()));
+ int repeat = 0;
+ repeat = std::min<int>(col2_const->get_int(0), context->state()->repeat_max_num());
+
+ if (repeat <= 0) {
+ res->insert_many_defaults(input_rows_count);
+ } else {
+ vector_const(col1->get_chars(), col1->get_offsets(), repeat, res->get_chars(),
+ res->get_offsets());
+ }
+ block.replace_by_position(result, std::move(res));
+ return Status::OK();
+ }
+ }
+
+ return Status::RuntimeError("repeat function get error param: {}, {}",
+ argument_ptr[0]->get_name(), argument_ptr[1]->get_name());
+ }
+
+ void vector_vector(const ColumnString::Chars& data, const ColumnString::Offsets& offsets,
+ const ColumnInt32::Container& repeats, ColumnString::Chars& res_data,
+ ColumnString::Offsets& res_offsets, const int repeat_max_num) const {
+ size_t input_row_size = offsets.size();
+
+ fmt::memory_buffer buffer;
+ res_offsets.resize(input_row_size);
+ for (ssize_t i = 0; i < input_row_size; ++i) {
+ buffer.clear();
+ const char* raw_str = reinterpret_cast<const char*>(&data[offsets[i - 1]]);
+ size_t size = offsets[i] - offsets[i - 1];
+ int repeat = 0;
+ repeat = std::min<int>(repeats[i], repeat_max_num);
+
+ if (repeat <= 0) {
+ StringOP::push_empty_string(i, res_data, res_offsets);
+ } else {
+ for (int j = 0; j < repeat; ++j) {
+ buffer.append(raw_str, raw_str + size);
+ }
+ StringOP::push_value_string(std::string_view(buffer.data(), buffer.size()), i,
+ res_data, res_offsets);
+ }
+ }
+ }
+
+ // TODO: 1. use pmr::vector<char> replace fmt_buffer may speed up the code
+ // 2. abstract the `vector_vector` and `vector_const`
+ // 3. rethink we should use `DEFAULT_MAX_STRING_SIZE` to bigger here
+ void vector_const(const ColumnString::Chars& data, const ColumnString::Offsets& offsets,
+ int repeat, ColumnString::Chars& res_data,
+ ColumnString::Offsets& res_offsets) const {
+ size_t input_row_size = offsets.size();
+
+ fmt::memory_buffer buffer;
+ res_offsets.resize(input_row_size);
+ for (ssize_t i = 0; i < input_row_size; ++i) {
+ buffer.clear();
+ const char* raw_str = reinterpret_cast<const char*>(&data[offsets[i - 1]]);
+ size_t size = offsets[i] - offsets[i - 1];
+
+ for (int j = 0; j < repeat; ++j) {
+ buffer.append(raw_str, raw_str + size);
+ }
+ StringOP::push_value_string(std::string_view(buffer.data(), buffer.size()), i, res_data,
+ res_offsets);
+ }
+ }
+};
+
+class FunctionStringRepeatOld : public IFunction {
+public:
+ static constexpr auto name = "repeat";
+ static FunctionPtr create() { return std::make_shared<FunctionStringRepeatOld>(); }
+ String get_name() const override { return name; }
+ size_t get_number_of_arguments() const override { return 2; }
+
DataTypePtr get_return_type_impl(const DataTypes& arguments) const override {
return make_nullable(std::make_shared<DataTypeString>());
}
@@ -1545,7 +1641,6 @@ public:
DataTypePtr get_return_type_impl(const DataTypes& arguments) const override {
return make_nullable(std::make_shared<DataTypeString>());
}
- bool use_default_implementation_for_nulls() const override { return true; }
Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
size_t result, size_t input_rows_count) const override {
@@ -1688,8 +1783,6 @@ public:
return make_nullable(std::make_shared<DataTypeString>());
}
- bool use_default_implementation_for_nulls() const override { return true; }
-
Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
size_t result, size_t input_rows_count) const override {
DCHECK_EQ(arguments.size(), 3);
@@ -2003,7 +2096,7 @@ public:
class FunctionSubstringIndexOld : public IFunction {
public:
static constexpr auto name = "substring_index";
- static FunctionPtr create() { return std::make_shared<FunctionSubstringIndex>(); }
+ static FunctionPtr create() { return std::make_shared<FunctionSubstringIndexOld>(); }
String get_name() const override { return name; }
size_t get_number_of_arguments() const override { return 3; }
@@ -2160,7 +2253,6 @@ public:
return Status::OK();
}
};
-
class FunctionSplitByString : public IFunction {
public:
static constexpr auto name = "split_by_string";
@@ -2205,17 +2297,17 @@ public:
dest_offsets.reserve(0);
NullMapType* dest_nested_null_map = nullptr;
- ColumnNullable* dest_nullable_col = reinterpret_cast<ColumnNullable*>(dest_nested_column);
+ auto* dest_nullable_col = reinterpret_cast<ColumnNullable*>(dest_nested_column);
dest_nested_column = dest_nullable_col->get_nested_column_ptr();
dest_nested_null_map = &dest_nullable_col->get_null_map_column().get_data();
- auto col_left = check_and_get_column<ColumnString>(src_column.get());
+ const auto* col_left = check_and_get_column<ColumnString>(src_column.get());
if (!col_left) {
return Status::InternalError("Left operator of function {} can not be {}", get_name(),
src_column_type->get_name());
}
- auto col_right = check_and_get_column<ColumnString>(right_column.get());
+ const auto* col_right = check_and_get_column<ColumnString>(right_column.get());
if (!col_right) {
return Status::InternalError("Right operator of function {} can not be {}", get_name(),
right_column_type->get_name());
@@ -2245,7 +2337,7 @@ private:
const StringRef& delimiter_ref, IColumn& dest_nested_column,
ColumnArray::Offsets64& dest_offsets,
NullMapType* dest_nested_null_map) const {
- ColumnString& dest_column_string = reinterpret_cast<ColumnString&>(dest_nested_column);
+ auto& dest_column_string = reinterpret_cast<ColumnString&>(dest_nested_column);
ColumnString::Chars& column_string_chars = dest_column_string.get_chars();
ColumnString::Offsets& column_string_offsets = dest_column_string.get_offsets();
column_string_chars.reserve(0);
@@ -2312,7 +2404,7 @@ private:
const ColumnString& delimiter_column, IColumn& dest_nested_column,
ColumnArray::Offsets64& dest_offsets,
NullMapType* dest_nested_null_map) const {
- ColumnString& dest_column_string = reinterpret_cast<ColumnString&>(dest_nested_column);
+ auto& dest_column_string = reinterpret_cast<ColumnString&>(dest_nested_column);
ColumnString::Chars& column_string_chars = dest_column_string.get_chars();
ColumnString::Offsets& column_string_offsets = dest_column_string.get_offsets();
column_string_chars.reserve(0);
@@ -2369,7 +2461,7 @@ private:
IColumn& dest_nested_column,
ColumnArray::Offsets64& dest_offsets,
NullMapType* dest_nested_null_map) const {
- ColumnString& dest_column_string = reinterpret_cast<ColumnString&>(dest_nested_column);
+ auto& dest_column_string = reinterpret_cast<ColumnString&>(dest_nested_column);
ColumnString::Chars& column_string_chars = dest_column_string.get_chars();
ColumnString::Offsets& column_string_offsets = dest_column_string.get_offsets();
column_string_chars.reserve(0);
@@ -2659,7 +2751,6 @@ public:
DataTypePtr get_return_type_impl(const DataTypes& arguments) const override {
return make_nullable(std::make_shared<DataTypeString>());
}
- bool use_default_implementation_for_nulls() const override { return true; }
Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
size_t result, size_t input_rows_count) const override {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Repeat.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Repeat.java
index b85a812197f..918443e8161 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Repeat.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Repeat.java
@@ -19,8 +19,8 @@ package org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
-import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
+import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.IntegerType;
@@ -35,7 +35,7 @@ import java.util.List;
* ScalarFunction 'repeat'. This class is generated by GenerateFunction.
*/
public class Repeat extends ScalarFunction
- implements BinaryExpression, ExplicitlyCastableSignature, AlwaysNullable {
+ implements BinaryExpression, ExplicitlyCastableSignature, PropagateNullable {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(StringType.INSTANCE).args(StringType.INSTANCE, IntegerType.INSTANCE)
diff --git a/gensrc/script/doris_builtins_functions.py b/gensrc/script/doris_builtins_functions.py
index 722715da2c4..bd52ffe789d 100644
--- a/gensrc/script/doris_builtins_functions.py
+++ b/gensrc/script/doris_builtins_functions.py
@@ -1564,7 +1564,7 @@ visible_functions = {
[['null_or_empty'], 'BOOLEAN', ['VARCHAR'], 'ALWAYS_NOT_NULLABLE'],
[['not_null_or_empty'], 'BOOLEAN', ['VARCHAR'], 'ALWAYS_NOT_NULLABLE'],
[['space'], 'VARCHAR', ['INT'], ''],
- [['repeat'], 'VARCHAR', ['VARCHAR', 'INT'], 'ALWAYS_NULLABLE'],
+ [['repeat'], 'VARCHAR', ['VARCHAR', 'INT'], 'DEPEND_ON_ARGUMENT'],
[['lpad'], 'VARCHAR', ['VARCHAR', 'INT', 'VARCHAR'], 'ALWAYS_NULLABLE'],
[['rpad'], 'VARCHAR', ['VARCHAR', 'INT', 'VARCHAR'], 'ALWAYS_NULLABLE'],
[['append_trailing_char_if_absent'], 'VARCHAR', ['VARCHAR', 'VARCHAR'], 'ALWAYS_NULLABLE'],
@@ -1624,7 +1624,7 @@ visible_functions = {
[['null_or_empty'], 'BOOLEAN', ['STRING'], 'ALWAYS_NOT_NULLABLE'],
[['not_null_or_empty'], 'BOOLEAN', ['STRING'], 'ALWAYS_NOT_NULLABLE'],
[['space'], 'STRING', ['INT'], ''],
- [['repeat'], 'STRING', ['STRING', 'INT'], 'ALWAYS_NULLABLE'],
+ [['repeat'], 'STRING', ['STRING', 'INT'], 'DEPEND_ON_ARGUMENT'],
[['lpad'], 'STRING', ['STRING', 'INT', 'STRING'], 'ALWAYS_NULLABLE'],
[['rpad'], 'STRING', ['STRING', 'INT', 'STRING'], 'ALWAYS_NULLABLE'],
[['append_trailing_char_if_absent'], 'STRING', ['STRING', 'STRING'], 'ALWAYS_NULLABLE'],
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org
(doris) 02/08: [test](mtmv) Add materialized view availability regression test (#30769)
Posted by yi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
commit ccbcf879b5876aa306d7da44aea8ccadcb685fbb
Author: seawinde <14...@users.noreply.github.com>
AuthorDate: Sun Feb 4 14:39:17 2024 +0800
[test](mtmv) Add materialized view availability regression test (#30769)
Add materialized view availability regression test
when mv refresh_time is in the grace_period(unit is second), materialized view will be use to
query rewrite regardless of the base table is update or not
when mv refresh_time is out of the grace_period(unit is second), will check the base table is update or not
if update the materialized view will not be used to query rewrite
---
.../nereids/rules/exploration/mv/StructInfo.java | 5 +-
.../org/apache/doris/regression/suite/Suite.groovy | 38 ++
.../agg_with_roll_up/aggregate_with_roll_up.groovy | 92 ++--
.../aggregate_without_roll_up.groovy | 90 ++--
.../mv/availability/grace_period.groovy | 489 +++++++++++++++++++++
.../availability/materialized_view_switch.groovy | 155 +++++++
.../mv/join/dphyp_inner/inner_join_dphyp.groovy | 78 +---
.../mv/join/dphyp_outer/outer_join_dphyp.groovy | 76 +---
.../mv/join/inner/inner_join.groovy | 78 +---
.../mv/join/left_outer/outer_join.groovy | 80 +---
.../nereids_rules_p0/mv/ssb/mv_ssb_test.groovy | 65 +--
11 files changed, 831 insertions(+), 415 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/StructInfo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/StructInfo.java
index 6a5c82691e7..af874d37b11 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/StructInfo.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/StructInfo.java
@@ -177,8 +177,9 @@ public class StructInfo {
nodePlan.accept(RELATION_COLLECTOR, nodeRelations);
relationBuilder.addAll(nodeRelations);
// every node should only have one relation, this is for LogicalCompatibilityContext
- relationIdStructInfoNodeMap.put(nodeRelations.get(0).getRelationId(), (StructInfoNode) node);
-
+ if (!nodeRelations.isEmpty()) {
+ relationIdStructInfoNodeMap.put(nodeRelations.get(0).getRelationId(), (StructInfoNode) node);
+ }
// record expressions in node
if (structInfoNode.getExpressions() != null) {
structInfoNode.getExpressions().forEach(expression -> {
diff --git a/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy b/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
index 97dcb879b04..b5dde914199 100644
--- a/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
+++ b/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
@@ -1032,4 +1032,42 @@ class Suite implements GroovyInterceptable {
return result.values().toList()
}
+
+ def check_mv_rewrite_success = { db, mv_sql, query_sql, mv_name ->
+
+ sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
+ sql"""
+ CREATE MATERIALIZED VIEW ${mv_name}
+ BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
+ DISTRIBUTED BY RANDOM BUCKETS 2
+ PROPERTIES ('replication_num' = '1')
+ AS ${mv_sql}
+ """
+
+ def job_name = getJobName(db, mv_name);
+ waitingMTMVTaskFinished(job_name)
+ explain {
+ sql("${query_sql}")
+ contains("${mv_name}(${mv_name})")
+ }
+ }
+
+ def check_mv_rewrite_fail = { db, mv_sql, query_sql, mv_name ->
+
+ sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
+ sql"""
+ CREATE MATERIALIZED VIEW ${mv_name}
+ BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
+ DISTRIBUTED BY RANDOM BUCKETS 2
+ PROPERTIES ('replication_num' = '1')
+ AS ${mv_sql}
+ """
+
+ def job_name = getJobName(db, mv_name);
+ waitingMTMVTaskFinished(job_name)
+ explain {
+ sql("${query_sql}")
+ notContains("${mv_name}(${mv_name})")
+ }
+ }
}
diff --git a/regression-test/suites/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.groovy b/regression-test/suites/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.groovy
index eb4657f7863..bc2d9f13525 100644
--- a/regression-test/suites/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.groovy
+++ b/regression-test/suites/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.groovy
@@ -132,25 +132,6 @@ suite("aggregate_with_roll_up") {
(2, 3, 10, 11.01, 'supply2');
"""
- def check_rewrite = { mv_sql, query_sql, mv_name ->
-
- sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
- sql"""
- CREATE MATERIALIZED VIEW ${mv_name}
- BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
- DISTRIBUTED BY RANDOM BUCKETS 2
- PROPERTIES ('replication_num' = '1')
- AS ${mv_sql}
- """
-
- def job_name = getJobName(db, mv_name);
- waitingMTMVTaskFinished(job_name)
- explain {
- sql("${query_sql}")
- contains("${mv_name}(${mv_name})")
- }
- }
-
def check_rewrite_with_mv_partition = { mv_sql, query_sql, mv_name, partition_column ->
sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
@@ -193,25 +174,6 @@ suite("aggregate_with_roll_up") {
}
}
- def check_not_match = { mv_sql, query_sql, mv_name ->
-
- sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
- sql"""
- CREATE MATERIALIZED VIEW ${mv_name}
- BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
- DISTRIBUTED BY RANDOM BUCKETS 2
- PROPERTIES ('replication_num' = '1')
- AS ${mv_sql}
- """
-
- def job_name = getJobName(db, mv_name);
- waitingMTMVTaskFinished(job_name)
- explain {
- sql("${query_sql}")
- notContains("${mv_name}(${mv_name})")
- }
- }
-
// multi table
// filter inside + left + use roll up dimension
def mv13_0 = "select l_shipdate, o_orderdate, l_partkey, l_suppkey, " +
@@ -240,7 +202,7 @@ suite("aggregate_with_roll_up") {
"l_partkey, " +
"l_suppkey"
order_qt_query13_0_before "${query13_0}"
- check_rewrite(mv13_0, query13_0, "mv13_0")
+ check_mv_rewrite_success(db, mv13_0, query13_0, "mv13_0")
order_qt_query13_0_after "${query13_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv13_0"""
@@ -275,7 +237,7 @@ suite("aggregate_with_roll_up") {
l_suppkey;
"""
order_qt_query13_1_before "${query13_1}"
- check_not_match(mv13_1, query13_1, "mv13_1")
+ check_mv_rewrite_fail(db, mv13_1, query13_1, "mv13_1")
order_qt_query13_1_after "${query13_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv13_1"""
@@ -309,7 +271,7 @@ suite("aggregate_with_roll_up") {
"l_partkey, " +
"l_suppkey"
order_qt_query14_0_before "${query14_0}"
- check_rewrite(mv14_0, query14_0, "mv14_0")
+ check_mv_rewrite_success(db, mv14_0, query14_0, "mv14_0")
order_qt_query14_0_after "${query14_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv14_0"""
@@ -415,7 +377,7 @@ suite("aggregate_with_roll_up") {
"l_partkey, " +
"l_suppkey"
order_qt_query16_0_before "${query16_0}"
- check_rewrite(mv16_0, query16_0, "mv16_0")
+ check_mv_rewrite_success(db, mv16_0, query16_0, "mv16_0")
order_qt_query16_0_after "${query16_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv16_0"""
@@ -450,7 +412,7 @@ suite("aggregate_with_roll_up") {
l_suppkey;
"""
order_qt_query17_0_before "${query17_0}"
- check_rewrite(mv17_0, query17_0, "mv17_0")
+ check_mv_rewrite_success(db, mv17_0, query17_0, "mv17_0")
order_qt_query17_0_after "${query17_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv17_0"""
@@ -481,7 +443,7 @@ suite("aggregate_with_roll_up") {
"l_shipdate, " +
"l_suppkey"
order_qt_query18_0_before "${query18_0}"
- check_rewrite(mv18_0, query18_0, "mv18_0")
+ check_mv_rewrite_success(db, mv18_0, query18_0, "mv18_0")
order_qt_query18_0_after "${query18_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv18_0"""
@@ -503,7 +465,7 @@ suite("aggregate_with_roll_up") {
"l_partkey, " +
"l_suppkey"
order_qt_query19_0_before "${query19_0}"
- check_rewrite(mv19_0, query19_0, "mv19_0")
+ check_mv_rewrite_success(db, mv19_0, query19_0, "mv19_0")
order_qt_query19_0_after "${query19_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv19_0"""
@@ -534,7 +496,7 @@ suite("aggregate_with_roll_up") {
"l_partkey, " +
"l_suppkey"
order_qt_query19_1_before "${query19_1}"
- check_rewrite(mv19_1, query19_1, "mv19_1")
+ check_mv_rewrite_success(db, mv19_1, query19_1, "mv19_1")
order_qt_query19_1_after "${query19_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv19_1"""
@@ -568,7 +530,7 @@ suite("aggregate_with_roll_up") {
"o_orderdate, " +
"l_suppkey"
order_qt_query20_0_before "${query20_0}"
- check_rewrite(mv20_0, query20_0, "mv20_0")
+ check_mv_rewrite_success(db, mv20_0, query20_0, "mv20_0")
order_qt_query20_0_after "${query20_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv20_0"""
@@ -608,7 +570,7 @@ suite("aggregate_with_roll_up") {
l_suppkey;
"""
order_qt_query20_1_before "${query20_1}"
- check_rewrite(mv20_1, query20_1, "mv20_1")
+ check_mv_rewrite_success(db, mv20_1, query20_1, "mv20_1")
order_qt_query20_1_after "${query20_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv20_1"""
@@ -642,7 +604,7 @@ suite("aggregate_with_roll_up") {
"l_partkey, " +
"l_suppkey"
order_qt_query21_0_before "${query21_0}"
- check_rewrite(mv21_0, query21_0, "mv21_0")
+ check_mv_rewrite_success(db, mv21_0, query21_0, "mv21_0")
order_qt_query21_0_after "${query21_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv21_0"""
@@ -675,7 +637,7 @@ suite("aggregate_with_roll_up") {
"l_partkey, " +
"l_suppkey"
order_qt_query22_0_before "${query22_0}"
- check_rewrite(mv22_0, query22_0, "mv22_0")
+ check_mv_rewrite_success(db, mv22_0, query22_0, "mv22_0")
order_qt_query22_0_after "${query22_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv22_0"""
@@ -708,7 +670,7 @@ suite("aggregate_with_roll_up") {
"l_partkey, " +
"l_suppkey"
order_qt_query22_1_before "${query22_1}"
- check_rewrite(mv22_1, query22_1, "mv22_1")
+ check_mv_rewrite_success(db, mv22_1, query22_1, "mv22_1")
order_qt_query22_1_after "${query22_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv22_1"""
@@ -742,7 +704,7 @@ suite("aggregate_with_roll_up") {
"l_partkey, " +
"l_suppkey"
order_qt_query23_0_before "${query23_0}"
- check_rewrite(mv23_0, query23_0, "mv23_0")
+ check_mv_rewrite_success(db, mv23_0, query23_0, "mv23_0")
order_qt_query23_0_after "${query23_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv23_0"""
@@ -774,7 +736,7 @@ suite("aggregate_with_roll_up") {
"l_shipdate, " +
"l_suppkey"
order_qt_query24_0_before "${query24_0}"
- check_rewrite(mv24_0, query24_0, "mv24_0")
+ check_mv_rewrite_success(db, mv24_0, query24_0, "mv24_0")
order_qt_query24_0_after "${query24_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv24_0"""
@@ -805,7 +767,7 @@ suite("aggregate_with_roll_up") {
"l_partkey, " +
"l_suppkey"
order_qt_query25_0_before "${query25_0}"
- check_rewrite(mv25_0, query25_0, "mv25_0")
+ check_mv_rewrite_success(db, mv25_0, query25_0, "mv25_0")
order_qt_query25_0_after "${query25_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv25_0"""
@@ -842,7 +804,7 @@ suite("aggregate_with_roll_up") {
l_suppkey;
"""
order_qt_query25_1_before "${query25_1}"
- check_rewrite(mv25_1, query25_1, "mv25_1")
+ check_mv_rewrite_success(db, mv25_1, query25_1, "mv25_1")
order_qt_query25_1_after "${query25_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv25_1"""
@@ -881,7 +843,7 @@ suite("aggregate_with_roll_up") {
l_suppkey;
"""
order_qt_query25_2_before "${query25_2}"
- check_rewrite(mv25_2, query25_2, "mv25_2")
+ check_mv_rewrite_success(db, mv25_2, query25_2, "mv25_2")
order_qt_query25_2_after "${query25_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv25_2"""
@@ -922,7 +884,7 @@ suite("aggregate_with_roll_up") {
l_suppkey + l_partkey;
"""
order_qt_query25_3_before "${query25_3}"
- check_rewrite(mv25_3, query25_3, "mv25_3")
+ check_mv_rewrite_success(db, mv25_3, query25_3, "mv25_3")
order_qt_query25_3_after "${query25_3}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv25_3"""
@@ -950,7 +912,7 @@ suite("aggregate_with_roll_up") {
"""
order_qt_query25_4_before "${query25_4}"
- check_rewrite(mv25_4, query25_4, "mv25_4")
+ check_mv_rewrite_success(db, mv25_4, query25_4, "mv25_4")
order_qt_query25_4_after "${query25_4}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv25_4"""
@@ -1056,7 +1018,7 @@ suite("aggregate_with_roll_up") {
o_shippriority;
"""
order_qt_query26_0_before "${query26_0}"
- check_not_match(mv26_0, query26_0, "mv26_0")
+ check_mv_rewrite_fail(db, mv26_0, query26_0, "mv26_0")
order_qt_query26_0_after "${query26_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv26_0"""
@@ -1090,7 +1052,7 @@ suite("aggregate_with_roll_up") {
o_shippriority;
"""
order_qt_query27_0_before "${query27_0}"
- check_not_match(mv27_0, query27_0, "mv27_0")
+ check_mv_rewrite_fail(db, mv27_0, query27_0, "mv27_0")
order_qt_query27_0_after "${query27_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv27_0"""
@@ -1131,7 +1093,7 @@ suite("aggregate_with_roll_up") {
limit 10;
"""
order_qt_query28_0_before "${query28_0}"
- check_rewrite(mv28_0, query28_0, "mv28_0")
+ check_mv_rewrite_success(db, mv28_0, query28_0, "mv28_0")
order_qt_query28_0_after "${query28_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv28_0"""
@@ -1160,7 +1122,7 @@ suite("aggregate_with_roll_up") {
) as t;
"""
order_qt_query29_0_before "${query29_0}"
- check_rewrite(mv29_0, query29_0, "mv29_0")
+ check_mv_rewrite_success(db, mv29_0, query29_0, "mv29_0")
order_qt_query29_0_after "${query29_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv29_0"""
@@ -1187,7 +1149,7 @@ suite("aggregate_with_roll_up") {
"""
order_qt_query29_1_before "${query29_1}"
- check_rewrite(mv29_1, query29_1, "mv29_1")
+ check_mv_rewrite_success(db, mv29_1, query29_1, "mv29_1")
order_qt_query29_1_after "${query29_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv29_1"""
@@ -1213,7 +1175,7 @@ suite("aggregate_with_roll_up") {
left join orders on l_orderkey = o_orderkey and l_shipdate = o_orderdate;
"""
order_qt_query29_2_before "${query29_2}"
- check_rewrite(mv29_2, query29_2, "mv29_2")
+ check_mv_rewrite_success(db, mv29_2, query29_2, "mv29_2")
order_qt_query29_2_after "${query29_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv29_2"""
@@ -1260,7 +1222,7 @@ suite("aggregate_with_roll_up") {
group by l_linenumber;
"""
order_qt_query30_0_before "${query30_0}"
- check_not_match(mv30_0, query30_0, "mv30_0")
+ check_mv_rewrite_fail(db, mv30_0, query30_0, "mv30_0")
order_qt_query30_0_after "${query30_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv30_0"""
}
diff --git a/regression-test/suites/nereids_rules_p0/mv/agg_without_roll_up/aggregate_without_roll_up.groovy b/regression-test/suites/nereids_rules_p0/mv/agg_without_roll_up/aggregate_without_roll_up.groovy
index 07675365fcd..95ea99bc190 100644
--- a/regression-test/suites/nereids_rules_p0/mv/agg_without_roll_up/aggregate_without_roll_up.groovy
+++ b/regression-test/suites/nereids_rules_p0/mv/agg_without_roll_up/aggregate_without_roll_up.groovy
@@ -134,44 +134,6 @@ suite("aggregate_without_roll_up") {
(2, 3, 10, 11.01, 'supply2');
"""
- def check_rewrite = { mv_sql, query_sql, mv_name ->
-
- sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
- sql"""
- CREATE MATERIALIZED VIEW ${mv_name}
- BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
- DISTRIBUTED BY RANDOM BUCKETS 2
- PROPERTIES ('replication_num' = '1')
- AS ${mv_sql}
- """
-
- def job_name = getJobName(db, mv_name);
- waitingMTMVTaskFinished(job_name)
- explain {
- sql("${query_sql}")
- contains("${mv_name}(${mv_name})")
- }
- }
-
- def check_not_match = { mv_sql, query_sql, mv_name ->
-
- sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
- sql"""
- CREATE MATERIALIZED VIEW ${mv_name}
- BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
- DISTRIBUTED BY RANDOM BUCKETS 2
- PROPERTIES ('replication_num' = '1')
- AS ${mv_sql}
- """
-
- def job_name = getJobName(db, mv_name);
- waitingMTMVTaskFinished(job_name)
- explain {
- sql("${query_sql}")
- notContains("${mv_name}(${mv_name})")
- }
- }
-
// single table
// with filter
def mv1_0 = "select o_shippriority, o_comment, " +
@@ -198,7 +160,7 @@ suite("aggregate_without_roll_up") {
"o_shippriority, " +
"o_comment "
order_qt_query1_0_before "${query1_0}"
- check_rewrite(mv1_0, query1_0, "mv1_0")
+ check_mv_rewrite_success(db, mv1_0, query1_0, "mv1_0")
order_qt_query1_0_after "${query1_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_0"""
@@ -253,7 +215,7 @@ suite("aggregate_without_roll_up") {
"O_SHIPPRIORITY, " +
"O_COMMENT "
order_qt_query1_1_before "${query1_1}"
- check_rewrite(mv1_1, query1_1, "mv1_1")
+ check_mv_rewrite_success(db, mv1_1, query1_1, "mv1_1")
order_qt_query1_1_after "${query1_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_1"""
@@ -306,7 +268,7 @@ suite("aggregate_without_roll_up") {
"O_SHIPPRIORITY, " +
"O_COMMENT "
order_qt_query1_2_before "${query1_2}"
- check_rewrite(mv1_2, query1_2, "mv1_2")
+ check_mv_rewrite_success(db, mv1_2, query1_2, "mv1_2")
order_qt_query1_2_after "${query1_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_2"""
@@ -353,7 +315,7 @@ suite("aggregate_without_roll_up") {
"O_SHIPPRIORITY, " +
"O_COMMENT "
order_qt_query2_0_before "${query2_0}"
- check_rewrite(mv2_0, query2_0, "mv2_0")
+ check_mv_rewrite_success(db, mv2_0, query2_0, "mv2_0")
order_qt_query2_0_after "${query2_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_0"""
@@ -400,7 +362,7 @@ suite("aggregate_without_roll_up") {
"from orders " +
"where O_ORDERDATE < '2023-12-30' and O_ORDERDATE > '2023-12-01'"
order_qt_query3_0_before "${query3_0}"
- check_rewrite(mv3_0, query3_0, "mv3_0")
+ check_mv_rewrite_success(db, mv3_0, query3_0, "mv3_0")
order_qt_query3_0_after "${query3_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_0"""
@@ -432,7 +394,7 @@ suite("aggregate_without_roll_up") {
"l_partkey, " +
"l_suppkey"
order_qt_query13_0_before "${query13_0}"
- check_rewrite(mv13_0, query13_0, "mv13_0")
+ check_mv_rewrite_success(db, mv13_0, query13_0, "mv13_0")
order_qt_query13_0_after "${query13_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv13_0"""
@@ -465,7 +427,7 @@ suite("aggregate_without_roll_up") {
"l_partkey, " +
"l_suppkey"
order_qt_query14_0_before "${query14_0}"
- check_rewrite(mv14_0, query14_0, "mv14_0")
+ check_mv_rewrite_success(db, mv14_0, query14_0, "mv14_0")
order_qt_query14_0_after "${query14_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv14_0"""
@@ -498,7 +460,7 @@ suite("aggregate_without_roll_up") {
"l_partkey, " +
"l_suppkey"
order_qt_query15_0_before "${query15_0}"
- check_rewrite(mv15_0, query15_0, "mv15_0")
+ check_mv_rewrite_success(db, mv15_0, query15_0, "mv15_0")
order_qt_query15_0_after "${query15_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv15_0"""
@@ -535,7 +497,7 @@ suite("aggregate_without_roll_up") {
l_suppkey;
"""
order_qt_query15_1_before "${query15_1}"
- check_rewrite(mv15_1, query15_1, "mv15_1")
+ check_mv_rewrite_success(db, mv15_1, query15_1, "mv15_1")
order_qt_query15_0_after "${query15_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv15_1"""
@@ -566,7 +528,7 @@ suite("aggregate_without_roll_up") {
"l_partkey, " +
"l_suppkey"
order_qt_query16_0_before "${query16_0}"
- check_rewrite(mv16_0, query16_0, "mv16_0")
+ check_mv_rewrite_success(db, mv16_0, query16_0, "mv16_0")
order_qt_query16_0_after "${query16_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv16_0"""
@@ -600,7 +562,7 @@ suite("aggregate_without_roll_up") {
l_suppkey;
"""
order_qt_query16_1_before "${query16_1}"
- check_not_match(mv16_1, query16_1, "mv16_1")
+ check_mv_rewrite_fail(db, mv16_1, query16_1, "mv16_1")
order_qt_query16_1_after "${query16_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv16_1"""
@@ -631,7 +593,7 @@ suite("aggregate_without_roll_up") {
"l_partkey, " +
"l_suppkey"
order_qt_query17_0_before "${query17_0}"
- check_rewrite(mv17_0, query17_0, "mv17_0")
+ check_mv_rewrite_success(db, mv17_0, query17_0, "mv17_0")
order_qt_query17_0_after "${query17_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv17_0"""
@@ -690,7 +652,7 @@ suite("aggregate_without_roll_up") {
"orders.O_SHIPPRIORITY, " +
"orders.O_COMMENT "
order_qt_query17_1_before "${query17_1}"
- check_rewrite(mv17_1, query17_1, "mv17_1")
+ check_mv_rewrite_success(db, mv17_1, query17_1, "mv17_1")
order_qt_query17_1_after "${query17_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv17_1"""
@@ -719,7 +681,7 @@ suite("aggregate_without_roll_up") {
"l_shipdate, " +
"l_suppkey"
order_qt_query18_0_before "${query18_0}"
- check_rewrite(mv18_0, query18_0, "mv18_0")
+ check_mv_rewrite_success(db, mv18_0, query18_0, "mv18_0")
order_qt_query18_0_after "${query18_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv18_0"""
@@ -734,7 +696,7 @@ suite("aggregate_without_roll_up") {
"where o_custkey = 2 and l_linenumber = 4 " +
"group by l_linenumber, o_custkey "
order_qt_query18_1_before "${query18_1}"
- check_rewrite(mv18_1, query18_1, "mv18_1")
+ check_mv_rewrite_success(db, mv18_1, query18_1, "mv18_1")
order_qt_query18_1_after "${query18_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv18_1"""
@@ -749,7 +711,7 @@ suite("aggregate_without_roll_up") {
"where o_custkey = 2 and l_suppkey= 3 " +
"group by lineitem.l_linenumber, orders.o_custkey "
order_qt_query18_2_before "${query18_2}"
- check_not_match(mv18_2, query18_2, "mv18_2")
+ check_mv_rewrite_fail(db, mv18_2, query18_2, "mv18_2")
order_qt_query18_2_after "${query18_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv18_2"""
@@ -778,7 +740,7 @@ suite("aggregate_without_roll_up") {
"l_partkey, " +
"l_suppkey"
order_qt_query19_0_before "${query19_0}"
- check_rewrite(mv19_0, query19_0, "mv19_0")
+ check_mv_rewrite_success(db, mv19_0, query19_0, "mv19_0")
order_qt_query19_0_after "${query19_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv19_0"""
@@ -792,7 +754,7 @@ suite("aggregate_without_roll_up") {
"inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"group by lineitem.L_LINENUMBER, orders.O_CUSTKEY "
order_qt_query19_1_before "${query19_1}"
- check_rewrite(mv19_1, query19_1, "mv19_1")
+ check_mv_rewrite_success(db, mv19_1, query19_1, "mv19_1")
order_qt_query19_1_after "${query19_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv19_1"""
@@ -838,7 +800,7 @@ suite("aggregate_without_roll_up") {
l_suppkey;
"""
order_qt_query19_2_before "${query19_2}"
- check_rewrite(mv19_2, query19_2, "mv19_2")
+ check_mv_rewrite_success(db, mv19_2, query19_2, "mv19_2")
order_qt_query19_2_after "${query19_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv19_2"""
@@ -874,7 +836,7 @@ suite("aggregate_without_roll_up") {
l_suppkey;
"""
order_qt_query19_3_before "${query19_3}"
- check_rewrite(mv19_3, query19_3, "mv19_3")
+ check_mv_rewrite_success(db, mv19_3, query19_3, "mv19_3")
order_qt_query19_3_after "${query19_3}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv19_0"""
@@ -923,7 +885,7 @@ suite("aggregate_without_roll_up") {
"on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where orders.O_ORDERDATE < '2023-12-30' and orders.O_ORDERDATE > '2023-12-01' "
order_qt_query20_0_before "${query20_0}"
- check_rewrite(mv20_0, query20_0, "mv20_0")
+ check_mv_rewrite_success(db, mv20_0, query20_0, "mv20_0")
order_qt_query20_0_after "${query20_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv20_0"""
@@ -952,7 +914,7 @@ suite("aggregate_without_roll_up") {
on lineitem.L_ORDERKEY = orders.O_ORDERKEY
"""
order_qt_query20_1_before "${query20_1}"
- check_not_match(mv20_1, query20_1, "mv20_1")
+ check_mv_rewrite_fail(db, mv20_1, query20_1, "mv20_1")
order_qt_query20_1_after "${query20_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv20_1"""
@@ -980,7 +942,7 @@ suite("aggregate_without_roll_up") {
l_shipinstruct;
"""
order_qt_query20_2_before "${query20_2}"
- check_not_match(mv20_2, query20_2, "mv20_2")
+ check_mv_rewrite_fail(db, mv20_2, query20_2, "mv20_2")
order_qt_query20_2_after "${query20_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv20_2"""
@@ -1024,7 +986,7 @@ suite("aggregate_without_roll_up") {
group by l_linenumber;
"""
order_qt_query21_0_before "${query21_0}"
- check_rewrite(mv21_0, query21_0, "mv21_0")
+ check_mv_rewrite_success(db, mv21_0, query21_0, "mv21_0")
order_qt_query21_0_after "${query21_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv21_0"""
@@ -1068,7 +1030,7 @@ suite("aggregate_without_roll_up") {
group by l_linenumber;
"""
order_qt_query21_1_before "${query21_1}"
- check_not_match(mv21_1, query21_1, "mv21_1")
+ check_mv_rewrite_fail(db, mv21_1, query21_1, "mv21_1")
order_qt_query21_1_after "${query21_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv21_1"""
@@ -1113,7 +1075,7 @@ suite("aggregate_without_roll_up") {
group by l_linenumber;
"""
order_qt_query21_2_before "${query21_2}"
- check_not_match(mv21_2, query21_2, "mv21_2")
+ check_mv_rewrite_fail(db, mv21_2, query21_2, "mv21_2")
order_qt_query21_2_after "${query21_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv21_2"""
}
diff --git a/regression-test/suites/nereids_rules_p0/mv/availability/grace_period.groovy b/regression-test/suites/nereids_rules_p0/mv/availability/grace_period.groovy
new file mode 100644
index 00000000000..e90a5e8bc7b
--- /dev/null
+++ b/regression-test/suites/nereids_rules_p0/mv/availability/grace_period.groovy
@@ -0,0 +1,489 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("grace_period") {
+
+ // when mv refresh_time is in the grace_period(unit is second), materialized view will be use to
+ // query rewrite regardless of the base table is update or not
+ // when mv refresh_time is out of the grace_period(unit is second), will check the base table is update or not
+ // if update will not be used to query rewrite
+ String db = context.config.getDbNameByFile(context.file)
+ sql "use ${db}"
+ sql "SET enable_nereids_planner=true"
+ sql "set runtime_filter_mode=OFF"
+ sql "SET enable_fallback_to_original_planner=false"
+ sql "SET enable_materialized_view_rewrite=true"
+ sql "SET enable_nereids_timeout = false"
+
+ sql """
+ drop table if exists orders
+ """
+ sql """
+ CREATE TABLE IF NOT EXISTS orders_partition (
+ o_orderkey integer not null,
+ o_custkey integer not null,
+ o_orderstatus char(1) not null,
+ o_totalprice decimalv3(15,2) not null,
+ o_orderdate date not null,
+ o_orderpriority char(15) not null,
+ o_clerk char(15) not null,
+ o_shippriority integer not null,
+ o_comment varchar(79) not null
+ )
+ DUPLICATE KEY(o_orderkey, o_custkey)
+ PARTITION BY RANGE(o_orderdate)(
+ FROM ('2023-10-17') TO ('2023-10-20') INTERVAL 1 DAY
+ )
+ DISTRIBUTED BY HASH(o_orderkey) BUCKETS 3
+ PROPERTIES (
+ "replication_num" = "1"
+ );
+ """
+
+ sql """
+ drop table if exists lineitem
+ """
+
+ sql """
+ CREATE TABLE IF NOT EXISTS lineitem_partition (
+ l_orderkey integer not null,
+ l_partkey integer not null,
+ l_suppkey integer not null,
+ l_linenumber integer not null,
+ l_quantity decimalv3(15,2) not null,
+ l_extendedprice decimalv3(15,2) not null,
+ l_discount decimalv3(15,2) not null,
+ l_tax decimalv3(15,2) not null,
+ l_returnflag char(1) not null,
+ l_linestatus char(1) not null,
+ l_shipdate date not null,
+ l_commitdate date not null,
+ l_receiptdate date not null,
+ l_shipinstruct char(25) not null,
+ l_shipmode char(10) not null,
+ l_comment varchar(44) not null
+ )
+ DUPLICATE KEY(l_orderkey, l_partkey, l_suppkey, l_linenumber)
+ PARTITION BY RANGE(l_shipdate)
+ (FROM ('2023-10-17') TO ('2023-10-20') INTERVAL 1 DAY)
+ DISTRIBUTED BY HASH(l_orderkey) BUCKETS 3
+ PROPERTIES (
+ "replication_num" = "1"
+ );
+ """
+
+ sql """
+ insert into orders_partition values
+ (1, 1, 'ok', 99.5, '2023-10-17', 'a', 'b', 1, 'yy'),
+ (2, 2, 'ok', 109.2, '2023-10-18', 'c','d',2, 'mm'),
+ (3, 3, 'ok', 99.5, '2023-10-19', 'a', 'b', 1, 'yy');
+ """
+
+ sql """
+ insert into lineitem_partition values
+ (1, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy'),
+ (2, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-18', '2023-10-18', '2023-10-18', 'a', 'b', 'yyyyyyyyy'),
+ (3, 2, 3, 6, 7.5, 8.5, 9.5, 10.5, 'k', 'o', '2023-10-19', '2023-10-19', '2023-10-19', 'c', 'd', 'xxxxxxxxx');
+ """
+
+
+ def create_partition_mv = { mv_name, mv_sql, grace_period, partition_field ->
+ sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
+ sql"""
+ CREATE MATERIALIZED VIEW ${mv_name}
+ BUILD IMMEDIATE REFRESH AUTO ON MANUAL
+ partition by(${partition_field})
+ DISTRIBUTED BY RANDOM BUCKETS 2
+ PROPERTIES ('replication_num' = '1', 'grace_period'= '${grace_period}')
+ AS ${mv_sql}
+ """
+ def job_name = getJobName(db, mv_name);
+ waitingMTMVTaskFinished(job_name)
+ }
+
+
+ def create_un_partition_mv = { mv_name, mv_sql, grace_period ->
+ sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
+ sql"""
+ CREATE MATERIALIZED VIEW ${mv_name}
+ BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
+ DISTRIBUTED BY RANDOM BUCKETS 2
+ PROPERTIES ('replication_num' = '1', 'grace_period'= '${grace_period}')
+ AS ${mv_sql}
+ """
+ def job_name = getJobName(db, mv_name);
+ waitingMTMVTaskFinished(job_name)
+ }
+
+
+ def mv_partition_consistent_name = "mv_partition_consistent"
+ create_partition_mv(mv_partition_consistent_name,
+ """
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey""",
+ 0,
+ "l_shipdate")
+
+ sql """
+ insert into lineitem_partition values
+ (1, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy');
+ """
+
+ // force consistency when partition table, and query use the partition changed, should fail
+ explain {
+ sql("""
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ where l_shipdate = '2023-10-17'
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """)
+ notContains("${mv_partition_consistent_name}(${mv_partition_consistent_name})")
+ }
+ // force consistency when partition table, and query doesn't use the partition changed, should success
+ explain {
+ sql("""
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ where l_shipdate = '2023-10-18'
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """)
+ contains("${mv_partition_consistent_name}(${mv_partition_consistent_name})")
+ }
+ sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_partition_consistent_name}"""
+
+
+
+
+ def mv_un_partition_consistent_name = "mv_un_partition_consistent"
+ create_un_partition_mv(mv_un_partition_consistent_name,
+ """
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey""",
+ 0)
+ sql """
+ insert into lineitem_partition values
+ (1, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy');
+ """
+ // force consistency when un partition table, and query use the partition changed, should fail
+ explain {
+ sql("""
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ where l_shipdate = '2023-10-17'
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """)
+ notContains("${mv_un_partition_consistent_name}(${mv_un_partition_consistent_name})")
+ }
+
+ // force consistency when un partition table, and query use the partition changed, should fail
+ explain {
+ sql("""
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ where l_shipdate = '2023-10-18'
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """)
+ notContains("${mv_un_partition_consistent_name}(${mv_un_partition_consistent_name})")
+ }
+ sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_un_partition_consistent_name}"""
+
+
+
+
+ def mv_partition_allow_staleness_name = "mv_partition_allow_staleness"
+ create_partition_mv(mv_partition_allow_staleness_name,
+ """
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey""",
+ 15,
+ "l_shipdate")
+
+ sql """
+ insert into lineitem_partition values
+ (1, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy');
+ """
+
+ // allow 10s staleness when partition table, and query use the partition changed, should success
+ explain {
+ sql("""
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ where l_shipdate = '2023-10-17'
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """)
+ contains("${mv_partition_allow_staleness_name}(${mv_partition_allow_staleness_name})")
+ }
+ // allow 10s staleness when partition table, and query doesn't use the partition changed, should success
+ explain {
+ sql("""
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ where l_shipdate = '2023-10-18'
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """)
+ contains("${mv_partition_allow_staleness_name}(${mv_partition_allow_staleness_name})")
+ }
+ sql "SET enable_materialized_view_rewrite=false"
+ // allow 10s staleness when partition table, and query use the partition changed, should success,
+ // but disable materialized view rewrite, should fail
+ explain {
+ sql("""
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ where l_shipdate = '2023-10-17'
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """)
+ notContains("${mv_partition_allow_staleness_name}(${mv_partition_allow_staleness_name})")
+ }
+ // allow 10s staleness when partition table, and query doesn't use the partition changed,
+ // but disable materialized view rewrite, should fail
+ explain {
+ sql("""
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ where l_shipdate = '2023-10-18'
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """)
+ notContains("${mv_partition_allow_staleness_name}(${mv_partition_allow_staleness_name})")
+ }
+ sql "SET enable_materialized_view_rewrite=true"
+ Thread.sleep(15000);
+ // after 10s when partition table, and query use the partition changed, should fail
+ explain {
+ sql("""
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ where l_shipdate = '2023-10-17'
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """)
+ notContains("${mv_partition_allow_staleness_name}(${mv_partition_allow_staleness_name})")
+ }
+ // after 10s when partition table, and query doesn't use the partition changed, should success
+ explain {
+ sql("""
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ where l_shipdate = '2023-10-18'
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """)
+ contains("${mv_partition_allow_staleness_name}(${mv_partition_allow_staleness_name})")
+ }
+ sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_partition_allow_staleness_name}"""
+
+
+
+
+ def mv_un_partition_allow_staleness_name = "mv_un_partition_allow_staleness"
+ create_un_partition_mv(mv_un_partition_allow_staleness_name,
+ """
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey""",
+ 15)
+
+ sql """
+ insert into lineitem_partition values
+ (1, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy');
+ """
+ // allow 10s staleness when un partition table should success
+ explain {
+ sql("""
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ where l_shipdate = '2023-10-17'
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """)
+ contains("${mv_un_partition_allow_staleness_name}(${mv_un_partition_allow_staleness_name})")
+ }
+ // allow 10s staleness when un partition table, should success
+ explain {
+ sql("""
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ where l_shipdate = '2023-10-18'
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """)
+ contains("${mv_un_partition_allow_staleness_name}(${mv_un_partition_allow_staleness_name})")
+ }
+ sql "SET enable_materialized_view_rewrite=false"
+ // allow 10s staleness when un partition table, but disable materialized view rewrite, should fail
+ explain {
+ sql("""
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ where l_shipdate = '2023-10-17'
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """)
+ notContains("${mv_un_partition_allow_staleness_name}(${mv_un_partition_allow_staleness_name})")
+ }
+ // allow 10s staleness when un partition table, but disable materialized view rewrite, should fail
+ explain {
+ sql("""
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ where l_shipdate = '2023-10-18'
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """)
+ notContains("${mv_un_partition_allow_staleness_name}(${mv_un_partition_allow_staleness_name})")
+ }
+ sql "SET enable_materialized_view_rewrite=true"
+ Thread.sleep(15000);
+ // after 10s when un partition table, and query use the partition changed, should fail
+ explain {
+ sql("""
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ where l_shipdate = '2023-10-17'
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """)
+ notContains("${mv_un_partition_allow_staleness_name}(${mv_un_partition_allow_staleness_name})")
+ }
+ // after 10s when un partition table, and query doesn't use the partition changed, should fail
+ explain {
+ sql("""
+ select l_shipdate, o_orderdate, l_partkey,
+ l_suppkey, sum(o_totalprice) as sum_total
+ from lineitem_partition
+ left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ where l_shipdate = '2023-10-18'
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """)
+ notContains("${mv_un_partition_allow_staleness_name}(${mv_un_partition_allow_staleness_name})")
+ }
+ sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_un_partition_allow_staleness_name}"""
+}
diff --git a/regression-test/suites/nereids_rules_p0/mv/availability/materialized_view_switch.groovy b/regression-test/suites/nereids_rules_p0/mv/availability/materialized_view_switch.groovy
new file mode 100644
index 00000000000..29bd112e76f
--- /dev/null
+++ b/regression-test/suites/nereids_rules_p0/mv/availability/materialized_view_switch.groovy
@@ -0,0 +1,155 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("materialized_view_switch") {
+
+ String db = context.config.getDbNameByFile(context.file)
+ sql "use ${db}"
+ sql "SET enable_nereids_planner=true"
+ sql "set runtime_filter_mode=OFF";
+ sql "SET ignore_shape_nodes='PhysicalDistribute,PhysicalProject'"
+ sql "SET enable_fallback_to_original_planner=false"
+ sql "SET enable_materialized_view_rewrite=true"
+
+ sql """
+ drop table if exists orders
+ """
+
+ sql """
+ CREATE TABLE IF NOT EXISTS orders (
+ o_orderkey INTEGER NOT NULL,
+ o_custkey INTEGER NOT NULL,
+ o_orderstatus CHAR(1) NOT NULL,
+ o_totalprice DECIMALV3(15,2) NOT NULL,
+ o_orderdate DATE NOT NULL,
+ o_orderpriority CHAR(15) NOT NULL,
+ o_clerk CHAR(15) NOT NULL,
+ o_shippriority INTEGER NOT NULL,
+ O_COMMENT VARCHAR(79) NOT NULL
+ )
+ DUPLICATE KEY(o_orderkey, o_custkey)
+ PARTITION BY RANGE(o_orderdate) (
+ PARTITION `day_2` VALUES LESS THAN ('2023-12-9'),
+ PARTITION `day_3` VALUES LESS THAN ("2023-12-11"),
+ PARTITION `day_4` VALUES LESS THAN ("2023-12-30")
+ )
+ DISTRIBUTED BY HASH(o_orderkey) BUCKETS 3
+ PROPERTIES (
+ "replication_num" = "1"
+ );
+ """
+
+ sql """
+ drop table if exists lineitem
+ """
+
+ sql"""
+ CREATE TABLE IF NOT EXISTS lineitem (
+ l_orderkey INTEGER NOT NULL,
+ l_partkey INTEGER NOT NULL,
+ l_suppkey INTEGER NOT NULL,
+ l_linenumber INTEGER NOT NULL,
+ l_quantity DECIMALV3(15,2) NOT NULL,
+ l_extendedprice DECIMALV3(15,2) NOT NULL,
+ l_discount DECIMALV3(15,2) NOT NULL,
+ l_tax DECIMALV3(15,2) NOT NULL,
+ l_returnflag CHAR(1) NOT NULL,
+ l_linestatus CHAR(1) NOT NULL,
+ l_shipdate DATE NOT NULL,
+ l_commitdate DATE NOT NULL,
+ l_receiptdate DATE NOT NULL,
+ l_shipinstruct CHAR(25) NOT NULL,
+ l_shipmode CHAR(10) NOT NULL,
+ l_comment VARCHAR(44) NOT NULL
+ )
+ DUPLICATE KEY(l_orderkey, l_partkey, l_suppkey, l_linenumber)
+ PARTITION BY RANGE(l_shipdate) (
+ PARTITION `day_1` VALUES LESS THAN ('2023-12-9'),
+ PARTITION `day_2` VALUES LESS THAN ("2023-12-11"),
+ PARTITION `day_3` VALUES LESS THAN ("2023-12-30"))
+ DISTRIBUTED BY HASH(l_orderkey) BUCKETS 3
+ PROPERTIES (
+ "replication_num" = "1"
+ )
+ """
+
+ sql """
+ drop table if exists partsupp
+ """
+
+ sql """
+ CREATE TABLE IF NOT EXISTS partsupp (
+ ps_partkey INTEGER NOT NULL,
+ ps_suppkey INTEGER NOT NULL,
+ ps_availqty INTEGER NOT NULL,
+ ps_supplycost DECIMALV3(15,2) NOT NULL,
+ ps_comment VARCHAR(199) NOT NULL
+ )
+ DUPLICATE KEY(ps_partkey, ps_suppkey)
+ DISTRIBUTED BY HASH(ps_partkey) BUCKETS 3
+ PROPERTIES (
+ "replication_num" = "1"
+ )
+ """
+
+ sql """ insert into lineitem values
+ (1, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-12-08', '2023-12-09', '2023-12-10', 'a', 'b', 'yyyyyyyyy'),
+ (2, 4, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-12-09', '2023-12-09', '2023-12-10', 'a', 'b', 'yyyyyyyyy'),
+ (3, 2, 4, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-12-10', '2023-12-09', '2023-12-10', 'a', 'b', 'yyyyyyyyy'),
+ (4, 3, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-12-11', '2023-12-09', '2023-12-10', 'a', 'b', 'yyyyyyyyy'),
+ (5, 2, 3, 6, 7.5, 8.5, 9.5, 10.5, 'k', 'o', '2023-12-12', '2023-12-12', '2023-12-13', 'c', 'd', 'xxxxxxxxx');
+ """
+
+ sql """
+ insert into orders values
+ (1, 1, 'o', 9.5, '2023-12-08', 'a', 'b', 1, 'yy'),
+ (1, 1, 'o', 10.5, '2023-12-08', 'a', 'b', 1, 'yy'),
+ (2, 1, 'o', 11.5, '2023-12-09', 'a', 'b', 1, 'yy'),
+ (3, 1, 'o', 12.5, '2023-12-10', 'a', 'b', 1, 'yy'),
+ (3, 1, 'o', 33.5, '2023-12-10', 'a', 'b', 1, 'yy'),
+ (4, 2, 'o', 43.2, '2023-12-11', 'c','d',2, 'mm'),
+ (5, 2, 'o', 56.2, '2023-12-12', 'c','d',2, 'mi'),
+ (5, 2, 'o', 1.2, '2023-12-12', 'c','d',2, 'mi');
+ """
+
+ sql """
+ insert into partsupp values
+ (2, 3, 9, 10.01, 'supply1'),
+ (2, 3, 10, 11.01, 'supply2');
+ """
+
+ def mv_name = """
+ select l_shipdate, o_orderdate, l_partkey, l_suppkey, o_orderkey
+ from lineitem
+ left join (select * from orders where o_orderdate = '2023-12-10' ) t2
+ on lineitem.l_orderkey = t2.o_orderkey;
+ """
+ def query = """
+ select l_shipdate, o_orderdate, l_partkey, l_suppkey, o_orderkey
+ from lineitem
+ left join orders
+ on lineitem.l_orderkey = orders.o_orderkey
+ where o_orderdate = '2023-12-10' order by 1, 2, 3, 4, 5;
+ """
+
+ check_mv_rewrite_success(db, mv_name, query, "mv_name")
+ sql "SET enable_materialized_view_rewrite=false"
+ check_mv_rewrite_fail(db, mv_name, query, "mv_name")
+ sql "SET enable_materialized_view_rewrite=true"
+ check_mv_rewrite_success(db, mv_name, query, "mv_name")
+ sql """ DROP MATERIALIZED VIEW IF EXISTS mv_name"""
+}
\ No newline at end of file
diff --git a/regression-test/suites/nereids_rules_p0/mv/join/dphyp_inner/inner_join_dphyp.groovy b/regression-test/suites/nereids_rules_p0/mv/join/dphyp_inner/inner_join_dphyp.groovy
index 5fd8db4bcdc..95e5dbed7a7 100644
--- a/regression-test/suites/nereids_rules_p0/mv/join/dphyp_inner/inner_join_dphyp.groovy
+++ b/regression-test/suites/nereids_rules_p0/mv/join/dphyp_inner/inner_join_dphyp.groovy
@@ -125,44 +125,6 @@ suite("inner_join_dphyp") {
(2, 3, 10, 11.01, 'supply2');
"""
- def check_rewrite = { mv_sql, query_sql, mv_name ->
-
- sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
- sql"""
- CREATE MATERIALIZED VIEW ${mv_name}
- BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
- DISTRIBUTED BY RANDOM BUCKETS 2
- PROPERTIES ('replication_num' = '1')
- AS ${mv_sql}
- """
-
- def job_name = getJobName(db, mv_name);
- waitingMTMVTaskFinished(job_name)
- explain {
- sql("${query_sql}")
- contains("${mv_name}(${mv_name})")
- }
- }
-
- def check_not_match = { mv_sql, query_sql, mv_name ->
-
- sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
- sql"""
- CREATE MATERIALIZED VIEW ${mv_name}
- BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
- DISTRIBUTED BY RANDOM BUCKETS 2
- PROPERTIES ('replication_num' = '1')
- AS ${mv_sql}
- """
-
- def job_name = getJobName(db, mv_name);
- waitingMTMVTaskFinished(job_name)
- explain {
- sql("${query_sql}")
- notContains("${mv_name}(${mv_name})")
- }
- }
-
// without filter
def mv1_0 = "select lineitem.L_LINENUMBER, orders.O_CUSTKEY " +
"from lineitem " +
@@ -171,7 +133,7 @@ suite("inner_join_dphyp") {
"from lineitem " +
"inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY "
order_qt_query1_0_before "${query1_0}"
- check_rewrite(mv1_0, query1_0, "mv1_0")
+ check_mv_rewrite_success(db, mv1_0, query1_0, "mv1_0")
order_qt_query1_0_after "${query1_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_0"""
@@ -187,7 +149,7 @@ suite("inner_join_dphyp") {
"inner join partsupp on lineitem.L_PARTKEY = partsupp.PS_PARTKEY " +
"and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY"
order_qt_query1_1_before "${query1_1}"
- check_rewrite(mv1_1, query1_1, "mv1_1")
+ check_mv_rewrite_success(db, mv1_1, query1_1, "mv1_1")
order_qt_query1_1_after "${query1_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_1"""
@@ -199,7 +161,7 @@ suite("inner_join_dphyp") {
"inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY "
order_qt_query1_2_before "${query1_2}"
// join direction is not same, should not match
- check_rewrite(mv1_2, query1_2, "mv1_2")
+ check_mv_rewrite_success(db, mv1_2, query1_2, "mv1_2")
order_qt_query1_2_after "${query1_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_2"""
@@ -212,7 +174,7 @@ suite("inner_join_dphyp") {
"from orders " +
"inner join lineitem on orders.O_ORDERKEY = lineitem.L_ORDERKEY"
order_qt_query1_3_before "${query1_3}"
- check_rewrite(mv1_3, query1_3, "mv1_3")
+ check_mv_rewrite_success(db, mv1_3, query1_3, "mv1_3")
order_qt_query1_3_after "${query1_3}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_3"""
@@ -231,7 +193,7 @@ suite("inner_join_dphyp") {
and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY;
"""
order_qt_query1_4_before "${query1_4}"
- check_rewrite(mv1_4, query1_4, "mv1_4")
+ check_mv_rewrite_success(db, mv1_4, query1_4, "mv1_4")
order_qt_query1_4_after "${query1_4}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_4"""
@@ -247,7 +209,7 @@ suite("inner_join_dphyp") {
and o_shippriority = l_partkey;
"""
order_qt_query1_5_before "${query1_5}"
- check_rewrite(mv1_5, query1_5, "mv1_5")
+ check_mv_rewrite_success(db, mv1_5, query1_5, "mv1_5")
order_qt_query1_5_after "${query1_5}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_5"""
@@ -260,7 +222,7 @@ suite("inner_join_dphyp") {
"inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where lineitem.L_LINENUMBER > 0"
order_qt_query2_0_before "${query2_0}"
- check_rewrite(mv2_0, query2_0, "mv2_0")
+ check_mv_rewrite_success(db, mv2_0, query2_0, "mv2_0")
order_qt_query2_0_after "${query2_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_0"""
@@ -273,7 +235,7 @@ suite("inner_join_dphyp") {
"inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where lineitem.L_LINENUMBER > 1"
order_qt_query2_1_before "${query2_1}"
- check_rewrite(mv2_1, query2_1, "mv2_1")
+ check_mv_rewrite_success(db, mv2_1, query2_1, "mv2_1")
order_qt_query2_1_after "${query2_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_1"""
@@ -286,7 +248,7 @@ suite("inner_join_dphyp") {
"inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where lineitem.L_LINENUMBER > 1 and l_suppkey = 3"
order_qt_query2_2_before "${query2_2}"
- check_rewrite(mv2_2, query2_2, "mv2_2")
+ check_mv_rewrite_success(db, mv2_2, query2_2, "mv2_2")
order_qt_query2_2_after "${query2_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_2"""
@@ -303,7 +265,7 @@ suite("inner_join_dphyp") {
"and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY " +
"where lineitem.L_LINENUMBER > 1 and l_suppkey = 3 "
order_qt_query2_3_before "${query2_3}"
- check_rewrite(mv2_3, query2_3, "mv2_3")
+ check_mv_rewrite_success(db, mv2_3, query2_3, "mv2_3")
order_qt_query2_3_after "${query2_3}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_3"""
@@ -318,7 +280,7 @@ suite("inner_join_dphyp") {
"where orders.O_ORDERSTATUS = 'o'"
order_qt_query3_0_before "${query3_0}"
// use a filed not from mv, should not success
- check_not_match(mv3_0, query3_0, "mv3_0")
+ check_mv_rewrite_fail(db, mv3_0, query3_0, "mv3_0")
order_qt_query3_0_after "${query3_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_0"""
@@ -331,7 +293,7 @@ suite("inner_join_dphyp") {
"inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where orders.O_ORDERSTATUS = 'o'"
order_qt_query3_1_before "${query3_1}"
- check_rewrite(mv3_1, query3_1, "mv3_1")
+ check_mv_rewrite_success(db, mv3_1, query3_1, "mv3_1")
order_qt_query3_1_after "${query3_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_1"""
@@ -346,7 +308,7 @@ suite("inner_join_dphyp") {
"inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where orders.O_ORDERSTATUS = 'o'"
order_qt_query3_2_before "${query3_2}"
- check_rewrite(mv3_2, query3_2, "mv3_2")
+ check_mv_rewrite_success(db, mv3_2, query3_2, "mv3_2")
order_qt_query3_2_after "${query3_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_2"""
@@ -363,7 +325,7 @@ suite("inner_join_dphyp") {
"and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY " +
"where o_custkey in (1, 2, 3, 4) "
order_qt_query3_3_before "${query3_3}"
- check_rewrite(mv3_3, query3_3, "mv3_3")
+ check_mv_rewrite_success(db, mv3_3, query3_3, "mv3_3")
order_qt_query3_3_after "${query3_3}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_3"""
@@ -383,7 +345,7 @@ suite("inner_join_dphyp") {
where o_custkey = 1 and l_linenumber > 0;
"""
order_qt_query3_4_before "${query3_4}"
- check_rewrite(mv3_4, query3_4, "mv3_4")
+ check_mv_rewrite_success(db, mv3_4, query3_4, "mv3_4")
order_qt_query3_4_after "${query3_4}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_4"""
@@ -397,7 +359,7 @@ suite("inner_join_dphyp") {
"inner join orders on lineitem.l_orderkey = orders.o_orderkey " +
"where o_orderstatus = 'o' AND l_linenumber in (1, 2, 3, 4, 5) "
order_qt_query4_0_before "${query4_0}"
- check_rewrite(mv4_0, query4_0, "mv4_0")
+ check_mv_rewrite_success(db, mv4_0, query4_0, "mv4_0")
order_qt_query4_0_after "${query4_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv4_0"""
@@ -411,7 +373,7 @@ suite("inner_join_dphyp") {
"from (select * from lineitem where l_linenumber > 1) t1 " +
"inner join orders on t1.l_orderkey = orders.O_ORDERKEY "
order_qt_query5_0_before "${query5_0}"
- check_rewrite(mv5_0, query5_0, "mv5_0")
+ check_mv_rewrite_success(db, mv5_0, query5_0, "mv5_0")
order_qt_query5_0_after "${query5_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_0"""
@@ -426,7 +388,7 @@ suite("inner_join_dphyp") {
"inner join (select * from orders where o_orderdate = '2023-12-08') t2 " +
"on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate "
order_qt_query6_0_before "${query6_0}"
- check_rewrite(mv6_0, query6_0, "mv6_0")
+ check_mv_rewrite_success(db, mv6_0, query6_0, "mv6_0")
order_qt_query6_0_after "${query6_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv6_0"""
@@ -443,7 +405,7 @@ suite("inner_join_dphyp") {
"on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate " +
"where l_partkey = 2"
order_qt_query7_0_before "${query7_0}"
- check_rewrite(mv7_0, query7_0, "mv7_0")
+ check_mv_rewrite_success(db, mv7_0, query7_0, "mv7_0")
order_qt_query7_0_after "${query7_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv7_0"""
@@ -458,7 +420,7 @@ suite("inner_join_dphyp") {
"WHERE lineitem.L_LINENUMBER > 0 AND orders.O_CUSTKEY = 1 AND " +
"orders.O_SHIPPRIORITY = 2"
order_qt_query10_0_before "${query10_0}"
- check_not_match(mv10_0, query10_0, "mv10_0")
+ check_mv_rewrite_fail(db, mv10_0, query10_0, "mv10_0")
order_qt_query10_0_after "${query10_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv10_0"""
}
diff --git a/regression-test/suites/nereids_rules_p0/mv/join/dphyp_outer/outer_join_dphyp.groovy b/regression-test/suites/nereids_rules_p0/mv/join/dphyp_outer/outer_join_dphyp.groovy
index dc9e78e00c6..69ffd60485b 100644
--- a/regression-test/suites/nereids_rules_p0/mv/join/dphyp_outer/outer_join_dphyp.groovy
+++ b/regression-test/suites/nereids_rules_p0/mv/join/dphyp_outer/outer_join_dphyp.groovy
@@ -125,44 +125,6 @@ suite("outer_join_dphyp") {
(2, 3, 10, 11.01, 'supply2');
"""
- def check_rewrite = { mv_sql, query_sql, mv_name ->
-
- sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
- sql"""
- CREATE MATERIALIZED VIEW ${mv_name}
- BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
- DISTRIBUTED BY RANDOM BUCKETS 2
- PROPERTIES ('replication_num' = '1')
- AS ${mv_sql}
- """
-
- def job_name = getJobName(db, mv_name);
- waitingMTMVTaskFinished(job_name)
- explain {
- sql("${query_sql}")
- contains("${mv_name}(${mv_name})")
- }
- }
-
- def check_not_match = { mv_sql, query_sql, mv_name ->
-
- sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
- sql"""
- CREATE MATERIALIZED VIEW ${mv_name}
- BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
- DISTRIBUTED BY RANDOM BUCKETS 2
- PROPERTIES ('replication_num' = '1')
- AS ${mv_sql}
- """
-
- def job_name = getJobName(db, mv_name);
- waitingMTMVTaskFinished(job_name)
- explain {
- sql("${query_sql}")
- notContains("${mv_name}(${mv_name})")
- }
- }
-
// without filter
def mv1_0 = "select lineitem.L_LINENUMBER, orders.O_CUSTKEY " +
"from lineitem " +
@@ -171,7 +133,7 @@ suite("outer_join_dphyp") {
"from lineitem " +
"left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY "
order_qt_query1_0_before "${query1_0}"
- check_rewrite(mv1_0, query1_0, "mv1_0")
+ check_mv_rewrite_success(db, mv1_0, query1_0, "mv1_0")
order_qt_query1_0_after "${query1_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_0"""
@@ -187,7 +149,7 @@ suite("outer_join_dphyp") {
"left join partsupp on lineitem.L_PARTKEY = partsupp.PS_PARTKEY " +
"and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY"
order_qt_query1_1_before "${query1_1}"
- check_rewrite(mv1_1, query1_1, "mv1_1")
+ check_mv_rewrite_success(db, mv1_1, query1_1, "mv1_1")
order_qt_query1_1_after "${query1_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_1"""
@@ -199,7 +161,7 @@ suite("outer_join_dphyp") {
"left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY "
order_qt_query1_2_before "${query1_2}"
// join direction is not same, should not match
- check_not_match(mv1_2, query1_2, "mv1_2")
+ check_mv_rewrite_fail(db, mv1_2, query1_2, "mv1_2")
order_qt_query1_2_after "${query1_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_2"""
@@ -212,7 +174,7 @@ suite("outer_join_dphyp") {
"from orders " +
"left join lineitem on orders.O_ORDERKEY = lineitem.L_ORDERKEY"
order_qt_query1_3_before "${query1_3}"
- check_rewrite(mv1_3, query1_3, "mv1_3")
+ check_mv_rewrite_success(db, mv1_3, query1_3, "mv1_3")
order_qt_query1_3_after "${query1_3}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_3"""
@@ -226,7 +188,7 @@ suite("outer_join_dphyp") {
"left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where lineitem.L_LINENUMBER > 0"
order_qt_query2_0_before "${query2_0}"
- check_not_match(mv2_0, query2_0, "mv2_0")
+ check_mv_rewrite_fail(db, mv2_0, query2_0, "mv2_0")
order_qt_query2_0_after "${query2_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_0"""
@@ -239,7 +201,7 @@ suite("outer_join_dphyp") {
"left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where lineitem.L_LINENUMBER > 1"
order_qt_query2_1_before "${query2_1}"
- check_rewrite(mv2_1, query2_1, "mv2_1")
+ check_mv_rewrite_success(db, mv2_1, query2_1, "mv2_1")
order_qt_query2_1_after "${query2_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_1"""
@@ -256,7 +218,7 @@ suite("outer_join_dphyp") {
where lineitem.L_LINENUMBER > 1 and l_suppkey = 3;
"""
order_qt_query2_2_before "${query2_2}"
- check_not_match(mv2_2, query2_2, "mv2_2")
+ check_mv_rewrite_fail(db, mv2_2, query2_2, "mv2_2")
order_qt_query2_2_after "${query2_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_2"""
@@ -273,7 +235,7 @@ suite("outer_join_dphyp") {
where lineitem.L_LINENUMBER > 1 and l_suppkey = 3;
"""
order_qt_query2_3_before "${query2_3}"
- check_rewrite(mv2_3, query2_3, "mv2_3")
+ check_mv_rewrite_success(db, mv2_3, query2_3, "mv2_3")
order_qt_query2_3_after "${query2_3}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_3"""
@@ -292,7 +254,7 @@ suite("outer_join_dphyp") {
"""
order_qt_query3_0_before "${query3_0}"
// use a filed not from mv, should not success
- check_not_match(mv3_0, query3_0, "mv3_0")
+ check_mv_rewrite_fail(db, mv3_0, query3_0, "mv3_0")
order_qt_query3_0_after "${query3_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_0"""
@@ -305,7 +267,7 @@ suite("outer_join_dphyp") {
"left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where orders.O_ORDERSTATUS = 'o'"
order_qt_query3_1_before "${query3_1}"
- check_rewrite(mv3_1, query3_1, "mv3_1")
+ check_mv_rewrite_success(db, mv3_1, query3_1, "mv3_1")
order_qt_query3_1_after "${query3_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_1"""
@@ -321,7 +283,7 @@ suite("outer_join_dphyp") {
"where orders.O_ORDERSTATUS = 'o'"
order_qt_query3_2_before "${query3_2}"
// should not success, as mv filter is under left outer input
- check_rewrite(mv3_2, query3_2, "mv3_2")
+ check_mv_rewrite_success(db, mv3_2, query3_2, "mv3_2")
order_qt_query3_2_after "${query3_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_2"""
@@ -339,7 +301,7 @@ suite("outer_join_dphyp") {
where o_orderstatus = 'o' AND o_orderkey = 1;
"""
order_qt_query4_0_before "${query4_0}"
- check_rewrite(mv4_0, query4_0, "mv4_0")
+ check_mv_rewrite_success(db, mv4_0, query4_0, "mv4_0")
order_qt_query4_0_after "${query4_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv4_0"""
@@ -353,7 +315,7 @@ suite("outer_join_dphyp") {
"from (select * from lineitem where l_linenumber > 1) t1 " +
"left join orders on t1.l_orderkey = orders.O_ORDERKEY "
order_qt_query5_0_before "${query5_0}"
- check_rewrite(mv5_0, query5_0, "mv5_0")
+ check_mv_rewrite_success(db, mv5_0, query5_0, "mv5_0")
order_qt_query5_0_after "${query5_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_0"""
@@ -372,7 +334,7 @@ suite("outer_join_dphyp") {
where o_orderdate = '2023-12-08'
"""
order_qt_query5_1_before "${query5_1}"
- check_not_match(mv5_1, query5_1, "mv5_1")
+ check_mv_rewrite_fail(db, mv5_1, query5_1, "mv5_1")
order_qt_query5_1_after "${query5_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_1"""
@@ -387,7 +349,7 @@ suite("outer_join_dphyp") {
"left join (select * from orders where o_orderdate = '2023-12-08') t2 " +
"on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate "
order_qt_query6_0_before "${query6_0}"
- check_rewrite(mv6_0, query6_0, "mv6_0")
+ check_mv_rewrite_success(db, mv6_0, query6_0, "mv6_0")
order_qt_query6_0_after "${query6_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv6_0"""
@@ -404,7 +366,7 @@ suite("outer_join_dphyp") {
"on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate " +
"where l_partkey = 3"
order_qt_query7_0_before "${query7_0}"
- check_rewrite(mv7_0, query7_0, "mv7_0")
+ check_mv_rewrite_success(db, mv7_0, query7_0, "mv7_0")
order_qt_query7_0_after "${query7_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv7_0"""
@@ -423,7 +385,7 @@ suite("outer_join_dphyp") {
on t1.l_orderkey = orders.o_orderkey;
"""
order_qt_query7_1_before "${query7_1}"
- check_not_match(mv7_1, query7_1, "mv7_1")
+ check_mv_rewrite_fail(db, mv7_1, query7_1, "mv7_1")
order_qt_query7_1_after "${query7_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv7_1"""
@@ -463,7 +425,7 @@ suite("outer_join_dphyp") {
group by a.o_orderkey;
"""
order_qt_query8_0_before "${query8_0}"
- check_rewrite(mv8_0, query8_0, "mv8_0")
+ check_mv_rewrite_success(db, mv8_0, query8_0, "mv8_0")
order_qt_query8_0_after "${query8_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv8_0"""
@@ -523,7 +485,7 @@ suite("outer_join_dphyp") {
t1.col1
"""
order_qt_query9_0_before "${query9_0}"
- check_rewrite(mv9_0, query9_0, "mv9_0")
+ check_mv_rewrite_success(db, mv9_0, query9_0, "mv9_0")
order_qt_query9_0_after "${query9_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv9_0"""
}
diff --git a/regression-test/suites/nereids_rules_p0/mv/join/inner/inner_join.groovy b/regression-test/suites/nereids_rules_p0/mv/join/inner/inner_join.groovy
index ed50e19c605..e34c338a7f3 100644
--- a/regression-test/suites/nereids_rules_p0/mv/join/inner/inner_join.groovy
+++ b/regression-test/suites/nereids_rules_p0/mv/join/inner/inner_join.groovy
@@ -124,44 +124,6 @@ suite("inner_join") {
(2, 3, 10, 11.01, 'supply2');
"""
- def check_rewrite = { mv_sql, query_sql, mv_name ->
-
- sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
- sql"""
- CREATE MATERIALIZED VIEW ${mv_name}
- BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
- DISTRIBUTED BY RANDOM BUCKETS 2
- PROPERTIES ('replication_num' = '1')
- AS ${mv_sql}
- """
-
- def job_name = getJobName(db, mv_name);
- waitingMTMVTaskFinished(job_name)
- explain {
- sql("${query_sql}")
- contains("${mv_name}(${mv_name})")
- }
- }
-
- def check_not_match = { mv_sql, query_sql, mv_name ->
-
- sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
- sql"""
- CREATE MATERIALIZED VIEW ${mv_name}
- BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
- DISTRIBUTED BY RANDOM BUCKETS 2
- PROPERTIES ('replication_num' = '1')
- AS ${mv_sql}
- """
-
- def job_name = getJobName(db, mv_name);
- waitingMTMVTaskFinished(job_name)
- explain {
- sql("${query_sql}")
- notContains("${mv_name}(${mv_name})")
- }
- }
-
// without filter
def mv1_0 = "select lineitem.L_LINENUMBER, orders.O_CUSTKEY " +
"from lineitem " +
@@ -170,7 +132,7 @@ suite("inner_join") {
"from lineitem " +
"inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY "
order_qt_query1_0_before "${query1_0}"
- check_rewrite(mv1_0, query1_0, "mv1_0")
+ check_mv_rewrite_success(db, mv1_0, query1_0, "mv1_0")
order_qt_query1_0_after "${query1_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_0"""
@@ -186,7 +148,7 @@ suite("inner_join") {
"inner join partsupp on lineitem.L_PARTKEY = partsupp.PS_PARTKEY " +
"and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY"
order_qt_query1_1_before "${query1_1}"
- check_rewrite(mv1_1, query1_1, "mv1_1")
+ check_mv_rewrite_success(db, mv1_1, query1_1, "mv1_1")
order_qt_query1_1_after "${query1_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_1"""
@@ -198,7 +160,7 @@ suite("inner_join") {
"inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY "
order_qt_query1_2_before "${query1_2}"
// join direction is not same, should not match
- check_rewrite(mv1_2, query1_2, "mv1_2")
+ check_mv_rewrite_success(db, mv1_2, query1_2, "mv1_2")
order_qt_query1_2_after "${query1_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_2"""
@@ -211,7 +173,7 @@ suite("inner_join") {
"from orders " +
"inner join lineitem on orders.O_ORDERKEY = lineitem.L_ORDERKEY"
order_qt_query1_3_before "${query1_3}"
- check_rewrite(mv1_3, query1_3, "mv1_3")
+ check_mv_rewrite_success(db, mv1_3, query1_3, "mv1_3")
order_qt_query1_3_after "${query1_3}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_3"""
@@ -230,7 +192,7 @@ suite("inner_join") {
and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY;
"""
order_qt_query1_4_before "${query1_4}"
- check_rewrite(mv1_4, query1_4, "mv1_4")
+ check_mv_rewrite_success(db, mv1_4, query1_4, "mv1_4")
order_qt_query1_4_after "${query1_4}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_4"""
@@ -246,7 +208,7 @@ suite("inner_join") {
and o_shippriority = l_partkey;
"""
order_qt_query1_5_before "${query1_5}"
- check_rewrite(mv1_5, query1_5, "mv1_5")
+ check_mv_rewrite_success(db, mv1_5, query1_5, "mv1_5")
order_qt_query1_5_after "${query1_5}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_5"""
@@ -259,7 +221,7 @@ suite("inner_join") {
"inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where lineitem.L_LINENUMBER > 0"
order_qt_query2_0_before "${query2_0}"
- check_rewrite(mv2_0, query2_0, "mv2_0")
+ check_mv_rewrite_success(db, mv2_0, query2_0, "mv2_0")
order_qt_query2_0_after "${query2_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_0"""
@@ -272,7 +234,7 @@ suite("inner_join") {
"inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where lineitem.L_LINENUMBER > 1"
order_qt_query2_1_before "${query2_1}"
- check_rewrite(mv2_1, query2_1, "mv2_1")
+ check_mv_rewrite_success(db, mv2_1, query2_1, "mv2_1")
order_qt_query2_1_after "${query2_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_1"""
@@ -285,7 +247,7 @@ suite("inner_join") {
"inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where lineitem.L_LINENUMBER > 1 and l_suppkey = 3"
order_qt_query2_2_before "${query2_2}"
- check_rewrite(mv2_2, query2_2, "mv2_2")
+ check_mv_rewrite_success(db, mv2_2, query2_2, "mv2_2")
order_qt_query2_2_after "${query2_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_2"""
@@ -302,7 +264,7 @@ suite("inner_join") {
"and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY " +
"where lineitem.L_LINENUMBER > 1 and l_suppkey = 3 "
order_qt_query2_3_before "${query2_3}"
- check_rewrite(mv2_3, query2_3, "mv2_3")
+ check_mv_rewrite_success(db, mv2_3, query2_3, "mv2_3")
order_qt_query2_3_after "${query2_3}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_3"""
@@ -317,7 +279,7 @@ suite("inner_join") {
"where orders.O_ORDERSTATUS = 'o'"
order_qt_query3_0_before "${query3_0}"
// use a filed not from mv, should not success
- check_not_match(mv3_0, query3_0, "mv3_0")
+ check_mv_rewrite_fail(db, mv3_0, query3_0, "mv3_0")
order_qt_query3_0_after "${query3_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_0"""
@@ -330,7 +292,7 @@ suite("inner_join") {
"inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where orders.O_ORDERSTATUS = 'o'"
order_qt_query3_1_before "${query3_1}"
- check_rewrite(mv3_1, query3_1, "mv3_1")
+ check_mv_rewrite_success(db, mv3_1, query3_1, "mv3_1")
order_qt_query3_1_after "${query3_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_1"""
@@ -345,7 +307,7 @@ suite("inner_join") {
"inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where orders.O_ORDERSTATUS = 'o'"
order_qt_query3_2_before "${query3_2}"
- check_rewrite(mv3_2, query3_2, "mv3_2")
+ check_mv_rewrite_success(db, mv3_2, query3_2, "mv3_2")
order_qt_query3_2_after "${query3_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_2"""
@@ -362,7 +324,7 @@ suite("inner_join") {
"and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY " +
"where o_custkey in (1, 2, 3, 4) "
order_qt_query3_3_before "${query3_3}"
- check_rewrite(mv3_3, query3_3, "mv3_3")
+ check_mv_rewrite_success(db, mv3_3, query3_3, "mv3_3")
order_qt_query3_3_after "${query3_3}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_3"""
@@ -382,7 +344,7 @@ suite("inner_join") {
where o_custkey = 1 and l_linenumber > 0;
"""
order_qt_query3_4_before "${query3_4}"
- check_rewrite(mv3_4, query3_4, "mv3_4")
+ check_mv_rewrite_success(db, mv3_4, query3_4, "mv3_4")
order_qt_query3_4_after "${query3_4}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_4"""
@@ -396,7 +358,7 @@ suite("inner_join") {
"inner join orders on lineitem.l_orderkey = orders.o_orderkey " +
"where o_orderstatus = 'o' AND l_linenumber in (1, 2, 3, 4, 5) "
order_qt_query4_0_before "${query4_0}"
- check_rewrite(mv4_0, query4_0, "mv4_0")
+ check_mv_rewrite_success(db, mv4_0, query4_0, "mv4_0")
order_qt_query4_0_after "${query4_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv4_0"""
@@ -410,7 +372,7 @@ suite("inner_join") {
"from (select * from lineitem where l_linenumber > 1) t1 " +
"inner join orders on t1.l_orderkey = orders.O_ORDERKEY "
order_qt_query5_0_before "${query5_0}"
- check_rewrite(mv5_0, query5_0, "mv5_0")
+ check_mv_rewrite_success(db, mv5_0, query5_0, "mv5_0")
order_qt_query5_0_after "${query5_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_0"""
@@ -425,7 +387,7 @@ suite("inner_join") {
"inner join (select * from orders where o_orderdate = '2023-12-08') t2 " +
"on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate "
order_qt_query6_0_before "${query6_0}"
- check_rewrite(mv6_0, query6_0, "mv6_0")
+ check_mv_rewrite_success(db, mv6_0, query6_0, "mv6_0")
order_qt_query6_0_after "${query6_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv6_0"""
@@ -442,7 +404,7 @@ suite("inner_join") {
"on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate " +
"where l_partkey = 2"
order_qt_query7_0_before "${query7_0}"
- check_rewrite(mv7_0, query7_0, "mv7_0")
+ check_mv_rewrite_success(db, mv7_0, query7_0, "mv7_0")
order_qt_query7_0_after "${query7_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv7_0"""
@@ -457,7 +419,7 @@ suite("inner_join") {
"WHERE lineitem.L_LINENUMBER > 0 AND orders.O_CUSTKEY = 1 AND " +
"orders.O_SHIPPRIORITY = 2"
order_qt_query10_0_before "${query10_0}"
- check_not_match(mv10_0, query10_0, "mv10_0")
+ check_mv_rewrite_fail(db, mv10_0, query10_0, "mv10_0")
order_qt_query10_0_after "${query10_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv10_0"""
}
diff --git a/regression-test/suites/nereids_rules_p0/mv/join/left_outer/outer_join.groovy b/regression-test/suites/nereids_rules_p0/mv/join/left_outer/outer_join.groovy
index 6a5bda9d22b..e2b9a8297ee 100644
--- a/regression-test/suites/nereids_rules_p0/mv/join/left_outer/outer_join.groovy
+++ b/regression-test/suites/nereids_rules_p0/mv/join/left_outer/outer_join.groovy
@@ -202,44 +202,6 @@ suite("outer_join") {
(2, 3, 10, 11.01, 'supply2');
"""
- def check_rewrite = { mv_sql, query_sql, mv_name ->
-
- sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
- sql"""
- CREATE MATERIALIZED VIEW ${mv_name}
- BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
- DISTRIBUTED BY RANDOM BUCKETS 2
- PROPERTIES ('replication_num' = '1')
- AS ${mv_sql}
- """
-
- def job_name = getJobName(db, mv_name);
- waitingMTMVTaskFinished(job_name)
- explain {
- sql("${query_sql}")
- contains("${mv_name}(${mv_name})")
- }
- }
-
- def check_not_match = { mv_sql, query_sql, mv_name ->
-
- sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
- sql"""
- CREATE MATERIALIZED VIEW ${mv_name}
- BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
- DISTRIBUTED BY RANDOM BUCKETS 2
- PROPERTIES ('replication_num' = '1')
- AS ${mv_sql}
- """
-
- def job_name = getJobName(db, mv_name);
- waitingMTMVTaskFinished(job_name)
- explain {
- sql("${query_sql}")
- notContains("${mv_name}(${mv_name})")
- }
- }
-
// without filter
def mv1_0 = "select lineitem.L_LINENUMBER, orders.O_CUSTKEY " +
"from lineitem " +
@@ -248,7 +210,7 @@ suite("outer_join") {
"from lineitem " +
"left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY "
order_qt_query1_0_before "${query1_0}"
- check_rewrite(mv1_0, query1_0, "mv1_0")
+ check_mv_rewrite_success(db, mv1_0, query1_0, "mv1_0")
order_qt_query1_0_after "${query1_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_0"""
@@ -264,7 +226,7 @@ suite("outer_join") {
"left join partsupp on lineitem.L_PARTKEY = partsupp.PS_PARTKEY " +
"and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY"
order_qt_query1_1_before "${query1_1}"
- check_rewrite(mv1_1, query1_1, "mv1_1")
+ check_mv_rewrite_success(db, mv1_1, query1_1, "mv1_1")
order_qt_query1_1_after "${query1_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_1"""
@@ -276,7 +238,7 @@ suite("outer_join") {
"left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY "
order_qt_query1_2_before "${query1_2}"
// join direction is not same, should not match
- check_not_match(mv1_2, query1_2, "mv1_2")
+ check_mv_rewrite_fail(db, mv1_2, query1_2, "mv1_2")
order_qt_query1_2_after "${query1_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_2"""
@@ -289,7 +251,7 @@ suite("outer_join") {
"from orders " +
"left join lineitem on orders.O_ORDERKEY = lineitem.L_ORDERKEY"
order_qt_query1_3_before "${query1_3}"
- check_rewrite(mv1_3, query1_3, "mv1_3")
+ check_mv_rewrite_success(db, mv1_3, query1_3, "mv1_3")
order_qt_query1_3_after "${query1_3}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_3"""
@@ -303,7 +265,7 @@ suite("outer_join") {
"left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where lineitem.L_LINENUMBER > 0"
order_qt_query2_0_before "${query2_0}"
- check_not_match(mv2_0, query2_0, "mv2_0")
+ check_mv_rewrite_fail(db, mv2_0, query2_0, "mv2_0")
order_qt_query2_0_after "${query2_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_0"""
@@ -316,7 +278,7 @@ suite("outer_join") {
"left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where lineitem.L_LINENUMBER > 1"
order_qt_query2_1_before "${query2_1}"
- check_rewrite(mv2_1, query2_1, "mv2_1")
+ check_mv_rewrite_success(db, mv2_1, query2_1, "mv2_1")
order_qt_query2_1_after "${query2_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_1"""
@@ -333,7 +295,7 @@ suite("outer_join") {
where lineitem.L_LINENUMBER > 1 and l_suppkey = 3;
"""
order_qt_query2_2_before "${query2_2}"
- check_not_match(mv2_2, query2_2, "mv2_2")
+ check_mv_rewrite_fail(db, mv2_2, query2_2, "mv2_2")
order_qt_query2_2_after "${query2_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_2"""
@@ -350,7 +312,7 @@ suite("outer_join") {
where lineitem.L_LINENUMBER > 1 and l_suppkey = 3;
"""
order_qt_query2_3_before "${query2_3}"
- check_rewrite(mv2_3, query2_3, "mv2_3")
+ check_mv_rewrite_success(db, mv2_3, query2_3, "mv2_3")
order_qt_query2_3_after "${query2_3}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_3"""
@@ -369,7 +331,7 @@ suite("outer_join") {
"""
order_qt_query3_0_before "${query3_0}"
// use a filed not from mv, should not success
- check_not_match(mv3_0, query3_0, "mv3_0")
+ check_mv_rewrite_fail(db, mv3_0, query3_0, "mv3_0")
order_qt_query3_0_after "${query3_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_0"""
@@ -382,7 +344,7 @@ suite("outer_join") {
"left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " +
"where orders.O_ORDERSTATUS = 'o'"
order_qt_query3_1_before "${query3_1}"
- check_rewrite(mv3_1, query3_1, "mv3_1")
+ check_mv_rewrite_success(db, mv3_1, query3_1, "mv3_1")
order_qt_query3_1_after "${query3_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_1"""
@@ -402,7 +364,7 @@ suite("outer_join") {
"""
order_qt_query3_2_before "${query3_2}"
// should not success, as mv filter is under left outer input
- check_rewrite(mv3_2, query3_2, "mv3_2")
+ check_mv_rewrite_success(db, mv3_2, query3_2, "mv3_2")
order_qt_query3_2_after "${query3_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_2"""
@@ -420,7 +382,7 @@ suite("outer_join") {
where o_orderstatus = 'o' AND o_orderkey = 1;
"""
order_qt_query4_0_before "${query4_0}"
- check_rewrite(mv4_0, query4_0, "mv4_0")
+ check_mv_rewrite_success(db, mv4_0, query4_0, "mv4_0")
order_qt_query4_0_after "${query4_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv4_0"""
@@ -434,7 +396,7 @@ suite("outer_join") {
"from (select * from lineitem where l_linenumber > 1) t1 " +
"left join orders on t1.l_orderkey = orders.O_ORDERKEY "
order_qt_query5_0_before "${query5_0}"
- check_rewrite(mv5_0, query5_0, "mv5_0")
+ check_mv_rewrite_success(db, mv5_0, query5_0, "mv5_0")
order_qt_query5_0_after "${query5_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_0"""
@@ -453,7 +415,7 @@ suite("outer_join") {
where o_orderdate = '2023-12-08'
"""
order_qt_query5_1_before "${query5_1}"
- check_not_match(mv5_1, query5_1, "mv5_1")
+ check_mv_rewrite_fail(db, mv5_1, query5_1, "mv5_1")
order_qt_query5_1_after "${query5_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_1"""
@@ -468,7 +430,7 @@ suite("outer_join") {
"left join (select * from orders where o_orderdate = '2023-12-08') t2 " +
"on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate "
order_qt_query6_0_before "${query6_0}"
- check_rewrite(mv6_0, query6_0, "mv6_0")
+ check_mv_rewrite_success(db, mv6_0, query6_0, "mv6_0")
order_qt_query6_0_after "${query6_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv6_0"""
@@ -487,7 +449,7 @@ suite("outer_join") {
where l_shipdate = '2023-12-10' and o_orderdate = '2023-12-10';
"""
order_qt_query6_1_before "${query6_1}"
- check_rewrite(mv6_1, query6_1, "mv6_1")
+ check_mv_rewrite_success(db, mv6_1, query6_1, "mv6_1")
order_qt_query6_1_after "${query6_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv6_1"""
@@ -507,7 +469,7 @@ suite("outer_join") {
where o_orderdate = '2023-12-10' order by 1, 2, 3, 4, 5;
"""
order_qt_query6_2_before "${query6_2}"
- check_rewrite(mv6_2, query6_2, "mv6_2")
+ check_mv_rewrite_success(db, mv6_2, query6_2, "mv6_2")
order_qt_query6_2_after "${query6_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv6_2"""
@@ -524,7 +486,7 @@ suite("outer_join") {
"on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate " +
"where l_partkey = 3"
order_qt_query7_0_before "${query7_0}"
- check_rewrite(mv7_0, query7_0, "mv7_0")
+ check_mv_rewrite_success(db, mv7_0, query7_0, "mv7_0")
order_qt_query7_0_after "${query7_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv7_0"""
@@ -543,7 +505,7 @@ suite("outer_join") {
on t1.l_orderkey = orders.o_orderkey;
"""
order_qt_query7_1_before "${query7_1}"
- check_not_match(mv7_1, query7_1, "mv7_1")
+ check_mv_rewrite_fail(db, mv7_1, query7_1, "mv7_1")
order_qt_query7_1_after "${query7_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv7_1"""
@@ -583,7 +545,7 @@ suite("outer_join") {
group by a.o_orderkey;
"""
order_qt_query8_0_before "${query8_0}"
- check_rewrite(mv8_0, query8_0, "mv8_0")
+ check_mv_rewrite_success(db, mv8_0, query8_0, "mv8_0")
order_qt_query8_0_after "${query8_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv8_0"""
@@ -644,7 +606,7 @@ suite("outer_join") {
t1.col1
"""
order_qt_query9_0_before "${query9_0}"
- check_rewrite(mv9_0, query9_0, "mv9_0")
+ check_mv_rewrite_success(db, mv9_0, query9_0, "mv9_0")
order_qt_query9_0_after "${query9_0}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv9_0"""
}
diff --git a/regression-test/suites/nereids_rules_p0/mv/ssb/mv_ssb_test.groovy b/regression-test/suites/nereids_rules_p0/mv/ssb/mv_ssb_test.groovy
index 887907c651f..7bbb8f19da9 100644
--- a/regression-test/suites/nereids_rules_p0/mv/ssb/mv_ssb_test.groovy
+++ b/regression-test/suites/nereids_rules_p0/mv/ssb/mv_ssb_test.groovy
@@ -92,45 +92,6 @@ suite("mv_ssb_test") {
sql "SET enable_materialized_view_rewrite=true"
sql "SET enable_nereids_timeout = false"
- def check_rewrite = { mv_sql, query_sql, mv_name ->
-
- sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
- sql"""
- CREATE MATERIALIZED VIEW ${mv_name}
- BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
- DISTRIBUTED BY RANDOM BUCKETS 2
- PROPERTIES ('replication_num' = '1')
- AS ${mv_sql}
- """
-
- def job_name = getJobName(db, mv_name);
- waitingMTMVTaskFinished(job_name)
- explain {
- sql("${query_sql}")
- contains("${mv_name}(${mv_name})")
- }
- }
-
- def check_not_match = { mv_sql, query_sql, mv_name ->
-
- sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}"""
- sql"""
- CREATE MATERIALIZED VIEW ${mv_name}
- BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
- DISTRIBUTED BY RANDOM BUCKETS 2
- PROPERTIES ('replication_num' = '1')
- AS ${mv_sql}
- """
-
- def job_name = getJobName(db, mv_name);
- waitingMTMVTaskFinished(job_name)
- explain {
- sql("${query_sql}")
- notContains("${mv_name}(${mv_name})")
- }
- }
-
-
def mv1_1 = """
SELECT SUM(lo_extendedprice*lo_discount) AS
REVENUE
@@ -150,7 +111,7 @@ suite("mv_ssb_test") {
AND lo_quantity < 25;
"""
order_qt_query1_1_before "${query1_1}"
- check_rewrite(mv1_1, query1_1, "mv1_1")
+ check_mv_rewrite_success(db, mv1_1, query1_1, "mv1_1")
order_qt_query1_1_after "${query1_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_1"""
@@ -174,7 +135,7 @@ suite("mv_ssb_test") {
AND lo_quantity BETWEEN 26 AND 35;
"""
order_qt_query1_2_before "${query1_2}"
- check_rewrite(mv1_2, query1_2, "mv1_2")
+ check_mv_rewrite_success(db, mv1_2, query1_2, "mv1_2")
order_qt_query1_2_after "${query1_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_2"""
@@ -199,7 +160,7 @@ suite("mv_ssb_test") {
AND lo_quantity BETWEEN 26 AND 35;
"""
order_qt_query1_3before "${query1_3}"
- check_rewrite(mv1_3, query1_3, "mv1_3")
+ check_mv_rewrite_success(db, mv1_3, query1_3, "mv1_3")
order_qt_query1_3_after "${query1_3}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_3"""
@@ -227,7 +188,7 @@ suite("mv_ssb_test") {
ORDER BY d_year, p_brand;
"""
order_qt_query2_1before "${query2_1}"
- check_rewrite(mv2_1, query2_1, "mv2_1")
+ check_mv_rewrite_success(db, mv2_1, query2_1, "mv2_1")
order_qt_query2_1_after "${query2_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_1"""
@@ -257,7 +218,7 @@ suite("mv_ssb_test") {
ORDER BY d_year, p_brand;
"""
order_qt_query2_2before "${query2_2}"
- check_rewrite(mv2_2, query2_2, "mv2_2")
+ check_mv_rewrite_success(db, mv2_2, query2_2, "mv2_2")
order_qt_query2_2_after "${query2_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_2"""
@@ -284,7 +245,7 @@ suite("mv_ssb_test") {
ORDER BY d_year, p_brand;
"""
order_qt_query2_3before "${query2_3}"
- check_rewrite(mv2_3, query2_3, "mv2_3")
+ check_mv_rewrite_success(db, mv2_3, query2_3, "mv2_3")
order_qt_query2_3_after "${query2_3}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_3"""
@@ -315,7 +276,7 @@ suite("mv_ssb_test") {
ORDER BY d_year ASC, REVENUE DESC;
"""
order_qt_query3_1before "${query3_1}"
- check_rewrite(mv3_1, query3_1, "mv3_1")
+ check_mv_rewrite_success(db, mv3_1, query3_1, "mv3_1")
order_qt_query3_1_after "${query3_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_1"""
@@ -347,7 +308,7 @@ suite("mv_ssb_test") {
ORDER BY d_year ASC, REVENUE DESC;
"""
order_qt_query3_2before "${query3_2}"
- check_rewrite(mv3_2, query3_2, "mv3_2")
+ check_mv_rewrite_success(db, mv3_2, query3_2, "mv3_2")
order_qt_query3_2_after "${query3_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_2"""
@@ -383,7 +344,7 @@ suite("mv_ssb_test") {
ORDER BY d_year ASC, REVENUE DESC;
"""
order_qt_query3_3before "${query3_3}"
- check_rewrite(mv3_3, query3_3, "mv3_3")
+ check_mv_rewrite_success(db, mv3_3, query3_3, "mv3_3")
order_qt_query3_3_after "${query3_3}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_3"""
@@ -419,7 +380,7 @@ suite("mv_ssb_test") {
ORDER BY d_year ASC, REVENUE DESC;
"""
order_qt_query3_4before "${query3_4}"
- check_rewrite(mv3_4, query3_4, "mv3_4")
+ check_mv_rewrite_success(db, mv3_4, query3_4, "mv3_4")
order_qt_query3_4_after "${query3_4}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_4"""
@@ -455,7 +416,7 @@ suite("mv_ssb_test") {
ORDER BY d_year, c_nation;
"""
order_qt_query4_1before "${query4_1}"
- check_rewrite(mv4_1, query4_1, "mv4_1")
+ check_mv_rewrite_success(db, mv4_1, query4_1, "mv4_1")
order_qt_query4_1_after "${query4_1}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv4_1"""
@@ -492,7 +453,7 @@ suite("mv_ssb_test") {
ORDER BY d_year, s_nation, p_category;
"""
order_qt_query4_2before "${query4_2}"
- check_rewrite(mv4_2, query4_2, "mv4_2")
+ check_mv_rewrite_success(db, mv4_2, query4_2, "mv4_2")
order_qt_query4_2_after "${query4_2}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv4_2"""
@@ -526,7 +487,7 @@ suite("mv_ssb_test") {
ORDER BY d_year, s_city, p_brand;
"""
order_qt_query4_3before "${query4_3}"
- check_rewrite(mv4_3, query4_3, "mv4_3")
+ check_mv_rewrite_success(db, mv4_3, query4_3, "mv4_3")
order_qt_query4_3_after "${query4_3}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv4_3"""
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org
(doris) 06/08: [test](mtmv)fix table name duplicate (#30808)
Posted by yi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
commit 88ff9c06cf69f3782ccbaed53d25e45098fc9cca
Author: zfr95 <87...@users.noreply.github.com>
AuthorDate: Sun Feb 4 21:22:15 2024 +0800
[test](mtmv)fix table name duplicate (#30808)
---
.../nereids_rules_p0/mv/dimension/dimension_2_4.groovy | 16 ++++++++--------
.../nereids_rules_p0/mv/dimension/dimension_2_5.groovy | 14 +++++++-------
.../nereids_rules_p0/mv/dimension/dimension_2_6.groovy | 8 ++++----
3 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/regression-test/suites/nereids_rules_p0/mv/dimension/dimension_2_4.groovy b/regression-test/suites/nereids_rules_p0/mv/dimension/dimension_2_4.groovy
index 09b414588d7..60a3aed84ac 100644
--- a/regression-test/suites/nereids_rules_p0/mv/dimension/dimension_2_4.groovy
+++ b/regression-test/suites/nereids_rules_p0/mv/dimension/dimension_2_4.groovy
@@ -81,10 +81,10 @@ suite("partition_mv_rewrite_dimension_2_4") {
);"""
sql """
- drop table if exists partsupp
+ drop table if exists partsupp_2_4
"""
- sql """CREATE TABLE `partsupp` (
+ sql """CREATE TABLE `partsupp_2_4` (
`ps_partkey` INT NULL,
`ps_suppkey` INT NULL,
`ps_availqty` INT NULL,
@@ -124,7 +124,7 @@ suite("partition_mv_rewrite_dimension_2_4") {
"""
sql"""
- insert into partsupp values
+ insert into partsupp_2_4 values
(1, 1, 1, 99.5, 'yy'),
(null, 2, 2, 109.2, 'mm'),
(3, null, 1, 99.5, 'yy');
@@ -132,7 +132,7 @@ suite("partition_mv_rewrite_dimension_2_4") {
sql """analyze table orders_2_4 with sync;"""
sql """analyze table lineitem_2_4 with sync;"""
- sql """analyze table partsupp with sync;"""
+ sql """analyze table partsupp_2_4 with sync;"""
def create_mv_lineitem = { mv_name, mv_sql ->
sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name};"""
@@ -304,7 +304,7 @@ suite("partition_mv_rewrite_dimension_2_4") {
from orders_2_4
left join lineitem_2_4
on lineitem_2_4.l_orderkey = orders_2_4.o_orderkey
- left join partsupp on partsupp.ps_partkey = lineitem_2_4.l_orderkey"""
+ left join partsupp_2_4 on partsupp_2_4.ps_partkey = lineitem_2_4.l_orderkey"""
explain {
sql("${sql_stmt_4}")
contains "${mv_name_4}(${mv_name_4})"
@@ -329,7 +329,7 @@ suite("partition_mv_rewrite_dimension_2_4") {
def sql_stmt_5 = """select o_orderdate, o_shippriority, o_comment
from orders_2_4
left join lineitem_2_4 on lineitem_2_4.l_orderkey = orders_2_4.o_orderkey
- left join partsupp on partsupp.ps_partkey = lineitem_2_4.l_orderkey
+ left join partsupp_2_4 on partsupp_2_4.ps_partkey = lineitem_2_4.l_orderkey
group by
o_orderdate,
o_shippriority,
@@ -370,7 +370,7 @@ suite("partition_mv_rewrite_dimension_2_4") {
bitmap_union(to_bitmap(case when o_shippriority > 2 and o_orderkey IN (2) then o_custkey else null end)) as cnt_2
from orders_2_4
left join lineitem_2_4 on lineitem_2_4.l_orderkey = orders_2_4.o_orderkey
- left join partsupp on partsupp.ps_partkey = lineitem_2_4.l_orderkey
+ left join partsupp_2_4 on partsupp_2_4.ps_partkey = lineitem_2_4.l_orderkey
group by
o_orderdate,
o_shippriority,
@@ -470,7 +470,7 @@ suite("partition_mv_rewrite_dimension_2_4") {
// bitmap_union(to_bitmap(case when o_shippriority > 2 and o_orderkey IN (2) then o_custkey else null end)) as cnt_2
// from orders_2_4
// left join lineitem_2_4 on lineitem_2_4.l_orderkey = orders_2_4.o_orderkey
-// left join partsupp on partsupp.ps_partkey = lineitem_2_4.l_orderkey
+// left join partsupp_2_4 on partsupp_2_4.ps_partkey = lineitem_2_4.l_orderkey
// where l_shipdate >= "2023-10-15"
// group by
// o_orderdate,
diff --git a/regression-test/suites/nereids_rules_p0/mv/dimension/dimension_2_5.groovy b/regression-test/suites/nereids_rules_p0/mv/dimension/dimension_2_5.groovy
index c42e27e1da0..762408ba057 100644
--- a/regression-test/suites/nereids_rules_p0/mv/dimension/dimension_2_5.groovy
+++ b/regression-test/suites/nereids_rules_p0/mv/dimension/dimension_2_5.groovy
@@ -81,10 +81,10 @@ suite("partition_mv_rewrite_dimension_2_5") {
);"""
sql """
- drop table if exists partsupp
+ drop table if exists partsupp_2_5
"""
- sql """CREATE TABLE `partsupp` (
+ sql """CREATE TABLE `partsupp_2_5` (
`ps_partkey` INT NULL,
`ps_suppkey` INT NULL,
`ps_availqty` INT NULL,
@@ -124,7 +124,7 @@ suite("partition_mv_rewrite_dimension_2_5") {
"""
sql"""
- insert into partsupp values
+ insert into partsupp_2_5 values
(1, 1, 1, 99.5, 'yy'),
(null, 2, 2, 109.2, 'mm'),
(3, null, 1, 99.5, 'yy');
@@ -132,7 +132,7 @@ suite("partition_mv_rewrite_dimension_2_5") {
sql """analyze table orders_2_5 with sync;"""
sql """analyze table lineitem_2_5 with sync;"""
- sql """analyze table partsupp with sync;"""
+ sql """analyze table partsupp_2_5 with sync;"""
def create_mv_lineitem = { mv_name, mv_sql ->
sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name};"""
@@ -297,7 +297,7 @@ suite("partition_mv_rewrite_dimension_2_5") {
def sql_stmt_5 = """select o_orderdate, o_shippriority, o_comment
from orders_2_5
left join lineitem_2_5 on lineitem_2_5.l_orderkey = orders_2_5.o_orderkey
- left join partsupp on partsupp.ps_partkey = lineitem_2_5.l_orderkey
+ left join partsupp_2_5 on partsupp_2_5.ps_partkey = lineitem_2_5.l_orderkey
group by
o_orderdate,
o_shippriority,
@@ -311,7 +311,7 @@ suite("partition_mv_rewrite_dimension_2_5") {
def sql_stmt_5_2 = """select o_orderdate, o_shippriority, o_comment
from orders_2_5
left join lineitem_2_5 on lineitem_2_5.l_orderkey = orders_2_5.o_orderkey
- left join partsupp on partsupp.ps_partkey = orders_2_5.o_orderkey
+ left join partsupp_2_5 on partsupp_2_5.ps_partkey = orders_2_5.o_orderkey
group by
o_orderdate,
o_shippriority,
@@ -410,7 +410,7 @@ suite("partition_mv_rewrite_dimension_2_5") {
// bitmap_union(to_bitmap(case when o_shippriority > 2 and o_orderkey IN (2) then o_custkey else null end)) as cnt_2
// from orders_2_5
// left join lineitem_2_5 on lineitem_2_5.l_orderkey = orders_2_5.o_orderkey
-// left join partsupp on partsupp.ps_partkey = lineitem_2_5.l_orderkey
+// left join partsupp_2_5 on partsupp_2_5.ps_partkey = lineitem_2_5.l_orderkey
// where l_shipdate >= "2023-10-15"
// group by
// o_orderdate,
diff --git a/regression-test/suites/nereids_rules_p0/mv/dimension/dimension_2_6.groovy b/regression-test/suites/nereids_rules_p0/mv/dimension/dimension_2_6.groovy
index f3bce205cda..59977c70503 100644
--- a/regression-test/suites/nereids_rules_p0/mv/dimension/dimension_2_6.groovy
+++ b/regression-test/suites/nereids_rules_p0/mv/dimension/dimension_2_6.groovy
@@ -81,10 +81,10 @@ suite("partition_mv_rewrite_dimension_2_6") {
);"""
sql """
- drop table if exists partsupp
+ drop table if exists partsupp_2_6
"""
- sql """CREATE TABLE `partsupp` (
+ sql """CREATE TABLE `partsupp_2_6` (
`ps_partkey` INT NULL,
`ps_suppkey` INT NULL,
`ps_availqty` INT NULL,
@@ -124,7 +124,7 @@ suite("partition_mv_rewrite_dimension_2_6") {
"""
sql"""
- insert into partsupp values
+ insert into partsupp_2_6 values
(1, 1, 1, 99.5, 'yy'),
(null, 2, 2, 109.2, 'mm'),
(3, null, 1, 99.5, 'yy');
@@ -132,7 +132,7 @@ suite("partition_mv_rewrite_dimension_2_6") {
sql """analyze table orders_2_6 with sync;"""
sql """analyze table lineitem_2_6 with sync;"""
- sql """analyze table partsupp with sync;"""
+ sql """analyze table partsupp_2_6 with sync;"""
def create_mv_lineitem = { mv_name, mv_sql ->
sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name};"""
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org
(doris) 04/08: [fix](stats) keep threads in pool alive to maintain reasonable parallelism (#30451)
Posted by yi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
commit 25f6a733fe31fc8e7bb55bccac3fba16d098c9fb
Author: zhengyu <fr...@gmail.com>
AuthorDate: Sun Feb 4 14:40:59 2024 +0800
[fix](stats) keep threads in pool alive to maintain reasonable parallelism (#30451)
---
.../src/main/java/org/apache/doris/common/ThreadPoolManager.java | 2 +-
.../src/main/java/org/apache/doris/statistics/AnalysisManager.java | 4 +++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/ThreadPoolManager.java b/fe/fe-core/src/main/java/org/apache/doris/common/ThreadPoolManager.java
index ed3c32dba19..3be5af8ac54 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/ThreadPoolManager.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/ThreadPoolManager.java
@@ -73,7 +73,7 @@ public class ThreadPoolManager {
private static String[] poolMetricTypes = {"pool_size", "active_thread_num", "task_in_queue"};
- private static final long KEEP_ALIVE_TIME = 60L;
+ public static final long KEEP_ALIVE_TIME = 60L;
public static void registerAllThreadPoolMetric() {
for (Map.Entry<String, ThreadPoolExecutor> entry : nameToThreadPoolMap.entrySet()) {
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 051dcfbb1b5..90cb0cd5f6d 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
@@ -40,6 +40,7 @@ import org.apache.doris.common.Config;
import org.apache.doris.common.DdlException;
import org.apache.doris.common.FeConstants;
import org.apache.doris.common.FeMetaVersion;
+import org.apache.doris.common.ThreadPoolManager;
import org.apache.doris.common.ThreadPoolManager.BlockedPolicy;
import org.apache.doris.common.io.Text;
import org.apache.doris.common.io.Writable;
@@ -645,7 +646,8 @@ public class AnalysisManager implements Writable {
String poolName = "SYNC ANALYZE THREAD POOL";
return new ThreadPoolExecutor(0,
ConnectContext.get().getSessionVariable().parallelSyncAnalyzeTaskNum,
- 0, TimeUnit.SECONDS,
+ ThreadPoolManager.KEEP_ALIVE_TIME,
+ TimeUnit.SECONDS,
new LinkedBlockingQueue<>(),
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("SYNC ANALYZE" + "-%d")
.build(), new BlockedPolicy(poolName,
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org
(doris) 05/08: [Feature](executor)Stream load support workload group (#30763)
Posted by yi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
commit 27f65f44638752af34946089a4570cbe83ea19b7
Author: wangbo <wa...@apache.org>
AuthorDate: Sun Feb 4 19:52:19 2024 +0800
[Feature](executor)Stream load support workload group (#30763)
* Stream load support workload group
* skip mysql load
---
.../org/apache/doris/service/FrontendServiceImpl.java | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
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 9e0b9ed9fd5..cc3e7da1dfc 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
@@ -184,6 +184,7 @@ import org.apache.doris.thrift.TNodeInfo;
import org.apache.doris.thrift.TOlapTableIndexTablets;
import org.apache.doris.thrift.TOlapTablePartition;
import org.apache.doris.thrift.TPipelineFragmentParams;
+import org.apache.doris.thrift.TPipelineWorkloadGroup;
import org.apache.doris.thrift.TPrivilegeCtrl;
import org.apache.doris.thrift.TPrivilegeHier;
import org.apache.doris.thrift.TPrivilegeStatus;
@@ -1800,14 +1801,29 @@ public class FrontendServiceImpl implements FrontendService.Iface {
ctx.setThreadLocalInfo();
try {
+ List<TPipelineWorkloadGroup> tWorkloadGroupList = null;
+ // mysql load request not carry user info, need fix it later.
+ boolean hasUserName = !StringUtils.isEmpty(ctx.getQualifiedUser());
+ if (Config.enable_workload_group && hasUserName) {
+ tWorkloadGroupList = Env.getCurrentEnv().getWorkloadGroupMgr().getWorkloadGroup(ctx);
+ }
if (!Strings.isNullOrEmpty(request.getLoadSql())) {
httpStreamPutImpl(request, result, ctx);
+ if (tWorkloadGroupList != null && tWorkloadGroupList.size() > 0) {
+ result.params.setWorkloadGroups(tWorkloadGroupList);
+ }
return result;
} else {
if (Config.enable_pipeline_load) {
result.setPipelineParams(pipelineStreamLoadPutImpl(request));
+ if (tWorkloadGroupList != null && tWorkloadGroupList.size() > 0) {
+ result.pipeline_params.setWorkloadGroups(tWorkloadGroupList);
+ }
} else {
result.setParams(streamLoadPutImpl(request, result));
+ if (tWorkloadGroupList != null && tWorkloadGroupList.size() > 0) {
+ result.params.setWorkloadGroups(tWorkloadGroupList);
+ }
}
}
} catch (UserException e) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org