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();
}