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 2009/06/23 19:52:27 UTC

svn commit: r787763 - in /hadoop/hive/trunk: ./ jdbc/src/java/org/apache/hadoop/hive/jdbc/ metastore/src/java/org/apache/hadoop/hive/metastore/ ql/src/java/org/apache/hadoop/hive/ql/ service/src/java/org/apache/hadoop/hive/service/

Author: namit
Date: Tue Jun 23 17:52:27 2009
New Revision: 787763

URL: http://svn.apache.org/viewvc?rev=787763&view=rev
Log:
HIVE-567. jdbc: integrate hive with pentaho report designer
(Raghotham Murthy via namit)


Modified:
    hadoop/hive/trunk/CHANGES.txt
    hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveConnection.java
    hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveDatabaseMetaData.java
    hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HivePreparedStatement.java
    hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveResultSet.java
    hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveResultSetMetaData.java
    hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
    hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
    hadoop/hive/trunk/service/src/java/org/apache/hadoop/hive/service/HiveServer.java

Modified: hadoop/hive/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/CHANGES.txt?rev=787763&r1=787762&r2=787763&view=diff
==============================================================================
--- hadoop/hive/trunk/CHANGES.txt (original)
+++ hadoop/hive/trunk/CHANGES.txt Tue Jun 23 17:52:27 2009
@@ -53,6 +53,9 @@
 
     HIVE-338. Postfix for HIVE-338. (zshao)
 
+    HIVE-567. jdbc: integrate hive with pentaho report designer
+    (Raghotham Murthy via namit)
+
   IMPROVEMENTS
     HIVE-389. Option to build without ivy (jssarma)
 

Modified: hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveConnection.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveConnection.java?rev=787763&r1=787762&r2=787763&view=diff
==============================================================================
--- hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveConnection.java (original)
+++ hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveConnection.java Tue Jun 23 17:52:27 2009
@@ -242,8 +242,7 @@
    */
 
   public DatabaseMetaData getMetaData() throws SQLException {
-    // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    return new HiveDatabaseMetaData();
   }
 
   /* (non-Javadoc)
@@ -344,7 +343,7 @@
    */
 
   public PreparedStatement prepareStatement(String sql) throws SQLException {
-    return new HivePreparedStatement(sql);
+    return new HivePreparedStatement(session, client, sql);
   }
 
   /* (non-Javadoc)
@@ -353,7 +352,7 @@
 
   public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
       throws SQLException {
-    return new HivePreparedStatement(sql);
+    return new HivePreparedStatement(session, client, sql);
   }
 
   /* (non-Javadoc)
@@ -382,8 +381,7 @@
 
   public PreparedStatement prepareStatement(String sql, int resultSetType,
       int resultSetConcurrency) throws SQLException {
-    // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    return new HivePreparedStatement(session, client, sql);
   }
 
   /* (non-Javadoc)

Modified: hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveDatabaseMetaData.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveDatabaseMetaData.java?rev=787763&r1=787762&r2=787763&view=diff
==============================================================================
--- hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveDatabaseMetaData.java (original)
+++ hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveDatabaseMetaData.java Tue Jun 23 17:52:27 2009
@@ -246,8 +246,7 @@
    */
 
   public String getDriverName() throws SQLException {
-    // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    return new String("hive");
   }
 
   /* (non-Javadoc)
@@ -255,8 +254,7 @@
    */
 
   public String getDriverVersion() throws SQLException {
-    // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    return new String("0");
   }
 
   /* (non-Javadoc)
@@ -332,8 +330,7 @@
    */
 
   public int getJDBCMajorVersion() throws SQLException {
-    // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    return 3;
   }
 
   /* (non-Javadoc)
@@ -341,8 +338,7 @@
    */
 
   public int getJDBCMinorVersion() throws SQLException {
-    // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    return 0;
   }
 
   /* (non-Javadoc)
@@ -1383,8 +1379,7 @@
 
   public boolean supportsResultSetHoldability(int holdability)
       throws SQLException {
-    // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    return false;
   }
 
   /* (non-Javadoc)
@@ -1392,8 +1387,7 @@
    */
 
   public boolean supportsResultSetType(int type) throws SQLException {
-    // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    return true;
   }
 
   /* (non-Javadoc)

Modified: hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HivePreparedStatement.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HivePreparedStatement.java?rev=787763&r1=787762&r2=787763&view=diff
==============================================================================
--- hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HivePreparedStatement.java (original)
+++ hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HivePreparedStatement.java Tue Jun 23 17:52:27 2009
@@ -25,14 +25,21 @@
 import java.sql.Timestamp;
 import java.util.Calendar;
 
+import org.apache.hadoop.hive.service.HiveInterface;
+
 
 public class HivePreparedStatement implements java.sql.PreparedStatement {
   String sql;
+  JdbcSessionState session;
+  HiveInterface client;
+
 
   /**
    *
    */
