You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by kg...@apache.org on 2018/02/16 14:52:49 UTC

hive git commit: HIVE-18373: Make it easier to search for column name in a table (Madhudeep Petwal via Zoltan Haindrich)

Repository: hive
Updated Branches:
  refs/heads/master 9e27ad08f -> 80697867a


HIVE-18373: Make it easier to search for column name in a table (Madhudeep Petwal via Zoltan Haindrich)

Signed-off-by: Zoltan Haindrich <ki...@rxd.hu>


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/80697867
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/80697867
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/80697867

Branch: refs/heads/master
Commit: 80697867afc219924c67a55a2f479b7af51ff393
Parents: 9e27ad0
Author: Madhudeep Petwal <ma...@gmail.com>
Authored: Fri Feb 16 15:49:51 2018 +0100
Committer: Zoltan Haindrich <ki...@rxd.hu>
Committed: Fri Feb 16 15:50:21 2018 +0100

----------------------------------------------------------------------
 .../org/apache/hadoop/hive/ql/exec/DDLTask.java |  56 ++++++-
 .../hive/ql/parse/DDLSemanticAnalyzer.java      |  42 ++++-
 .../apache/hadoop/hive/ql/parse/HiveParser.g    |   4 +-
 .../hadoop/hive/ql/plan/ShowColumnsDesc.java    |  27 ++++
 .../test/queries/clientnegative/show_columns2.q |   7 +-
 .../test/queries/clientnegative/show_columns3.q |   3 +-
 .../test/queries/clientpositive/show_columns.q  |  17 +-
 .../results/clientnegative/show_columns2.q.out  |  28 +++-
 .../results/clientnegative/show_columns3.q.out  |   2 +-
 .../results/clientpositive/show_columns.q.out   | 160 ++++++++++++++++++-
 10 files changed, 322 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/80697867/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
index 3716c15..16b9107 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
@@ -48,6 +48,8 @@ import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeMap;
 import java.util.TreeSet;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.concurrent.ExecutionException;
 
 import com.google.common.collect.ImmutableSet;
@@ -2708,16 +2710,28 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
     return 0;
   }
 
