You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by na...@apache.org on 2010/06/25 00:50:52 UTC

svn commit: r957745 - in /hadoop/hive/trunk: ./ cli/src/java/org/apache/hadoop/hive/cli/ data/scripts/ ql/src/test/org/apache/hadoop/hive/ql/ ql/src/test/queries/clientpositive/ ql/src/test/results/clientpositive/

Author: namit
Date: Thu Jun 24 22:50:51 2010
New Revision: 957745

URL: http://svn.apache.org/viewvc?rev=957745&view=rev
Log:
HIVE-1405. Add ability to run an initialization script by 'hive -i <fileName>' (John Sichi via namit)


Added:
    hadoop/hive/trunk/data/scripts/test_init_file.sql
    hadoop/hive/trunk/ql/src/test/queries/clientpositive/init_file.q
    hadoop/hive/trunk/ql/src/test/results/clientpositive/init_file.q.out
Modified:
    hadoop/hive/trunk/CHANGES.txt
    hadoop/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java
    hadoop/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliSessionState.java
    hadoop/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/OptionsProcessor.java
    hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/QTestUtil.java

Modified: hadoop/hive/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/CHANGES.txt?rev=957745&r1=957744&r2=957745&view=diff
==============================================================================
--- hadoop/hive/trunk/CHANGES.txt (original)
+++ hadoop/hive/trunk/CHANGES.txt Thu Jun 24 22:50:51 2010
@@ -8,6 +8,8 @@ Trunk -  Unreleased
 
     HIVE-1304. Add function row_sequence in contrib (John Sichi via namit)
 
+    HIVE-1405. Add ability to run an initialization script by 'hive -i <fileName>' (John Sichi via namit)
+
   IMPROVEMENTS
 
     HIVE-1394. Do not update transient_lastDdlTime if the partition is modified by a housekeeping

Modified: hadoop/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java?rev=957745&r1=957744&r2=957745&view=diff
==============================================================================
--- hadoop/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java (original)
+++ hadoop/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java Thu Jun 24 22:50:51 2010
@@ -216,6 +216,30 @@ public class CliDriver {
     return (processLine(qsb.toString()));
   }
 