-  public HivePreparedStatement(String sql) {
+  public HivePreparedStatement(JdbcSessionState session, HiveInterface client, String sql) {
+    this.session = session;
+    this.client = client;
     this.sql = sql;
   }
 
@@ -51,7 +58,7 @@
 
   public void clearParameters() throws SQLException {
     // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    //throw new SQLException("Method not supported");
   }
 
   /* (non-Javadoc)
@@ -68,8 +75,12 @@
    */
 
   public ResultSet executeQuery() throws SQLException {
-    // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    try {
+      client.execute(sql);
+    } catch (Exception ex) {
+      throw new SQLException(ex.toString());
+    }
+    return new HiveResultSet(client);
   }
 
   /* (non-Javadoc)
@@ -901,7 +912,7 @@
 
   public void setMaxRows(int max) throws SQLException {
     // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    //throw new SQLException("Method not supported");
   }
 
   /* (non-Javadoc)
@@ -919,7 +930,7 @@
 
   public void setQueryTimeout(int seconds) throws SQLException {
     // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    // throw new SQLException("Method not supported");
   }
 
   /* (non-Javadoc)

Modified: hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveResultSet.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveResultSet.java?rev=787763&r1=787762&r2=787763&view=diff
==============================================================================
--- hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveResultSet.java (original)
+++ hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveResultSet.java Tue Jun 23 17:52:27 2009
@@ -21,6 +21,7 @@
 import java.sql.Statement;
 import java.sql.Time;
 import java.sql.Timestamp;
+import java.util.Arrays;
 import java.util.Calendar;
 import java.util.Map;
 import java.util.List;
@@ -38,6 +39,8 @@
   HiveInterface client;
   ArrayList<?> row;
   DynamicSerDe ds;
+  List<String> columnNames;
+  List<String> columnTypes;
 
   /**
    *
@@ -54,15 +57,23 @@
    */
   public void initDynamicSerde() {
     try {
+      String fullSchema = client.getSchema();
+      String[] schemaParts = fullSchema.split("#");
+      if (schemaParts.length > 2) {
+        columnNames = Arrays.asList(schemaParts[1].split(","));
+        columnTypes = Arrays.asList(schemaParts[2].split(":"));
+      }
       ds = new DynamicSerDe();
       Properties dsp = new Properties();
       dsp.setProperty(Constants.SERIALIZATION_FORMAT, org.apache.hadoop.hive.serde2.thrift.TCTLSeparatedProtocol.class.getName());
       dsp.setProperty(org.apache.hadoop.hive.metastore.api.Constants.META_TABLE_NAME, "result");
-      dsp.setProperty(Constants.SERIALIZATION_DDL, client.getSchema());
+      dsp.setProperty(Constants.SERIALIZATION_DDL, schemaParts[0]);
       dsp.setProperty(Constants.SERIALIZATION_LIB, ds.getClass().toString());
       dsp.setProperty(Constants.FIELD_DELIM, "9");
       ds.initialize(new Configuration(), dsp);
     } catch (Exception ex) {
+      ex.printStackTrace();
+      System.exit(1);
       // TODO: Decide what to do here.
     }
   }