+  /**
+   * Write a list of the columns in the table to a file.
+   *
+   * @param db
+   *          The database in context.
+   * @param showCols
+   *        A ShowColumnsDesc for columns we're interested in.
+   * @return Returns 0 when execution succeeds.
+   * @throws HiveException
+   *        Throws this exception if an unexpected error occurs.
+   */
   public int showColumns(Hive db, ShowColumnsDesc showCols)
       throws HiveException {
 
     Table table = db.getTable(showCols.getTableName());
 
     // write the results in the file
-    DataOutputStream outStream = getOutputStream(showCols.getResFile());;
+    DataOutputStream outStream = getOutputStream(showCols.getResFile());
     try {
-      List<FieldSchema> cols = table.getCols();
-      cols.addAll(table.getPartCols());
+      List<FieldSchema> allCols = table.getCols();
+      allCols.addAll(table.getPartCols());
+      List<FieldSchema> cols = getColumnsByPattern(allCols,showCols.getPattern());
       // In case the query is served by HiveServer2, don't pad it with spaces,
       // as HiveServer2 output is consumed by JDBC/ODBC clients.
       boolean isOutputPadded = !SessionState.get().isHiveServerQuery();
@@ -2735,6 +2749,42 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
   }
 
   /**
+   * Returns a sorted list of columns matching a column pattern.
+   *
+   * @param cols
+   *        Columns of a table.
+   * @param columnPattern
+   *        we want to find columns similar to a column pattern.
+   * @return sorted list of columns.
+   */
+  private List<FieldSchema> getColumnsByPattern(List<FieldSchema> cols, String columnPattern) {
+
+    if(columnPattern == null) {
+      columnPattern = "*";
+    }
+    columnPattern = columnPattern.toLowerCase();
+    columnPattern = columnPattern.replaceAll("\\*", ".*");
+    Pattern pattern = Pattern.compile(columnPattern);
+    Matcher matcher = pattern.matcher("");
+
+    SortedSet<FieldSchema> sortedCol = new TreeSet<>( new Comparator<FieldSchema>() {
+      @Override
+      public int compare(FieldSchema f1, FieldSchema f2) {
+        return f1.getName().compareTo(f2.getName());
+      }
+    });
+
+    for(FieldSchema column : cols)  {
+      matcher.reset(column.getName());
+      if(matcher.matches()) {
+        sortedCol.add(column);
+      }
+    }
+
+    return new ArrayList<FieldSchema>(sortedCol);
+  }
+
+  /**
    * Write a list of the user defined functions to a file.
    * @param db
    *

http://git-wip-us.apache.org/repos/asf/hive/blob/80697867/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
index 41d878f..8ad6fce 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
@@ -2556,17 +2556,45 @@ public class DDLSemanticAnalyzer extends BaseSemanticAnalyzer {
   }
 
   private void analyzeShowColumns(ASTNode ast) throws SemanticException {
+
+  // table name has to be present so min child 1 and max child 4
+    if (ast.getChildCount() > 4 || ast.getChildCount()<1) {
+      throw new SemanticException(ErrorMsg.INVALID_AST_TREE.getMsg(ast.toStringTree()));
+    }
+
     String tableName = getUnescapedName((ASTNode) ast.getChild(0));
-    if (ast.getChildCount() > 1) {
-      if (tableName.contains(".")) {
-        throw new SemanticException("Duplicates declaration for database name");
-      }
-      tableName = getUnescapedName((ASTNode) ast.getChild(1)) + "." + tableName;
+
+    ShowColumnsDesc showColumnsDesc = null;
+    String pattern = null;
+    switch(ast.getChildCount()) {
+      case 1: //  only tablename no pattern and db
+        showColumnsDesc = new ShowColumnsDesc(ctx.getResFile(), tableName);
+        break;
+      case 2: // tablename and pattern
+        pattern = unescapeSQLString(ast.getChild(1).getText());
+        showColumnsDesc = new ShowColumnsDesc(ctx.getResFile(), tableName, pattern);
+        break;
+      case 3: // specifies db
+        if (tableName.contains(".")) {
+          throw new SemanticException("Duplicates declaration for database name");
+        }
+        tableName = getUnescapedName((ASTNode) ast.getChild(2)) + "." + tableName;
+        showColumnsDesc = new ShowColumnsDesc(ctx.getResFile(), tableName);
+        break;
+      case 4: // specifies db and pattern
+        if (tableName.contains(".")) {
+          throw new SemanticException("Duplicates declaration for database name");
+        }
+        tableName = getUnescapedName((ASTNode) ast.getChild(2)) + "." + tableName;
+        pattern = unescapeSQLString(ast.getChild(3).getText());
+        showColumnsDesc = new ShowColumnsDesc(ctx.getResFile(), tableName, pattern);
+        break;
+      default:
+        break;
     }
+
     Table tab = getTable(tableName);
     inputs.add(new ReadEntity(tab));
-
-    ShowColumnsDesc showColumnsDesc = new ShowColumnsDesc(ctx.getResFile(), tableName);
     rootTasks.add(TaskFactory.get(new DDLWork(getInputs(), getOutputs(),
         showColumnsDesc), conf));
     setFetchTask(createFetchTask(showColumnsDesc.getSchema()));

http://git-wip-us.apache.org/repos/asf/hive/blob/80697867/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g b/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
index 3e84fd6..e431271 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
@@ -1532,8 +1532,8 @@ showStatement
     | KW_SHOW KW_TABLES ((KW_FROM|KW_IN) db_name=identifier)? (KW_LIKE showStmtIdentifier|showStmtIdentifier)?  -> ^(TOK_SHOWTABLES (TOK_FROM $db_name)? showStmtIdentifier?)
     | KW_SHOW KW_VIEWS ((KW_FROM|KW_IN) db_name=identifier)? (KW_LIKE showStmtIdentifier|showStmtIdentifier)?  -> ^(TOK_SHOWVIEWS (TOK_FROM $db_name)? showStmtIdentifier?)
     | KW_SHOW KW_MATERIALIZED KW_VIEWS ((KW_FROM|KW_IN) db_name=identifier)? (KW_LIKE showStmtIdentifier|showStmtIdentifier)?  -> ^(TOK_SHOWMATERIALIZEDVIEWS (TOK_FROM $db_name)? showStmtIdentifier?)
-    | KW_SHOW KW_COLUMNS (KW_FROM|KW_IN) tableName ((KW_FROM|KW_IN) db_name=identifier)?
-    -> ^(TOK_SHOWCOLUMNS tableName $db_name?)
+    | KW_SHOW KW_COLUMNS (KW_FROM|KW_IN) tableName ((KW_FROM|KW_IN) db_name=identifier)? (KW_LIKE showStmtIdentifier|showStmtIdentifier)?
+    -> ^(TOK_SHOWCOLUMNS tableName (TOK_FROM $db_name)? showStmtIdentifier?)
     | KW_SHOW KW_FUNCTIONS (KW_LIKE showFunctionIdentifier|showFunctionIdentifier)?  -> ^(TOK_SHOWFUNCTIONS KW_LIKE? showFunctionIdentifier?)
     | KW_SHOW KW_PARTITIONS tabName=tableName partitionSpec? -> ^(TOK_SHOWPARTITIONS $tabName partitionSpec?) 
     | KW_SHOW KW_CREATE (

http://git-wip-us.apache.org/repos/asf/hive/blob/80697867/ql/src/java/org/apache/hadoop/hive/ql/plan/ShowColumnsDesc.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/ShowColumnsDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/ShowColumnsDesc.java
index 7c6173e..7047f56 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/ShowColumnsDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/ShowColumnsDesc.java
@@ -24,6 +24,7 @@ import org.apache.hadoop.hive.ql.plan.Explain.Level;
 
 public class ShowColumnsDesc extends DDLDesc implements Serializable {
   private static final long serialVersionUID = 1L;
+  String pattern;
   String tableName;
   String resFile;
   /**
@@ -63,6 +64,32 @@ public class ShowColumnsDesc extends DDLDesc implements Serializable {
   }
 
   /**
+   * @param tableName name of table to show columns of
+   */
+  public ShowColumnsDesc(Path resFile, String tableName, String pattern) {
+    this.resFile = resFile.toString();
+    this.pattern = pattern;
+    this.tableName = tableName;
+  }
+
+
+  /**
+   * @return the pattern
+   */
+  @Explain(displayName = "pattern")
+  public String getPattern() {
+    return pattern;
+  }
+
+  /**
+   * @param pattern
+   *          the pattern to set
+   */
+  public void setPattern(String pattern) {
+    this.pattern = pattern;
+  }
+
+  /**
    * @return the tableName
    */
   @Explain(displayName = "table name", explainLevels = { Level.USER, Level.DEFAULT, Level.EXTENDED })

http://git-wip-us.apache.org/repos/asf/hive/blob/80697867/ql/src/test/queries/clientnegative/show_columns2.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientnegative/show_columns2.q b/ql/src/test/queries/clientnegative/show_columns2.q
index c55b449..508a786 100644
--- a/ql/src/test/queries/clientnegative/show_columns2.q
+++ b/ql/src/test/queries/clientnegative/show_columns2.q
@@ -1,2 +1,7 @@
-SHOW COLUMNS from shcol_test foo;
+CREATE DATABASE test_db;
+USE test_db;
+CREATE TABLE foo(a INT);
+
+use default;
+SHOW COLUMNS from test_db.foo from test_db;
 

http://git-wip-us.apache.org/repos/asf/hive/blob/80697867/ql/src/test/queries/clientnegative/show_columns3.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientnegative/show_columns3.q b/ql/src/test/queries/clientnegative/show_columns3.q
index 508a786..a17d2dd 100644
--- a/ql/src/test/queries/clientnegative/show_columns3.q
+++ b/ql/src/test/queries/clientnegative/show_columns3.q
@@ -3,5 +3,4 @@ USE test_db;
 CREATE TABLE foo(a INT);
 
 use default;
-SHOW COLUMNS from test_db.foo from test_db;
-
+SHOW COLUMNS from foo like "a*" from test_db;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hive/blob/80697867/ql/src/test/queries/clientpositive/show_columns.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/show_columns.q b/ql/src/test/queries/clientpositive/show_columns.q
index 58a3a2c..fdd1ea8 100644
--- a/ql/src/test/queries/clientpositive/show_columns.q
+++ b/ql/src/test/queries/clientpositive/show_columns.q
@@ -8,19 +8,32 @@ SHOW COLUMNS from shcol_test;
 -- SHOW COLUMNS
 CREATE DATABASE test_db;
 USE test_db;
-CREATE TABLE foo(a INT);
+CREATE TABLE foo(col1 INT, col2 INT, col3 INT, cola INT, colb INT, colc INT, a INT, b INT, c INT);
 
 -- SHOW COLUMNS basic syntax tests
 USE test_db;
 SHOW COLUMNS from foo;
 SHOW COLUMNS in foo;
+SHOW COLUMNS in foo 'col*';
+SHOW COLUMNS in foo "col*";
+SHOW COLUMNS from foo 'col*';
+SHOW COLUMNS from foo "col*";
+SHOW COLUMNS from foo "col1|cola";
 
 -- SHOW COLUMNS from a database with a name that requires escaping
 CREATE DATABASE `database`;
 USE `database`;
-CREATE TABLE foo(a INT);
+CREATE TABLE foo(col1 INT, col2 INT, col3 INT, cola INT, colb INT, colc INT, a INT, b INT, c INT);
 SHOW COLUMNS from foo;
+SHOW COLUMNS in foo "col*";
+
+-- Non existing column pattern
+SHOW COLUMNS in foo "nomatch*";
+SHOW COLUMNS in foo "col+";
+SHOW COLUMNS in foo "nomatch";
 
 use default;
 SHOW COLUMNS from test_db.foo;
 SHOW COLUMNS from foo from test_db;
+SHOW COLUMNS from foo from test_db "col*";
+SHOW COLUMNS from foo from test_db like 'col*';

http://git-wip-us.apache.org/repos/asf/hive/blob/80697867/ql/src/test/results/clientnegative/show_columns2.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientnegative/show_columns2.q.out b/ql/src/test/results/clientnegative/show_columns2.q.out
index c2921eb..a84dedb 100644
--- a/ql/src/test/results/clientnegative/show_columns2.q.out
+++ b/ql/src/test/results/clientnegative/show_columns2.q.out
@@ -1 +1,27 @@
-FAILED: ParseException line 1:29 extraneous input 'foo' expecting EOF near '<EOF>'
+PREHOOK: query: CREATE DATABASE test_db
+PREHOOK: type: CREATEDATABASE
+PREHOOK: Output: database:test_db
+POSTHOOK: query: CREATE DATABASE test_db
+POSTHOOK: type: CREATEDATABASE
+POSTHOOK: Output: database:test_db
+PREHOOK: query: USE test_db
+PREHOOK: type: SWITCHDATABASE
+PREHOOK: Input: database:test_db
+POSTHOOK: query: USE test_db
+POSTHOOK: type: SWITCHDATABASE
+POSTHOOK: Input: database:test_db
+PREHOOK: query: CREATE TABLE foo(a INT)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:test_db
+PREHOOK: Output: test_db@foo
+POSTHOOK: query: CREATE TABLE foo(a INT)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:test_db
+POSTHOOK: Output: test_db@foo
+PREHOOK: query: use default
+PREHOOK: type: SWITCHDATABASE
+PREHOOK: Input: database:default
+POSTHOOK: query: use default
+POSTHOOK: type: SWITCHDATABASE
+POSTHOOK: Input: database:default
+FAILED: SemanticException Duplicates declaration for database name

http://git-wip-us.apache.org/repos/asf/hive/blob/80697867/ql/src/test/results/clientnegative/show_columns3.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientnegative/show_columns3.q.out b/ql/src/test/results/clientnegative/show_columns3.q.out
index a84dedb..e7dcbf9 100644
--- a/ql/src/test/results/clientnegative/show_columns3.q.out
+++ b/ql/src/test/results/clientnegative/show_columns3.q.out
@@ -24,4 +24,4 @@ PREHOOK: Input: database:default
 POSTHOOK: query: use default
 POSTHOOK: type: SWITCHDATABASE
 POSTHOOK: Input: database:default
-FAILED: SemanticException Duplicates declaration for database name
+FAILED: ParseException line 2:32 missing EOF at 'from' near '"a*"'

http://git-wip-us.apache.org/repos/asf/hive/blob/80697867/ql/src/test/results/clientpositive/show_columns.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/show_columns.q.out b/ql/src/test/results/clientpositive/show_columns.q.out
index 4a67fb3..7ad2686 100644
--- a/ql/src/test/results/clientpositive/show_columns.q.out
+++ b/ql/src/test/results/clientpositive/show_columns.q.out
@@ -33,9 +33,9 @@ PREHOOK: Input: default@shcol_test
 POSTHOOK: query: SHOW COLUMNS from shcol_test
 POSTHOOK: type: SHOWCOLUMNS
 POSTHOOK: Input: default@shcol_test
+ds                  
 key                 
 value               
-ds                  
 PREHOOK: query: CREATE DATABASE test_db
 PREHOOK: type: CREATEDATABASE
 PREHOOK: Output: database:test_db
@@ -48,11 +48,11 @@ PREHOOK: Input: database:test_db
 POSTHOOK: query: USE test_db
 POSTHOOK: type: SWITCHDATABASE
 POSTHOOK: Input: database:test_db
-PREHOOK: query: CREATE TABLE foo(a INT)
+PREHOOK: query: CREATE TABLE foo(col1 INT, col2 INT, col3 INT, cola INT, colb INT, colc INT, a INT, b INT, c INT)
 PREHOOK: type: CREATETABLE
 PREHOOK: Output: database:test_db
 PREHOOK: Output: test_db@foo
-POSTHOOK: query: CREATE TABLE foo(a INT)
+POSTHOOK: query: CREATE TABLE foo(col1 INT, col2 INT, col3 INT, cola INT, colb INT, colc INT, a INT, b INT, c INT)
 POSTHOOK: type: CREATETABLE
 POSTHOOK: Output: database:test_db
 POSTHOOK: Output: test_db@foo
@@ -69,6 +69,14 @@ POSTHOOK: query: SHOW COLUMNS from foo
 POSTHOOK: type: SHOWCOLUMNS
 POSTHOOK: Input: test_db@foo
 a                   
+b                   
+c                   
+col1                
+col2                
+col3                
+cola                
+colb                
+colc                
 PREHOOK: query: SHOW COLUMNS in foo
 PREHOOK: type: SHOWCOLUMNS
 PREHOOK: Input: test_db@foo
@@ -76,6 +84,70 @@ POSTHOOK: query: SHOW COLUMNS in foo
 POSTHOOK: type: SHOWCOLUMNS
 POSTHOOK: Input: test_db@foo
 a                   
+b                   
+c                   
+col1                
+col2                
+col3                
+cola                
+colb                
+colc                
+PREHOOK: query: SHOW COLUMNS in foo 'col*'
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: test_db@foo
+POSTHOOK: query: SHOW COLUMNS in foo 'col*'
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: test_db@foo
+col1                
+col2                
+col3                
+cola                
+colb                
+colc                
+PREHOOK: query: SHOW COLUMNS in foo "col*"
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: test_db@foo
+POSTHOOK: query: SHOW COLUMNS in foo "col*"
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: test_db@foo
+col1                
+col2                
+col3                
+cola                
+colb                
+colc                
+PREHOOK: query: SHOW COLUMNS from foo 'col*'
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: test_db@foo
+POSTHOOK: query: SHOW COLUMNS from foo 'col*'
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: test_db@foo
+col1                
+col2                
+col3                
+cola                
+colb                
+colc                
+PREHOOK: query: SHOW COLUMNS from foo "col*"
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: test_db@foo
+POSTHOOK: query: SHOW COLUMNS from foo "col*"
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: test_db@foo
+col1                
+col2                
+col3                
+cola                
+colb                
+colc                
+PREHOOK: query: SHOW COLUMNS from foo "col1|cola"
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: test_db@foo
+POSTHOOK: query: SHOW COLUMNS from foo "col1|cola"
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: test_db@foo
+col1                
+cola                
 PREHOOK: query: CREATE DATABASE `database`
 PREHOOK: type: CREATEDATABASE
 PREHOOK: Output: database:database
@@ -88,11 +160,11 @@ PREHOOK: Input: database:database
 POSTHOOK: query: USE `database`
 POSTHOOK: type: SWITCHDATABASE
 POSTHOOK: Input: database:database
-PREHOOK: query: CREATE TABLE foo(a INT)
+PREHOOK: query: CREATE TABLE foo(col1 INT, col2 INT, col3 INT, cola INT, colb INT, colc INT, a INT, b INT, c INT)
 PREHOOK: type: CREATETABLE
 PREHOOK: Output: database:database
 PREHOOK: Output: database@foo
-POSTHOOK: query: CREATE TABLE foo(a INT)
+POSTHOOK: query: CREATE TABLE foo(col1 INT, col2 INT, col3 INT, cola INT, colb INT, colc INT, a INT, b INT, c INT)
 POSTHOOK: type: CREATETABLE
 POSTHOOK: Output: database:database
 POSTHOOK: Output: database@foo
@@ -103,6 +175,44 @@ POSTHOOK: query: SHOW COLUMNS from foo
 POSTHOOK: type: SHOWCOLUMNS
 POSTHOOK: Input: database@foo
 a                   
+b                   
+c                   
+col1                
+col2                
+col3                
+cola                
+colb                
+colc                
+PREHOOK: query: SHOW COLUMNS in foo "col*"
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: database@foo
+POSTHOOK: query: SHOW COLUMNS in foo "col*"
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: database@foo
+col1                
+col2                
+col3                
+cola                
+colb                
+colc                
+PREHOOK: query: SHOW COLUMNS in foo "nomatch*"
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: database@foo
+POSTHOOK: query: SHOW COLUMNS in foo "nomatch*"
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: database@foo
+PREHOOK: query: SHOW COLUMNS in foo "col+"
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: database@foo
+POSTHOOK: query: SHOW COLUMNS in foo "col+"
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: database@foo
+PREHOOK: query: SHOW COLUMNS in foo "nomatch"
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: database@foo
+POSTHOOK: query: SHOW COLUMNS in foo "nomatch"
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: database@foo
 PREHOOK: query: use default
 PREHOOK: type: SWITCHDATABASE
 PREHOOK: Input: database:default
@@ -116,6 +226,14 @@ POSTHOOK: query: SHOW COLUMNS from test_db.foo
 POSTHOOK: type: SHOWCOLUMNS
 POSTHOOK: Input: test_db@foo
 a                   
+b                   
+c                   
+col1                
+col2                
+col3                
+cola                
+colb                
+colc                
 PREHOOK: query: SHOW COLUMNS from foo from test_db
 PREHOOK: type: SHOWCOLUMNS
 PREHOOK: Input: test_db@foo
@@ -123,3 +241,35 @@ POSTHOOK: query: SHOW COLUMNS from foo from test_db
 POSTHOOK: type: SHOWCOLUMNS
 POSTHOOK: Input: test_db@foo
 a                   
+b                   
+c                   
+col1                
+col2                
+col3                
+cola                
+colb                
+colc                
+PREHOOK: query: SHOW COLUMNS from foo from test_db "col*"
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: test_db@foo
+POSTHOOK: query: SHOW COLUMNS from foo from test_db "col*"
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: test_db@foo
+col1                
+col2                
+col3                
+cola                
+colb                
+colc                
+PREHOOK: query: SHOW COLUMNS from foo from test_db like 'col*'
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: test_db@foo
+POSTHOOK: query: SHOW COLUMNS from foo from test_db like 'col*'
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: test_db@foo
+col1                
+col2                
+col3                
+cola                
+colb                
+colc