+  public int processFile(String fileName) throws IOException {
+    FileReader fileReader = null;
+    try {
+      fileReader = new FileReader(fileName);
+      return processReader(new BufferedReader(fileReader));
+    } finally {
+      if (fileReader != null) {
+        fileReader.close();
+      }
+    }
+  }
+
+  public void processInitFiles(CliSessionState ss) throws IOException {
+    boolean saveSilent = ss.getIsSilent();
+    ss.setIsSilent(true);
+    for (String initFile : ss.initFiles) {
+      int rc = processFile(initFile);
+      if (rc != 0) {
+        System.exit(rc);
+      }
+    }
+    ss.setIsSilent(saveSilent);
+  }
+  
   public static void main(String[] args) throws Exception {
 
     OptionsProcessor oproc = new OptionsProcessor();
@@ -263,13 +287,16 @@ public class CliDriver {
 
     CliDriver cli = new CliDriver();
 
+    // Execute -i init files (always in silent mode)
+    cli.processInitFiles(ss);
+    
     if (ss.execString != null) {
       System.exit(cli.processLine(ss.execString));
     }
 
     try {
       if (ss.fileName != null) {
-        System.exit(cli.processReader(new BufferedReader(new FileReader(ss.fileName))));
+        System.exit(cli.processFile(ss.fileName));
       }
     } catch (FileNotFoundException e) {
       System.err.println("Could not open input file for reading. (" + e.getMessage() + ")");

Modified: hadoop/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliSessionState.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliSessionState.java?rev=957745&r1=957744&r2=957745&view=diff
==============================================================================
--- hadoop/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliSessionState.java (original)
+++ hadoop/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliSessionState.java Thu Jun 24 22:50:51 2010
@@ -18,6 +18,8 @@
 
 package org.apache.hadoop.hive.cli;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Properties;
 
 import org.apache.hadoop.hive.conf.HiveConf;
@@ -43,6 +45,11 @@ public class CliSessionState extends Ses
    */
   public Properties cmdProperties = new Properties();
 
+  /**
+   * -i option if any that the session has been invoked with.
+   */
+  public List<String> initFiles = new ArrayList<String>();
+
   public CliSessionState() {
     super();
   }

Modified: hadoop/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/OptionsProcessor.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/OptionsProcessor.java?rev=957745&r1=957744&r2=957745&view=diff
==============================================================================
--- hadoop/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/OptionsProcessor.java (original)
+++ hadoop/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/OptionsProcessor.java Thu Jun 24 22:50:51 2010
@@ -46,21 +46,24 @@ public class OptionsProcessor {
   protected static final Log l4j = LogFactory.getLog(OptionsProcessor.class.getName());
 
   private final Parser parser = new Parser();
-  private final Option confOptions, isSilentOption, execOption, fileOption, isHelpOption;
+  private final Option confOptions, initFilesOption, isSilentOption,
+    execOption, fileOption, isHelpOption;
 
   /**
    * Shamelessly cloned from Hadoop streaming take in multiple -hiveconf x=y parameters.
    */
   class MultiPropertyOption extends PropertyOption {
     private String optionString;
+    private boolean keyValue;
 
     MultiPropertyOption() {
       super();
     }
 
-    MultiPropertyOption(final String optionString, final String description, final int id) {
+    MultiPropertyOption(final String optionString, final String description, final int id, boolean keyValue) {
       super(optionString, description, id);
       this.optionString = optionString;
+      this.keyValue = keyValue;
     }
 
     @Override
@@ -85,7 +88,7 @@ public class OptionsProcessor {
         next = (String) arguments.next();
         if (!next.startsWith("-")) {
 
-          if (next.indexOf("=") == -1) {
+          if (keyValue && (next.indexOf("=") == -1)) {
             throw new OptionException(this, ResourceConstants.UNEXPECTED_TOKEN, "argument: '"
                 + next + "' is not of the form x=y");
           }
@@ -152,11 +155,16 @@ public class OptionsProcessor {
 
     // -hiveconf var=val
     confOptions = new MultiPropertyOption("-hiveconf",
-        "(n=v) Optional. Add or override Hive/Hadoop properties.", 'D');
+      "(n=v) Optional. Add or override Hive/Hadoop properties.", 'D', true);
+
+    initFilesOption = new MultiPropertyOption(
+      "-i", "File to run before other commands", 'I', false);
 
     new PropertyOption();
-    Group allOptions = new GroupBuilder().withOption(confOptions).withOption(isSilentOption)
-        .withOption(isHelpOption).withOption(execOption).withOption(fileOption).create();
+    Group allOptions =
+      new GroupBuilder().withOption(confOptions).withOption(initFilesOption)
+      .withOption(isSilentOption).withOption(isHelpOption)
+      .withOption(execOption).withOption(fileOption).create();
     parser.setGroup(allOptions);
   }
 
@@ -188,6 +196,11 @@ public class OptionsProcessor {
     ss.execString = (String) cmdLine.getValue(execOption);
     // -f
     ss.fileName = (String) cmdLine.getValue(fileOption);
+    // -i
+    List<String> initFiles = (List<String>) cmdLine.getValue(initFilesOption);
+    if (null != initFiles) {
+      ss.initFiles = initFiles;
+    }
     // -h
     if (cmdLine.hasOption(isHelpOption)) {
       printUsage(null);
@@ -214,15 +227,17 @@ public class OptionsProcessor {
       System.err.println("Invalid arguments: " + error);
     }
     System.err.println("");
-    System.err
-        .println("Usage: hive [--config confdir] [-hiveconf x=y]* [<-f filename>|<-e query-string>] [-S]");
+    System.err.println(
+      "Usage: hive [--config confdir] [-hiveconf x=y]* [-i <init-filename>]*"
+      + " [-f <filename>|-e <query-string>] [-S]");
     System.err.println("");
+    System.err.println("  -i <filename>             init Sql file");
     System.err.println("  -e 'quoted query string'  Sql from command line");
     System.err.println("  -f <filename>             Sql from files");
     System.err.println("  -S                        Silent mode in interactive shell");
     System.err.println("");
     System.err.println("-e and -f cannot be specified together. In the absence of these");
-    System.err.println("options, interactive shell is started");
+    System.err.println(" options, interactive shell is started.");
     System.err.println("");
 
   }

Added: hadoop/hive/trunk/data/scripts/test_init_file.sql
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/data/scripts/test_init_file.sql?rev=957745&view=auto
==============================================================================
--- hadoop/hive/trunk/data/scripts/test_init_file.sql (added)
+++ hadoop/hive/trunk/data/scripts/test_init_file.sql Thu Jun 24 22:50:51 2010
@@ -0,0 +1 @@
+create table tbl_created_by_init(i int);

Modified: hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/QTestUtil.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/QTestUtil.java?rev=957745&r1=957744&r2=957745&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/QTestUtil.java (original)
+++ hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/QTestUtil.java Thu Jun 24 22:50:51 2010
@@ -530,6 +530,10 @@ public class QTestUtil {
     }
     SessionState.start(ss);
     cliDriver = new CliDriver();
+    if (tname.equals("init_file.q")) {
+      ss.initFiles.add("../data/scripts/test_init_file.sql");
+    }
+    cliDriver.processInitFiles(ss);
   }
 
   public int executeOne(String tname) {

Added: hadoop/hive/trunk/ql/src/test/queries/clientpositive/init_file.q
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/queries/clientpositive/init_file.q?rev=957745&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/test/queries/clientpositive/init_file.q (added)
+++ hadoop/hive/trunk/ql/src/test/queries/clientpositive/init_file.q Thu Jun 24 22:50:51 2010
@@ -0,0 +1,5 @@
+-- tbl_created_by_init is supposed to have been created for us
+-- automatically by test_init_file.sql
+
+select * from tbl_created_by_init;
+drop table tbl_created_by_init;

Added: hadoop/hive/trunk/ql/src/test/results/clientpositive/init_file.q.out
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/results/clientpositive/init_file.q.out?rev=957745&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/test/results/clientpositive/init_file.q.out (added)
+++ hadoop/hive/trunk/ql/src/test/results/clientpositive/init_file.q.out Thu Jun 24 22:50:51 2010
@@ -0,0 +1,24 @@
+PREHOOK: query: create table tbl_created_by_init(i int)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: create table tbl_created_by_init(i int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@tbl_created_by_init
+PREHOOK: query: -- tbl_created_by_init is supposed to have been created for us
+-- automatically by test_init_file.sql
+
+select * from tbl_created_by_init
+PREHOOK: type: QUERY
+PREHOOK: Input: default@tbl_created_by_init
+PREHOOK: Output: file:/var/folders/7P/7PeC14kXFIWq0PIYyexGbmKuXUk/-Tmp-/jsichi/hive_2010-06-18_15-26-08_648_7822849778594453961/10000
+POSTHOOK: query: -- tbl_created_by_init is supposed to have been created for us
+-- automatically by test_init_file.sql
+
+select * from tbl_created_by_init
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@tbl_created_by_init
+POSTHOOK: Output: file:/var/folders/7P/7PeC14kXFIWq0PIYyexGbmKuXUk/-Tmp-/jsichi/hive_2010-06-18_15-26-08_648_7822849778594453961/10000
+PREHOOK: query: drop table tbl_created_by_init
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table tbl_created_by_init
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Output: default@tbl_created_by_init