@@ -547,8 +558,7 @@
    */
 
   public ResultSetMetaData getMetaData() throws SQLException {
-    // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    return new HiveResultSetMetaData(columnNames, columnTypes);
   }
 
   /* (non-Javadoc)
@@ -989,6 +999,7 @@
         row = (ArrayList<?>)o;
       }
     } catch (Exception ex) {
+      ex.printStackTrace();
       throw new SQLException("Error retrieving next row");
     }
     // NOTE: fetchOne dosn't throw new SQLException("Method not supported").

Modified: hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveResultSetMetaData.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveResultSetMetaData.java?rev=787763&r1=787762&r2=787763&view=diff
==============================================================================
--- hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveResultSetMetaData.java (original)
+++ hadoop/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveResultSetMetaData.java Tue Jun 23 17:52:27 2009
@@ -4,9 +4,16 @@
 package org.apache.hadoop.hive.jdbc;
 
 import java.sql.SQLException;
-
+import java.util.List;
 
 public class HiveResultSetMetaData implements java.sql.ResultSetMetaData {
+  List<String> columnNames;
+  List<String> columnTypes;
+  
+  public HiveResultSetMetaData(List<String> columnNames, List<String> columnTypes) {
+    this.columnNames = columnNames;
+    this.columnTypes = columnTypes;
+  }
 
   /* (non-Javadoc)
    * @see java.sql.ResultSetMetaData#getCatalogName(int)
@@ -31,8 +38,7 @@
    */
 
   public int getColumnCount() throws SQLException {
-    // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    return columnNames.size();
   }
 
   /* (non-Javadoc)
@@ -50,7 +56,7 @@
 
   public String getColumnLabel(int column) throws SQLException {
     // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    return columnNames.get(column-1);
   }
 
   /* (non-Javadoc)
@@ -58,8 +64,7 @@
    */
 
   public String getColumnName(int column) throws SQLException {
-    // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    return columnNames.get(column-1);
   }
 
   /* (non-Javadoc)
@@ -76,8 +81,7 @@
    */
 
   public String getColumnTypeName(int column) throws SQLException {
-    // TODO Auto-generated method stub
-    throw new SQLException("Method not supported");
+    return columnTypes.get(column-1);
   }
 
   /* (non-Javadoc)

Modified: hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java?rev=787763&r1=787762&r2=787763&view=diff
==============================================================================
--- hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java (original)
+++ hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java Tue Jun 23 17:52:27 2009
@@ -400,6 +400,38 @@
     }
     return thriftType.toString();
   }
+  /** 
+   * Convert FieldSchemas to Thrift DDL + column names and column types
+   * 
+   * @param structName The name of the table
+   * @param fieldSchemas List of fields along with their schemas
+   * @return String containing "Thrift DDL#comma-separated-column-names#colon-separated-columntypes
+   *         Example: "struct result { a string, map<int,string> b}#a,b#string:map<int,string>"
+   */
+  public static String getFullDDLFromFieldSchema(String structName, List<FieldSchema> fieldSchemas) {
+    StringBuilder ddl = new StringBuilder();
+    ddl.append(getDDLFromFieldSchema(structName, fieldSchemas));
+    ddl.append('#');
+    StringBuilder colnames = new StringBuilder();
+    StringBuilder coltypes = new StringBuilder();
+    boolean first = true;
+    for (FieldSchema col: fieldSchemas) {
+      if (first) {
+        first = false;
+      }
+      else {
+        colnames.append(',');
+        coltypes.append(':');
+      }
+      colnames.append(col.getName());
+      coltypes.append(col.getType());
+    }
+    ddl.append(colnames);
+    ddl.append('#');
+    ddl.append(coltypes);
+    return ddl.toString();
+  }
+  
   /** Convert FieldSchemas to Thrift DDL.
    */
   public static String getDDLFromFieldSchema(String structName, List<FieldSchema> fieldSchemas) {
@@ -419,6 +451,7 @@
       ddl.append(col.getName());
     }
     ddl.append("}");
