This is an automated email from the ASF dual-hosted git repository. morrysnow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 340784e294 [feature-wip](statistics) add statistics module related syntax (#12766) 340784e294 is described below commit 340784e2942d2aebff3469597d410fa4ab7597ee Author: ElvinWei <zhengte....@outlook.com> AuthorDate: Thu Sep 22 11:15:00 2022 +0800 [feature-wip](statistics) add statistics module related syntax (#12766) This pull request includes some implementations of the statistics(#6370), it adds statistics module related syntax. The current syntax for collecting statistics will not collect statistics (It will collect statistics until test is stable). - `ANALYZE` syntax(collect statistics) ```SQL ANALYZE [[ db_name.tb_name ] [( column_name [, ...] )], ...] [PARTITIONS(...)] [ PROPERTIES(...) ] ``` > db_name.tb_name: collect table and column statistics from tb_name. > column_name: collect column statistics from column_name. > properties: properties of statistics jobs. example: ```SQL ANALYZE; -- collect statistics for all tables in the current database ANALYZE table1(pv, citycode); -- collect pv and citycode statistics for table1 ANALYZE test.table2 PARTITIONS(partition1); -- collect statistics for partition1 of table2 ``` - `SHOW ANALYZE` syntax(show statistics job info) ```SQL SHOW ANALYZE [TABLE | ID] [ WHERE [STATE = ["PENDING"|"SCHEDULING"|"RUNNING"|"FINISHED"|"FAILED"|"CANCELLED"]] ] [ORDER BY ...] [LIMIT limit][OFFSET offset]; ``` - `SHOW TABLE STATS`syntax(show table statistics) ```SQL SHOW TABLE STATS [ db_name.tb_name ] ``` - `SHOW COLUMN STATS` syntax(show column statistics) ```SQL SHOW COLUMN STATS [ db_name.tb_name ] ``` --- fe/fe-core/src/main/cup/sql_parser.cup | 32 ++++++++++++++++++---- .../apache/doris/analysis/ShowColumnStatsStmt.java | 27 +++++++++++------- .../apache/doris/analysis/ShowTableStatsStmt.java | 30 +++++++++++++------- fe/fe-core/src/main/jflex/sql_scanner.flex | 1 + 4 files changed, 64 insertions(+), 26 deletions(-) diff --git a/fe/fe-core/src/main/cup/sql_parser.cup b/fe/fe-core/src/main/cup/sql_parser.cup index d157bb9bb7..f42f392fe9 100644 --- a/fe/fe-core/src/main/cup/sql_parser.cup +++ b/fe/fe-core/src/main/cup/sql_parser.cup @@ -279,7 +279,8 @@ terminal String KW_ADD, KW_ADMIN, KW_AFTER, KW_AGGREGATE, KW_ALIAS, KW_ALL, KW_A KW_YEAR, KW_NOT_NULL, KW_CATALOG, KW_CATALOGS, - KW_SWITCH; + KW_SWITCH, + KW_ANALYZE; terminal COMMA, COLON, DOT, DOTDOTDOT, AT, STAR, LPAREN, RPAREN, SEMICOLON, LBRACKET, RBRACKET, DIVIDE, MOD, ADD, SUBTRACT; terminal BITAND, BITOR, BITXOR, BITNOT; @@ -304,7 +305,7 @@ nonterminal StatementBase stmt, show_stmt, show_param, help_stmt, load_stmt, use_stmt, kill_stmt, drop_stmt, recover_stmt, grant_stmt, revoke_stmt, create_stmt, set_stmt, sync_stmt, cancel_stmt, cancel_param, delete_stmt, link_stmt, migrate_stmt, switch_stmt, enter_stmt, transaction_stmt, unsupported_stmt, export_stmt, admin_stmt, truncate_stmt, import_columns_stmt, import_delete_on_stmt, import_sequence_stmt, import_where_stmt, install_plugin_stmt, uninstall_plugin_stmt, - import_preceding_filter_stmt, unlock_tables_stmt, lock_tables_stmt, refresh_stmt, clean_stmt; + import_preceding_filter_stmt, unlock_tables_stmt, lock_tables_stmt, refresh_stmt, clean_stmt, analyze_stmt; nonterminal String transaction_label; nonterminal ImportColumnDesc import_column_desc; @@ -764,6 +765,8 @@ stmt ::= {: RESULT = stmt; :} | clean_stmt:stmt {: RESULT = stmt; :} + | analyze_stmt:stmt + {: RESULT = stmt; :} | /* empty: query only has comments */ {: RESULT = new EmptyStmt(); @@ -2079,6 +2082,14 @@ show_create_routine_load_stmt ::= :} ; +// analyze statment +analyze_stmt ::= + KW_ANALYZE opt_table_name:tbl opt_col_list:cols opt_partition_names:partitionNames opt_properties:properties + {: + RESULT = new AnalyzeStmt(tbl, cols, partitionNames, properties); + :} + ; + // Grant statement grant_stmt ::= KW_GRANT privilege_list:privs KW_ON tbl_pattern:tblPattern KW_TO user_identity:userId @@ -3093,14 +3104,14 @@ show_param ::= RESULT = new ShowSyncJobStmt(dbName); :} /* show table stats */ - | KW_TABLE KW_STATS opt_table_name:tbl + | KW_TABLE KW_STATS opt_table_name:tbl opt_partition_names:partitionNames {: - RESULT = new ShowTableStatsStmt(tbl); + RESULT = new ShowTableStatsStmt(tbl, partitionNames); :} /* show column stats */ - | KW_COLUMN KW_STATS table_name:tbl + | KW_COLUMN KW_STATS table_name:tbl opt_partition_names:partitionNames {: - RESULT = new ShowColumnStatsStmt(tbl); + RESULT = new ShowColumnStatsStmt(tbl, partitionNames); :} /* show table creation statement */ | KW_TABLE KW_CREATION opt_db:db opt_wild_where @@ -3116,6 +3127,15 @@ show_param ::= {: RESULT = new ShowCreateMaterializedViewStmt(mvName, tableName); :} + /* show analyze job */ + | KW_ANALYZE integer_list:jobIds + {: + RESULT = new ShowAnalyzeStmt(jobIds); + :} + | KW_ANALYZE opt_table_name:tbl opt_wild_where order_by_clause:orderByClause limit_clause:limitClause + {: + RESULT = new ShowAnalyzeStmt(tbl, parser.where, orderByClause, limitClause); + :} ; opt_tmp ::= 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 4a86379ef3..14a311ba84 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 @@ -19,15 +19,14 @@ package org.apache.doris.analysis; import org.apache.doris.catalog.Column; import org.apache.doris.catalog.ScalarType; -import org.apache.doris.common.AnalysisException; import org.apache.doris.common.UserException; import org.apache.doris.common.util.Util; import org.apache.doris.qe.ShowResultSetMetaData; import org.apache.doris.statistics.ColumnStats; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Lists; +import java.util.Collections; import java.util.List; public class ShowColumnStatsStmt extends ShowStmt { @@ -43,22 +42,35 @@ public class ShowColumnStatsStmt extends ShowStmt { .add(ColumnStats.MAX_VALUE.getValue()) .build(); - private TableName tableName; + private final TableName tableName; + private final PartitionNames partitionNames; - public ShowColumnStatsStmt(TableName tableName) { + public ShowColumnStatsStmt(TableName tableName, PartitionNames partitionNames) { this.tableName = tableName; + this.partitionNames = partitionNames; } public TableName getTableName() { return tableName; } + public List<String> getPartitionNames() { + if (partitionNames == null) { + return Collections.emptyList(); + } + return partitionNames.getPartitionNames(); + } + @Override - public void analyze(Analyzer analyzer) throws AnalysisException, UserException { + public void analyze(Analyzer analyzer) throws UserException { super.analyze(analyzer); tableName.analyze(analyzer); // disallow external catalog Util.prohibitExternalCatalog(tableName.getCtl(), this.getClass().getSimpleName()); + + if (partitionNames != null) { + partitionNames.analyze(analyzer); + } } @Override @@ -70,9 +82,4 @@ public class ShowColumnStatsStmt extends ShowStmt { } return builder.build(); } - - public List<String> getPartitionNames() { - // TODO(WZT): partition statistics - return Lists.newArrayList(); - } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowTableStatsStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowTableStatsStmt.java index ad8e7835c9..6a3e630749 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowTableStatsStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowTableStatsStmt.java @@ -26,11 +26,11 @@ import org.apache.doris.common.util.Util; import org.apache.doris.qe.ShowResultSetMetaData; import org.apache.doris.statistics.TableStats; +import com.google.common.base.Preconditions; +import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Lists; -import org.apache.parquet.Preconditions; -import org.apache.parquet.Strings; +import java.util.Collections; import java.util.List; public class ShowTableStatsStmt extends ShowStmt { @@ -42,14 +42,17 @@ public class ShowTableStatsStmt extends ShowStmt { .add(TableStats.DATA_SIZE.getValue()) .build(); - private TableName tableName; + private final TableName tableName; // after analyzed // There is only on attribute for both @tableName and @dbName at the same time. private String dbName; - public ShowTableStatsStmt(TableName tableName) { + private final PartitionNames partitionNames; + + public ShowTableStatsStmt(TableName tableName, PartitionNames partitionNames) { this.tableName = tableName; + this.partitionNames = partitionNames; } public String getTableName() { @@ -68,6 +71,13 @@ public class ShowTableStatsStmt extends ShowStmt { return tableName.getDb(); } + public List<String> getPartitionNames() { + if (partitionNames == null) { + return Collections.emptyList(); + } + return partitionNames.getPartitionNames(); + } + @Override public void analyze(Analyzer analyzer) throws UserException { super.analyze(analyzer); @@ -79,6 +89,11 @@ public class ShowTableStatsStmt extends ShowStmt { return; } tableName.analyze(analyzer); + + if (partitionNames != null) { + partitionNames.analyze(analyzer); + } + // disallow external catalog Util.prohibitExternalCatalog(tableName.getCtl(), this.getClass().getSimpleName()); } @@ -92,9 +107,4 @@ public class ShowTableStatsStmt extends ShowStmt { } return builder.build(); } - - public List<String> getPartitionNames() { - // TODO(WZT): partition statistics - return Lists.newArrayList(); - } } diff --git a/fe/fe-core/src/main/jflex/sql_scanner.flex b/fe/fe-core/src/main/jflex/sql_scanner.flex index 0a12a298c2..28947b1806 100644 --- a/fe/fe-core/src/main/jflex/sql_scanner.flex +++ b/fe/fe-core/src/main/jflex/sql_scanner.flex @@ -100,6 +100,7 @@ import org.apache.doris.qe.SqlModeHelper; keywordMap.put("all", new Integer(SqlParserSymbols.KW_ALL)); keywordMap.put("alter", new Integer(SqlParserSymbols.KW_ALTER)); keywordMap.put("and", new Integer(SqlParserSymbols.KW_AND)); + keywordMap.put("analyze", new Integer(SqlParserSymbols.KW_ANALYZE)); keywordMap.put("anti", new Integer(SqlParserSymbols.KW_ANTI)); keywordMap.put("append", new Integer(SqlParserSymbols.KW_APPEND)); keywordMap.put("array", new Integer(SqlParserSymbols.KW_ARRAY)); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org