This is an automated email from the ASF dual-hosted git repository.

caiconghui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new a630e03  [Enhancement](routine_load) Support show routine load 
statement with like predicate (#8188)
a630e03 is described below

commit a630e037b9f8982a175e2eab677d5bcf16c5c822
Author: caiconghui <55968745+caicong...@users.noreply.github.com>
AuthorDate: Sat Feb 26 10:35:38 2022 +0800

    [Enhancement](routine_load) Support show routine load statement with like 
predicate (#8188)
    
    * [Enhancement](routine_load) Support show routine load with like predicate
    
    Co-authored-by: caiconghui1 <caicongh...@jd.com>
---
 .../Data Manipulation/SHOW ROUTINE LOAD.md         |  9 +++++++--
 .../Data Manipulation/SHOW ROUTINE LOAD.md         |  7 ++++++-
 fe/fe-core/src/main/cup/sql_parser.cup             | 12 ++++++------
 .../apache/doris/analysis/ShowRoutineLoadStmt.java | 21 ++++++++++++++-------
 .../org/apache/doris/common/CaseSensibility.java   |  3 ++-
 .../doris/common/proc/RoutineLoadsProcDir.java     |  2 +-
 .../doris/load/routineload/RoutineLoadManager.java | 10 ++++++++--
 .../java/org/apache/doris/qe/ShowExecutor.java     |  9 +++++++--
 .../load/routineload/RoutineLoadManagerTest.java   | 22 +++++++++++++++++++---
 9 files changed, 70 insertions(+), 25 deletions(-)

diff --git a/docs/en/sql-reference/sql-statements/Data Manipulation/SHOW 
ROUTINE LOAD.md b/docs/en/sql-reference/sql-statements/Data Manipulation/SHOW 
ROUTINE LOAD.md
index 7541fca..66ffbd6 100644
--- a/docs/en/sql-reference/sql-statements/Data Manipulation/SHOW ROUTINE 
LOAD.md       
+++ b/docs/en/sql-reference/sql-statements/Data Manipulation/SHOW ROUTINE 
LOAD.md       
@@ -28,7 +28,7 @@ under the License.
 ## description
     This statement is used to show the running status of the Routine Load job
     grammar:
-        SHOW [ALL] ROUTINE LOAD [FOR jobName];
+        SHOW [ALL] ROUTINE LOAD [FOR jobName] [LIKE pattern];
 
     Result description:
 
@@ -76,7 +76,7 @@ ReasonOfStateChanged: Reason of job status change
 
 SHOW ALL ROUTINE LOAD FOR test1;
 
-2. Show the current running routine import job named test1
+2. Show the current running routine load job named test1
 
 SHOW ROUTINE LOAD FOR test1;
 
@@ -98,5 +98,10 @@ SHOW ROUTINE LOAD FOR example_db.test1;
 
 SHOW ALL ROUTINE LOAD FOR example_db.test1;
 
+7. Show the current running routine load jobs under example_db with name match 
test1
+
+use example_db;
+SHOW ROUTINE LOAD LIKE "%test1%";
+
 ## keyword
 SHOW,ROUTINE,LOAD
diff --git a/docs/zh-CN/sql-reference/sql-statements/Data Manipulation/SHOW 
ROUTINE LOAD.md b/docs/zh-CN/sql-reference/sql-statements/Data 
Manipulation/SHOW ROUTINE LOAD.md
index 9b6e2e3..051c5a8 100644
--- a/docs/zh-CN/sql-reference/sql-statements/Data Manipulation/SHOW ROUTINE 
LOAD.md    
+++ b/docs/zh-CN/sql-reference/sql-statements/Data Manipulation/SHOW ROUTINE 
LOAD.md    
@@ -28,7 +28,7 @@ under the License.
 ## description
     该语句用于展示 Routine Load 作业运行状态
     语法:
-        SHOW [ALL] ROUTINE LOAD [FOR jobName];
+        SHOW [ALL] ROUTINE LOAD [FOR jobName] [LIKE pattern];
 
     结果说明:
 
@@ -98,6 +98,11 @@ ReasonOfStateChanged: 作业状态变更的原因
 
     SHOW ALL ROUTINE LOAD FOR example_db.test1;
 
+7. 显示 example_db 下,名称匹配 test1 的当前正在运行的例行导入作业
+
+   use example_db;
+   SHOW ROUTINE LOAD LIKE "%test1%";
+
 ## keyword
     SHOW,ROUTINE,LOAD
 
diff --git a/fe/fe-core/src/main/cup/sql_parser.cup 
b/fe/fe-core/src/main/cup/sql_parser.cup
index 5a9953c..a29946f 100644
--- a/fe/fe-core/src/main/cup/sql_parser.cup
+++ b/fe/fe-core/src/main/cup/sql_parser.cup
@@ -1875,19 +1875,19 @@ stop_routine_load_stmt ::=
 show_routine_load_stmt ::=
     KW_SHOW KW_ROUTINE KW_LOAD KW_FOR job_label:jobLabel
     {:
-        RESULT = new ShowRoutineLoadStmt(jobLabel, false);
+        RESULT = new ShowRoutineLoadStmt(jobLabel, false, null);
     :}
     | KW_SHOW KW_ALL KW_ROUTINE KW_LOAD KW_FOR job_label:jobLabel
     {:
-        RESULT = new ShowRoutineLoadStmt(jobLabel, true);
+        RESULT = new ShowRoutineLoadStmt(jobLabel, true, null);
     :}
-    | KW_SHOW KW_ROUTINE KW_LOAD
+    | KW_SHOW KW_ROUTINE KW_LOAD opt_wild_where
     {:
-        RESULT = new ShowRoutineLoadStmt(null, false);
+        RESULT = new ShowRoutineLoadStmt(null, false, parser.wild);
     :}
-    | KW_SHOW KW_ALL KW_ROUTINE KW_LOAD
+    | KW_SHOW KW_ALL KW_ROUTINE KW_LOAD opt_wild_where
     {:
-        RESULT = new ShowRoutineLoadStmt(null, true);
+        RESULT = new ShowRoutineLoadStmt(null, true, parser.wild);
     :}
     ;
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowRoutineLoadStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowRoutineLoadStmt.java
index ac270ae..eb63d97 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowRoutineLoadStmt.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowRoutineLoadStmt.java
@@ -36,7 +36,7 @@ import java.util.List;
   Show routine load progress by routine load name
 
   syntax:
-      SHOW [ALL] ROUTINE LOAD [database.][name]
+      SHOW [ALL] ROUTINE LOAD [FOR JobName] [LIKE pattern]
 
       without ALL: only show job which is not final
       with ALL: show all of job include history job
@@ -50,15 +50,17 @@ import java.util.List;
 
       example:
         show routine load named test in database1
-        SHOW ROUTINE LOAD database1.test;
-
-        show routine load in database1
-        SHOW ROUTINE LOAD database1;
+        use database1
+        SHOW ROUTINE LOAD for test;
 
         show routine load in database1 include history
         use database1;
         SHOW ALL ROUTINE LOAD;
 
+        show routine load in database1 whose name match pattern "%test%"
+        use database1;
+        SHOW ROUTINE LOAD LIKE "%test%";
+
         show routine load in all of database
         please use show proc
  */
@@ -91,11 +93,12 @@ public class ShowRoutineLoadStmt extends ShowStmt {
     private String dbFullName; // optional
     private String name; // optional
     private boolean includeHistory = false;
+    private String pattern; // optional
 
-
-    public ShowRoutineLoadStmt(LabelName labelName, boolean includeHistory) {
+    public ShowRoutineLoadStmt(LabelName labelName, boolean includeHistory, 
String pattern) {
         this.labelName = labelName;
         this.includeHistory = includeHistory;
+        this.pattern = pattern;
     }
 
     public String getDbFullName() {
@@ -110,6 +113,10 @@ public class ShowRoutineLoadStmt extends ShowStmt {
         return includeHistory;
     }
 
+    public String getPattern() {
+        return pattern;
+    }
+
     @Override
     public void analyze(Analyzer analyzer) throws UserException {
         super.analyze(analyzer);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/CaseSensibility.java 
b/fe/fe-core/src/main/java/org/apache/doris/common/CaseSensibility.java
index 7d80309..ebd7b63 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/CaseSensibility.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/CaseSensibility.java
@@ -30,7 +30,8 @@ public enum CaseSensibility {
     LABEL(false),
     VARIABLES(true),
     RESOURCE(true),
-    CONFIG(true);
+    CONFIG(true),
+    ROUTINE_LOAD(true);
 
     private boolean caseSensitive;
     
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/proc/RoutineLoadsProcDir.java
 
b/fe/fe-core/src/main/java/org/apache/doris/common/proc/RoutineLoadsProcDir.java
index e48cc12..91e4c32 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/common/proc/RoutineLoadsProcDir.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/common/proc/RoutineLoadsProcDir.java
@@ -64,7 +64,7 @@ public class RoutineLoadsProcDir implements ProcDirInterface {
         baseProcResult.setNames(TITLE_NAMES);
         RoutineLoadManager routineLoadManager = 
Catalog.getCurrentCatalog().getRoutineLoadManager();
         try {
-            List<RoutineLoadJob> routineLoadJobList = 
routineLoadManager.getJob(null, null, true);
+            List<RoutineLoadJob> routineLoadJobList = 
routineLoadManager.getJob(null, null, true, null);
             for (RoutineLoadJob routineLoadJob : routineLoadJobList) {
                 baseProcResult.addRow(routineLoadJob.getShowStatistic());
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadManager.java
 
b/fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadManager.java
index ae6d8b3..ed6e2ea 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadManager.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadManager.java
@@ -32,6 +32,7 @@ import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.InternalErrorCode;
 import org.apache.doris.common.LoadException;
 import org.apache.doris.common.MetaNotFoundException;
+import org.apache.doris.common.PatternMatcher;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.io.Writable;
 import org.apache.doris.common.util.LogBuilder;
@@ -468,7 +469,7 @@ public class RoutineLoadManager implements Writable {
     }
 
     public RoutineLoadJob getJob(String dbFullName, String jobName) throws 
MetaNotFoundException {
-        List<RoutineLoadJob> routineLoadJobList = getJob(dbFullName, jobName, 
false);
+        List<RoutineLoadJob> routineLoadJobList = getJob(dbFullName, jobName, 
false, null);
         if (routineLoadJobList == null || routineLoadJobList.size() == 0) {
             return null;
         } else {
@@ -483,8 +484,10 @@ public class RoutineLoadManager implements Writable {
       if includeHistory is false, filter not running job in result
       else return all of result
      */
-    public List<RoutineLoadJob> getJob(String dbFullName, String jobName, 
boolean includeHistory)
+    public List<RoutineLoadJob> getJob(String dbFullName, String jobName, 
boolean includeHistory, PatternMatcher matcher)
             throws MetaNotFoundException {
+        Preconditions.checkArgument(jobName == null || matcher == null,
+                "jobName and matcher cannot be not null at the same time");
         // return all of routine load job
         List<RoutineLoadJob> result;
         RESULT:
@@ -521,6 +524,9 @@ public class RoutineLoadManager implements Writable {
         if (!includeHistory) {
             result = result.stream().filter(entity -> 
!entity.getState().isFinalState()).collect(Collectors.toList());
         }
+        if (matcher != null) {
+            result = result.stream().filter(entity -> 
matcher.match(entity.getName())).collect(Collectors.toList());
+        }
         return result;
     }
 
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 5c79b20..3d47227 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
@@ -1208,10 +1208,15 @@ public class ShowExecutor {
         // if job exists
         List<RoutineLoadJob> routineLoadJobList;
         try {
+            PatternMatcher matcher = null;
+            if (showRoutineLoadStmt.getPattern() != null) {
+                matcher = 
PatternMatcher.createMysqlPattern(showRoutineLoadStmt.getPattern(),
+                        CaseSensibility.ROUTINE_LOAD.getCaseSensibility());
+            }
             routineLoadJobList = 
Catalog.getCurrentCatalog().getRoutineLoadManager()
                     .getJob(showRoutineLoadStmt.getDbFullName(),
                             showRoutineLoadStmt.getName(),
-                            showRoutineLoadStmt.isIncludeHistory());
+                            showRoutineLoadStmt.isIncludeHistory(), matcher);
         } catch (MetaNotFoundException e) {
             LOG.warn(e.getMessage(), e);
             throw new AnalysisException(e.getMessage());
@@ -1983,7 +1988,7 @@ public class ShowExecutor {
         if (showCreateRoutineLoadStmt.isIncludeHistory()) {
             List<RoutineLoadJob> routineLoadJobList = new ArrayList<>();
             try {
-                routineLoadJobList = 
Catalog.getCurrentCatalog().getRoutineLoadManager().getJob(dbName, labelName, 
true);
+                routineLoadJobList = 
Catalog.getCurrentCatalog().getRoutineLoadManager().getJob(dbName, labelName, 
true, null);
             } catch (MetaNotFoundException e) {
                 LOG.warn(new LogBuilder(LogKey.ROUTINE_LOAD_JOB, labelName)
                         .add("error_msg", "Routine load cannot be found by 
this name")
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/load/routineload/RoutineLoadManagerTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/load/routineload/RoutineLoadManagerTest.java
index 95f4889..f9d538f 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/load/routineload/RoutineLoadManagerTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/load/routineload/RoutineLoadManagerTest.java
@@ -33,6 +33,7 @@ import org.apache.doris.common.DdlException;
 import org.apache.doris.common.InternalErrorCode;
 import org.apache.doris.common.LoadException;
 import org.apache.doris.common.MetaNotFoundException;
+import org.apache.doris.common.PatternMatcher;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.jmockit.Deencapsulation;
 import org.apache.doris.load.loadv2.LoadTask;
@@ -495,7 +496,7 @@ public class RoutineLoadManagerTest {
     @Test
     public void testGetJob(@Injectable RoutineLoadJob routineLoadJob1,
                            @Injectable RoutineLoadJob routineLoadJob2,
-                           @Injectable RoutineLoadJob routineLoadJob3) throws 
MetaNotFoundException {
+                           @Injectable RoutineLoadJob routineLoadJob3) throws 
MetaNotFoundException, AnalysisException {
 
         new Expectations() {
             {
@@ -508,6 +509,15 @@ public class RoutineLoadManagerTest {
                 routineLoadJob3.isFinal();
                 minTimes = 0;
                 result = true;
+                routineLoadJob1.getName();
+                minTimes = 0;
+                result = "routine_load_job_test1";
+                routineLoadJob2.getName();
+                minTimes = 0;
+                result = "routine_load_job";
+                routineLoadJob3.getName();
+                minTimes = 0;
+                result = "routine_load_job_test2";
             }
         };
 
@@ -517,12 +527,18 @@ public class RoutineLoadManagerTest {
         idToRoutineLoadJob.put(2L, routineLoadJob2);
         idToRoutineLoadJob.put(3L, routineLoadJob3);
         Deencapsulation.setField(routineLoadManager, "idToRoutineLoadJob", 
idToRoutineLoadJob);
-        List<RoutineLoadJob> result = routineLoadManager.getJob(null, null, 
true);
+        List<RoutineLoadJob> result = routineLoadManager.getJob(null, null, 
true, null);
 
         Assert.assertEquals(3, result.size());
         Assert.assertEquals(routineLoadJob2, result.get(0));
         Assert.assertEquals(routineLoadJob1, result.get(1));
         Assert.assertEquals(routineLoadJob3, result.get(2));
+
+        PatternMatcher matcher = PatternMatcher.createMysqlPattern("%test%", 
true);
+        result = routineLoadManager.getJob(null, null, true, matcher);
+        Assert.assertEquals(2, result.size());
+        Assert.assertEquals(routineLoadJob1, result.get(0));
+        Assert.assertEquals(routineLoadJob3, result.get(1));
     }
 
     @Test
@@ -561,7 +577,7 @@ public class RoutineLoadManagerTest {
         nameToRoutineLoadJob.put("", routineLoadJobList);
         dbToNameToRoutineLoadJob.put(1L, nameToRoutineLoadJob);
         Deencapsulation.setField(routineLoadManager, 
"dbToNameToRoutineLoadJob", dbToNameToRoutineLoadJob);
-        List<RoutineLoadJob> result = routineLoadManager.getJob("", "", true);
+        List<RoutineLoadJob> result = routineLoadManager.getJob("", "", true, 
null);
 
         Assert.assertEquals(3, result.size());
         Assert.assertEquals(routineLoadJob2, result.get(0));

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to