+    
     LOG.info("DDL: " + ddl);
     return ddl.toString();
   }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/Driver.java?rev=787763&r1=787762&r2=787763&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/Driver.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/Driver.java Tue Jun 23 17:52:27 2009
@@ -90,23 +90,33 @@
    * Return the Thrift DDL string of the result
    */
   public String getSchema() throws Exception {
-    if (plan != null && plan.getPlan().getFetchTask() != null) {
-      BaseSemanticAnalyzer sem = plan.getPlan();
+    String schema = "";
+    try {
+      if (plan != null && plan.getPlan().getFetchTask() != null) {
+        BaseSemanticAnalyzer sem = plan.getPlan();
 
-      if (!sem.getFetchTaskInit()) {
-        sem.setFetchTaskInit(true);
-        sem.getFetchTask().initialize(conf);
-      }
-      FetchTask ft = (FetchTask) sem.getFetchTask();
+        if (!sem.getFetchTaskInit()) {
+          sem.setFetchTaskInit(true);
+          sem.getFetchTask().initialize(conf);
+        }
+        FetchTask ft = (FetchTask) sem.getFetchTask();
 
-      tableDesc td = ft.getTblDesc();
-      String tableName = "result";
-      List<FieldSchema> lst = MetaStoreUtils.getFieldsFromDeserializer(
-          tableName, td.getDeserializer());
-      String schema = MetaStoreUtils.getDDLFromFieldSchema(tableName, lst);
-      return schema;
+        tableDesc td = ft.getTblDesc();
+        String tableName = "result";
+        List<FieldSchema> lst = MetaStoreUtils.getFieldsFromDeserializer(
+            tableName, td.getDeserializer());
+        schema = MetaStoreUtils.getFullDDLFromFieldSchema(tableName, lst);
+      }
+      else {
+        schema = "struct result { string empty }";
+      }
+    }
+    catch (Exception e) {
+      e.printStackTrace();
+      throw e;
     }
-    return null;
+    LOG.info("Returning schema: " + schema);
+    return schema;
   }
 
   /**

Modified: hadoop/hive/trunk/service/src/java/org/apache/hadoop/hive/service/HiveServer.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/service/src/java/org/apache/hadoop/hive/service/HiveServer.java?rev=787763&r1=787762&r2=787763&view=diff
==============================================================================
--- hadoop/hive/trunk/service/src/java/org/apache/hadoop/hive/service/HiveServer.java (original)
+++ hadoop/hive/trunk/service/src/java/org/apache/hadoop/hive/service/HiveServer.java Tue Jun 23 17:52:27 2009
@@ -135,9 +135,16 @@
      */
     public String getSchema() throws HiveServerException, TException {
       try {
-        return driver.getSchema();
+        String schema = driver.getSchema();
+        if (schema == null) {
+          schema = "";
+        }
+        LOG.info("Returning schema: " + schema);
+        return schema;
       }
       catch (Exception e) {
+        LOG.error(e.toString());
+        e.printStackTrace();
         throw new HiveServerException("Unable to get schema: " + e.toString());
       }
     }
@@ -241,8 +248,8 @@
       TServer server = new TThreadPoolServer(hfactory, serverTransport,
           new TTransportFactory(), new TTransportFactory(),
           new TBinaryProtocol.Factory(), new TBinaryProtocol.Factory(), options);
+      HiveServerHandler.LOG.info("Starting hive server on port " + port);
       server.serve();
-      HiveServerHandler.LOG.info("Started the new hive server on port " + port);
     } catch (Exception x) {
       x.printStackTrace();
     }